www.pudn.com > MPEG2systemsrc.rar > IPortFromRam.C
/* Copyright (C) 1995, Tektronix Inc. All Rights Reserved.
*
* Usage Restrictions
*
* License is granted to copy, to use, and to make and to use derivative
* works for research and evaluation purposes only.
*
* Disclaimer of Warranty
*
* These software programs are available to the user without any license
* fee or royalty on an "as is" basis. Tektronix Inc. disclaims any and
* all warranties, whether express, implied, or statuary, including any
* implied warranties or merchantability or of fitness for a particular
* purpose. In no event shall the copyright-holder be liable for any
* incidental, punitive, or consequential damages of any kind whatsoever
* arising from the use of these programs.
*
* This disclaimer of warranty extends to the user of these programs and
* user's customers, employees, agents, transferees, successors, and
* assigns.
*
* The Tektronix Inc. does not represent or warrant that the programs
* furnished hereunder are free of infringement of any third-party
* patents.
*/
/* IPortFromRam implementation */
#include "IPortFromRam.H"
#include "Utilities.H"
IPortFromRam::IPortFromRam (char* b, int length) : InputPort()
{
bits = b;
bits_ptr = 0;
bits_length = length;
pos = -1; // forces read on first call to read_bit
}
char IPortFromRam::input_bit ()
// returns next bit as a char or BADBIT for an error
{
int result = inc_bit ();
if (result) return bit2char();
return BADBIT;
}
char IPortFromRam::input_byte ()
{
if (pos <= 0)
{
byte = bits[bits_ptr];
bits_ptr++;
if (bits_ptr >= bits_length) bits_ptr = 0;
}
else
{
sys_error("can't read_byte; not on byte boundary");
}
return byte;
}
int IPortFromRam::inc_bit ()
// increments pos or reads from buffer if necessary
{
if (pos <= 0)
{
byte = bits[bits_ptr];
bits_ptr++;
if (bits_ptr >= bits_length) bits_ptr = 0;
pos = 7;
}
else
{
pos--;
}
return 1;
}
char IPortFromRam::bit2char ()
// returns ONE or ZERO depending on current bit;
{
return (byte & (1 << pos)) ? ONE : ZERO;
}