www.pudn.com > MPEG2systemsrc.rar > Directory.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.
*/
/* Directory, Program and EStream implementations */
#include "Utilities.H"
#include "Directory.H"
extern "C"
{
#include
}
/* Directory functions */
Directory::Directory ()
{
head_prec = NULL;
}
void Directory::add_program (Program* p)
{
ProgramRecord* new_prec = new ProgramRecord(p);
new_prec->next_prec = head_prec;
head_prec = new_prec;
}
void Directory::remove_program (Program* p)
{
ProgramRecord* cur_prec = head_prec;
ProgramRecord* prev_prec;
while (cur_prec)
{
if (cur_prec->program == p)
{
if (cur_prec == head_prec)
{
head_prec = head_prec->next_prec;
}
else
{
prev_prec->next_prec = cur_prec->next_prec;
}
delete cur_prec;
return;
}
prev_prec = cur_prec;
cur_prec = cur_prec->next_prec;
}
}
void Directory::remove_program (int pn)
{
ProgramRecord* cur_prec = head_prec;
ProgramRecord* prev_prec;
while (cur_prec)
{
if (cur_prec->program->program_number == pn)
{
if (cur_prec == head_prec)
{
head_prec = head_prec->next_prec;
}
else
{
prev_prec->next_prec = cur_prec->next_prec;
}
delete cur_prec;
return;
}
prev_prec = cur_prec;
cur_prec = cur_prec->next_prec;
}
}
Program* Directory::get_program (int pn)
{
ProgramRecord* prec = head_prec;
while (prec)
{
if (prec->program->program_number == pn)
{
return prec->program;
}
prec = prec->next_prec;
}
return NULL;
}
int Directory::get_num_programs ()
{
ProgramRecord* prec = head_prec;
int n = 0;
while (prec)
{
n++;
prec = prec->next_prec;
}
return n;
}
void Directory::print ()
{
ProgramRecord* prec = head_prec;
while (prec)
{
prec->program->print();
prec = prec->next_prec;
}
}
/* Program functions */
Program::Program ()
{
program_number = UNASSIGNED;
pid = UNASSIGNED;
active = ACTIVE;
head_erec = NULL;
}
Program::Program (int pn)
{
program_number = pn;
pid = UNASSIGNED;
active = ACTIVE;
head_erec = NULL;
}
Program::Program (int pn, int id)
{
program_number = pn;
pid = id;
active = ACTIVE;
head_erec = NULL;
}
void Program::activate ()
{
active = ACTIVE;
}
void Program::deactivate ()
{
active = NOTACTIVE;
}
void Program::add_estream (EStream* es)
{
EStreamRecord* new_erec = new EStreamRecord(es);
new_erec->next_erec = head_erec;
head_erec = new_erec;
}
void Program::set_pcr_estream (EStream* es)
{
pcr_estream = es;
}
void Program::remove_estream (EStream* es)
{
EStreamRecord* cur_erec = head_erec;
EStreamRecord* prev_erec;
while (cur_erec)
{
if (cur_erec->estream == es)
{
if (cur_erec == head_erec)
{
head_erec = head_erec->next_erec;
}
else
{
prev_erec->next_erec = cur_erec->next_erec;
}
delete cur_erec;
return;
}
prev_erec = cur_erec;
cur_erec = cur_erec->next_erec;
}
}
EStream* Program::get_estream (int id)
{
EStreamRecord* erec = head_erec;
while (erec)
{
if (erec->estream->pid == id) return erec->estream;
erec = erec->next_erec;
}
return NULL;
}
int Program::get_num_streams ()
{
EStreamRecord* erec = head_erec;
int n = 0;
while (erec)
{
n++;
erec = erec->next_erec;
}
return n;
}
void Program::print ()
{
printf(" Program %d:\n", program_number);
printf(" pid: %d\n", pid);
EStreamRecord* erec = head_erec;
while (erec)
{
erec->estream->print();
erec = erec->next_erec;
}
}
ProgramRecord::ProgramRecord (Program* prog)
{
program = prog;
next_prec = NULL;
}
/* EStream functions */
EStream::EStream (StreamType type, int id, int b)
{
stream_type = type;
pid = id;
bandwidth = b;
}
void EStream::print ()
{
printf(" EStream of type: %d pid: %d\n", stream_type, pid);
}
EStreamRecord::EStreamRecord (EStream* es)
{
estream = es;
next_erec = NULL;
}