00001
00002
00003
00004
00005
00006
00007 #ifndef DCFMPACKETBASE_H
00008 #define DCFMPACKETBASE_H
00009
00010 #include "DCFbytepack.h"
00011
00012 class DCFmpacketBase
00013 {
00014 public:
00015 inline DCFmpacketBase(
00016 const int sizebmax = 0,
00017 const int bplen_sizeb = 1,
00018 const int bplen_n = 1
00019 );
00020 inline ~DCFmpacketBase();
00021 inline virtual void setencode( const int, const int, const int );
00022 inline virtual void clear();
00023 inline virtual void reset();
00024 inline virtual void set( const char );
00025 inline virtual void set( const char, const int );
00026
00027 inline int sizeb();
00028 inline char mcode();
00029 inline int m();
00030 inline int m( const char );
00031 inline int sw();
00032 inline int sw( const char );
00033 inline int rs();
00034 inline int rs( const char );
00035 inline int order();
00036 inline int order( const char );
00037 inline int n();
00038
00039 inline void bplen_sizeb( const int );
00040 inline int bplen_sizeb();
00041 inline void bplen_n( const int );
00042 inline int bplen_n();
00043
00044 inline virtual void put(const char);
00045 inline char* mpacket();
00046 inline bool empty();
00047
00048 virtual void put( bytepack& );
00049
00050 protected:
00051 int _sizebmax;
00052 int _sizeb;
00053 char _mcode;
00054 int _n;
00055
00056 int _bplen_sizeb;
00057 int _bplen_n;
00058
00059 char* _ptmpacket;
00060
00061 friend
00062 ostream& operator << ( ostream&, DCFmpacketBase& );
00063
00064 friend
00065 istream& operator >> ( istream&, DCFmpacketBase& );
00066
00067 };
00068
00069 inline
00070 DCFmpacketBase::DCFmpacketBase(
00071 const int sizebmax,
00072 const int bplen_sizeb, const int bplen_n
00073 )
00074 : _sizebmax(sizebmax), _sizeb(0), _mcode(0), _n(-1),
00075 _bplen_sizeb(bplen_sizeb), _bplen_n(bplen_n)
00076 {
00077 _ptmpacket = new char[ _sizebmax ];
00078 };
00079
00080 inline
00081 DCFmpacketBase::~DCFmpacketBase()
00082 {
00083 if ( _ptmpacket ) { delete [] _ptmpacket; _ptmpacket = 0; }
00084 };
00085
00086 inline
00087 void DCFmpacketBase::setencode(
00088 const int sizebmax,
00089 const int bplensizeb, const int bplenn
00090 )
00091 {
00092 bplen_sizeb(bplensizeb);
00093 bplen_n(bplenn);
00094 _ptmpacket = new char[sizebmax];
00095 };
00096
00097 inline
00098 void DCFmpacketBase::clear() {
00099 reset();
00100 set( 0, -1);
00101 };
00102
00103 inline
00104 void DCFmpacketBase::reset() { _sizeb=0; };
00105
00106 inline
00107 void DCFmpacketBase::set( const char mcode ) { _mcode=mcode; }
00108
00109 inline
00110 void DCFmpacketBase::set( const char mcode, const int n )
00111 {
00112 set(mcode);
00113 _n=n;
00114 }
00115
00116 inline
00117 int DCFmpacketBase::sizeb() { return _sizeb; };
00118
00119 inline
00120 char DCFmpacketBase::mcode() { return _mcode; };
00121
00122 inline
00123 int DCFmpacketBase::m( const char mcode )
00124 {
00125 return int( (unsigned char)( 0x1F & mcode ) );
00126 };
00127
00128 inline
00129 int DCFmpacketBase::m()
00130 {
00131 return int( (unsigned char)( 0x1F & _mcode ) );
00132 };
00133
00134 inline
00135 int DCFmpacketBase::sw( const char mcode )
00136 {
00137 return int( (unsigned char)( ( 0x80 & mcode ) >> 7 ) );
00138 };
00139
00140 inline
00141 int DCFmpacketBase::sw()
00142 {
00143 return int( (unsigned char)( ( 0x80 & _mcode ) >> 7 ) );
00144 };
00145
00146 inline
00147 int DCFmpacketBase::rs( const char mcode )
00148 {
00149 return ( ( 0x40 & mcode ) >> 6 );
00150 };
00151
00152 inline
00153 int DCFmpacketBase::rs()
00154 {
00155 return int( (unsigned char)( ( 0x40 & _mcode ) >> 6 ) );
00156 };
00157
00158 inline
00159 int DCFmpacketBase::order(const char mcode)
00160 {
00161 return int( (unsigned char)( ( 0x20 & mcode ) >> 5 ) );
00162 };
00163
00164 inline
00165 int DCFmpacketBase::order()
00166 {
00167 return int( (unsigned char)( ( 0x20 & _mcode ) >> 5 ) );
00168 };
00169
00170 inline
00171 int DCFmpacketBase::n() { return _n; };
00172
00173 inline
00174 void DCFmpacketBase::bplen_sizeb( const int bplen_sizeb )
00175 {
00176 _bplen_sizeb = bplen_sizeb;
00177 };
00178
00179 inline
00180 int DCFmpacketBase::bplen_sizeb() { return _bplen_sizeb; };
00181
00182 inline
00183 void DCFmpacketBase::bplen_n( const int bplen_n ) { _bplen_n = bplen_n; };
00184
00185 inline
00186 int DCFmpacketBase::bplen_n() { return _bplen_n; };
00187
00188 inline
00189 void DCFmpacketBase::put(const char c) { _ptmpacket[ _sizeb++ ] = c; };
00190
00191 inline
00192 char* DCFmpacketBase::mpacket() { return _ptmpacket; }
00193
00194 inline
00195 bool DCFmpacketBase::empty() { return ( _sizeb == 0 ); }
00196
00197 #endif
00198