00001
00002
00003
00004
00005
00006
00007
00008 #ifndef lestes__md__literals__literal_info_base_g_hh__included
00009 #define lestes__md__literals__literal_info_base_g_hh__included
00010
00011 #include <lestes/std/list.hh>
00012 #include <lestes/md/common.hh>
00013
00014 #include <lestes/std/objectize_macros.hh>
00015 package(lestes);
00016 package(std);
00017 class object;
00018 end_package(std);
00019 end_package(lestes);
00020
00021 package(lestes);
00022 package(md);
00023 package(types);
00024 class tm_data_type_base;
00025 end_package(types);
00026 end_package(md);
00027 end_package(lestes);
00028
00029 package(lestes);
00030 package(md);
00031 package(literals);
00032
00033
00034 class literal_info_base;
00035 class li_simple_base;
00036 class li_compound_base;
00037
00038
00039
00040 class literal_info_base : public ::lestes::std::object {
00041 public:
00042 enum kind_type {
00043 COMPOUND,
00044 SIMPLE
00045 };
00046
00047
00048 ptr< ::lestes::md::types::tm_data_type_base > type_get() const;
00049
00050
00051 void type_set(const ptr< ::lestes::md::types::tm_data_type_base > &);
00052
00053
00054 virtual lstring get_asm_definition_val() abstract;
00055
00056
00057 virtual lstring get_asm_definition_type() abstract;
00058
00059
00060 virtual kind_type kind_get() abstract;
00061
00062
00063
00064
00065 virtual ptr<reflection_list> reflection_get() const;
00066
00067 virtual ptr<field_list_list> field_values_get() const;
00068
00069 protected:
00070
00071 literal_info_base (
00072 ptr< ::lestes::md::types::tm_data_type_base > a__literal_info_base__type);
00073
00074
00075 virtual void gc_mark();
00076
00077 private:
00078
00079 srp< ::lestes::md::types::tm_data_type_base > type;
00080 static ptr<reflection_list> reflection;
00081
00082 };
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 class li_simple_base : public literal_info_base {
00093 public:
00094
00095 ucn_string data_get() const;
00096
00097
00098 void data_set(ucn_string);
00099
00100 virtual lstring get_asm_definition_val() abstract;
00101
00102 virtual lstring get_asm_definition_type() abstract;
00103
00104 virtual kind_type kind_get();
00105
00106
00107
00108
00109 virtual ptr<reflection_list> reflection_get() const;
00110
00111 virtual ptr<field_list_list> field_values_get() const;
00112
00113 protected:
00114
00115 li_simple_base (
00116 ptr< ::lestes::md::types::tm_data_type_base > a__literal_info_base__type,
00117 ucn_string a__li_simple_base__data);
00118
00119
00120 virtual void gc_mark();
00121
00122 private:
00123
00124 ucn_string data;
00125 static ptr<reflection_list> reflection;
00126
00127 };
00128
00129
00130
00131
00132
00133
00134
00135
00136 class li_compound_base : public literal_info_base {
00137 public:
00138
00139 ptr< ::lestes::std::list< srp< literal_info_base > > > items_get() const;
00140
00141
00142 void items_set(const ptr< ::lestes::std::list< srp< literal_info_base > > > & );
00143
00144 virtual lstring get_asm_definition_val() abstract;
00145
00146 virtual lstring get_asm_definition_type() abstract;
00147
00148 virtual kind_type kind_get();
00149
00150
00151
00152
00153 virtual ptr<reflection_list> reflection_get() const;
00154
00155 virtual ptr<field_list_list> field_values_get() const;
00156
00157 protected:
00158
00159 li_compound_base (
00160 ptr< ::lestes::md::types::tm_data_type_base > a__literal_info_base__type,
00161 ptr< ::lestes::std::list< srp< literal_info_base > > > a__li_compound_base__items);
00162
00163
00164 virtual void gc_mark();
00165
00166 private:
00167
00168 srp< ::lestes::std::list< srp< literal_info_base > > > items;
00169 static ptr<reflection_list> reflection;
00170
00171 };
00172
00173
00174 end_package(literals);
00175 end_package(md);
00176 end_package(lestes);
00177
00178 package(lestes);
00179 package(std);
00180 specialize_objectize_for_enum( ::lestes::md::literals::literal_info_base::kind_type );
00181 end_package(std);
00182 end_package(lestes);
00183
00184 #endif // lestes__md__literals__literal_info_base_g_hh__included