91 lines
2 KiB
C
91 lines
2 KiB
C
|
// Sequence Header File
|
||
|
|
||
|
#ifndef __SEQUENCE__
|
||
|
#define __SEQUENCE__
|
||
|
|
||
|
#include "BlockStream.h"
|
||
|
#include "Interface.h"
|
||
|
#include "TaskManager.h"
|
||
|
|
||
|
class ICARUS_Instance;
|
||
|
|
||
|
class CSequence
|
||
|
{
|
||
|
|
||
|
typedef list < CSequence * > sequence_l;
|
||
|
typedef map < int, CSequence *> sequenceID_m;
|
||
|
typedef list < CBlock * > block_l;
|
||
|
|
||
|
public:
|
||
|
|
||
|
//Constructors / Destructors
|
||
|
CSequence( void );
|
||
|
~CSequence( void );
|
||
|
|
||
|
//Creation and deletion
|
||
|
static CSequence *Create( void );
|
||
|
void Delete( void );
|
||
|
|
||
|
//Organization functions
|
||
|
void AddChild( CSequence * );
|
||
|
void RemoveChild( CSequence * );
|
||
|
|
||
|
void SetParent( CSequence * );
|
||
|
CSequence *GetParent( void ) const { return m_parent; }
|
||
|
|
||
|
//Block manipulation
|
||
|
CBlock *PopCommand( int );
|
||
|
int PushCommand( CBlock *, int );
|
||
|
|
||
|
//Flag utilties
|
||
|
void SetFlag( int );
|
||
|
void RemoveFlag( int, bool = false );
|
||
|
int HasFlag( int );
|
||
|
int GetFlags( void ) const { return m_flags; }
|
||
|
void SetFlags( int flags ) { m_flags = flags; }
|
||
|
|
||
|
//Various encapsulation utilities
|
||
|
int GetIterations( void ) const { return m_iterations; }
|
||
|
void SetIterations( int it ) { m_iterations = it; }
|
||
|
|
||
|
int GetID( void ) const { return m_id; }
|
||
|
void SetID( int id ) { m_id = id; }
|
||
|
|
||
|
CSequence *GetReturn( void ) const { return m_return; }
|
||
|
|
||
|
void SetReturn ( CSequence *sequence );
|
||
|
|
||
|
int GetNumCommands( void ) const { return m_numCommands; }
|
||
|
int GetNumChildren( void ) const { return m_numChildren; }
|
||
|
|
||
|
CSequence *GetChild( int id );
|
||
|
bool HasChild( CSequence *sequence );
|
||
|
|
||
|
void SetOwner( ICARUS_Instance *owner ) { m_owner = owner; }
|
||
|
|
||
|
int Save( void );
|
||
|
int Load( void );
|
||
|
|
||
|
protected:
|
||
|
|
||
|
int SaveCommand( CBlock *block );
|
||
|
|
||
|
ICARUS_Instance *m_owner;
|
||
|
|
||
|
//Organization information
|
||
|
sequence_l m_children;
|
||
|
sequenceID_m m_childrenMap;
|
||
|
|
||
|
int m_numChildren;
|
||
|
CSequence *m_parent;
|
||
|
CSequence *m_return;
|
||
|
|
||
|
//Data information
|
||
|
block_l m_commands;
|
||
|
int m_flags;
|
||
|
int m_iterations;
|
||
|
int m_id;
|
||
|
int m_numCommands;
|
||
|
};
|
||
|
|
||
|
#endif //__SEQUENCE__
|