00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _MSG_ELEMENT_H
00010 #define _MSG_ELEMENT_H
00011
00012 class SrcFinfo;
00013 class FuncOrder;
00014
00020 class MsgElement: public Element
00021 {
00022 public:
00031 MsgElement( Id id, const Cinfo* c, const string& name,
00032 unsigned int( *numMsg )(),
00033 char* ( *lookupMsg )( unsigned int ) )
00034 :
00035 Element( id, c, name ),
00036 numMsg_( numMsg ),
00037 lookupMsg_( lookupMsg )
00038 {;}
00039
00043 ~MsgElement()
00044 {;}
00045
00051 Element* copyElement( Id newParent, Id newId, unsigned int n,
00052 bool toGlobal ) const
00053 {
00054 return 0;
00055 }
00056
00058
00060
00062 unsigned int numData() const
00063 {
00064 return numMsg_();
00065 }
00066
00068 unsigned int numLocalData() const
00069 {
00070 return numMsg_();
00071 }
00072
00074 unsigned int localDataStart() const
00075 {
00076 return 0;
00077 }
00078
00080 unsigned int numField( unsigned int rawIndex ) const
00081 {
00082 return 1;
00083 }
00084
00085 unsigned int totNumLocalField() const
00086 {
00087 return numMsg_();
00088 }
00089
00091 unsigned int getNode( unsigned int dataIndex ) const
00092 {
00093 return Shell::myNode();
00094 }
00095
00097 unsigned int startDataIndex( unsigned int node ) const
00098 {
00099 return 0;
00100 }
00101
00103 unsigned int rawIndex( unsigned int dataIndex ) const
00104 {
00105 return dataIndex;
00106 }
00107
00113 bool hasFields() const {
00114 return false;
00115 }
00116
00117 bool isGlobal() const {
00118 return true;
00119 }
00120
00121 unsigned int getNumOnNode( unsigned int node ) const {
00122 return numMsg_();
00123 }
00124
00126
00128
00145 char* data( unsigned int rawIndex,
00146 unsigned int fieldIndex = 0 ) const
00147 {
00148 return lookupMsg_( rawIndex );
00149 }
00150
00156 void resize( unsigned int newNumData )
00157 {;}
00158
00164 void resizeField( unsigned int rawIndex, unsigned int newNumField )
00165 {;}
00166
00168
00172 void zombieSwap( const Cinfo* newCinfo ) {
00173 replaceCinfo( newCinfo );
00174 Element::zombieSwap( newCinfo );
00175 }
00176
00177
00178 private:
00182 unsigned int( *numMsg_ )();
00183
00187 char* ( *lookupMsg_ )( unsigned int );
00188 };
00189
00190 #endif // _Msg_ELEMENT_H