00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _MPCL_TEXT_CODEGEN_INSTRUCTION_BODY__
00027 #define _MPCL_TEXT_CODEGEN_INSTRUCTION_BODY__
00028
00029 #include "../../io/streamable.hh"
00030 #include "../../io/streamable_map.hh"
00031 #include "../../util/collection/map.hh"
00032 #include "../string.hh"
00033 #include "clause_body_string.hh"
00034 #include "clause_tag_string.hh"
00035
00036
00038 namespace mpcl
00039 {
00040
00042 namespace text
00043 {
00044
00046 namespace codegen
00047 {
00048
00049 using io::IStreamable;
00050 using io::TStreamableMap;
00051 using std::basic_istream;
00052 using std::basic_ostream;
00053
00058 class TInstructionBody : public IStreamable<>
00059 {
00060
00061
00062
00063
00064
00065 friend class TPatternBasedCodeGenerator;
00066
00067
00068 private:
00069
00071 typedef
00072 TStreamableMap<TClauseTagString, TClauseBodyString>
00073 TClauseMap;
00074
00075
00076 private:
00077
00079 TClauseMap tClauseMap;
00080
00081
00082 public:
00083
00084
00085
00086
00087
00089 TInstructionBody (void) :
00090 IStreamable<> () ,
00091 tClauseMap () {}
00092
00098 TInstructionBody& operator = (const TInstructionBody& rktSOURCE_INSTRUCTION_BODY);
00099
00100
00101 protected:
00102
00103
00104
00105
00106
00111 void read (basic_istream<char_type, traits_type>& rtSOURCE_ISTREAM);
00112
00113
00114 public:
00115
00116
00117
00118
00119
00120 bool existsClause (const char* pkcCLAUSE_NAME) const;
00121
00122 const TClauseTagString& clauseTag (const char* pkcSOURCE_CLAUSE_TAG) const;
00123
00124 const TClauseBodyString& clauseBody (const char* pkcSOURCE_CLAUSE_TAG) const;
00125
00126 TMap<TString, const TClauseBodyString*> targetedVariablesForClause (const char* pkcSOURCE_CLAUSE_TAG) const;
00127
00128 const TClauseBodyString& operator [] (const char* pkcSOURCE_CLAUSE_TAG) const;
00129
00135 bool operator == (const TInstructionBody& rktSOURCE_INSTRUCTION_BODY) const;
00136
00137
00138 protected:
00139
00140
00141
00142
00143
00148 void write (basic_ostream<char_type, traits_type>& rtTARGET_STREAM) const;
00149
00150 };
00151
00152 }
00153
00154 }
00155
00156 }
00157
00158
00159 #endif // not _MPCL_TEXT_CODEGEN_INSTRUCTION_BODY__