00001
00002
00003 #ifndef lestes__lang__cplus__sem__ss_finders_g_hh__included
00004 #define lestes__lang__cplus__sem__ss_finders_g_hh__included
00005
00006 #include <lestes/common.hh>
00007 #include <lestes/std/set.hh>
00008
00009 #include <lestes/std/objectize_macros.hh>
00010 package(lestes);
00011 package(std);
00012 class object;
00013 end_package(std);
00014 end_package(lestes);
00015
00016 package(lestes);
00017 package(lang);
00018 package(cplus);
00019 package(sem);
00020
00021
00022 class ss_function_declaration;
00023 class ss_struct_base;
00024 class ss_constructor_finder;
00025 class ss_constructor_find;
00026 class ss_destructor_finder;
00027 class ss_destructor_find;
00028
00029
00030
00031 class ss_constructor_finder : public ::lestes::std::object {
00032 public:
00033
00034 static ptr< ss_constructor_finder > singleton_instance_get();
00035
00036
00037 static void singleton_instance_set(const ptr< ss_constructor_finder > &);
00038
00039 static ptr< ss_constructor_finder > instance();
00040
00041 virtual ptr< ss_function_declaration > find_copy_constructor(ptr< ss_struct_base > ) abstract;
00042
00043 virtual ptr< ss_function_declaration > find_default_constructor(ptr< ss_struct_base > ) abstract;
00044
00045 virtual set < ptr < ss_function_declaration > > find_converting_constructors(ptr< ss_struct_base > ) abstract;
00046
00047 virtual set < ptr < ss_function_declaration > > find_constructors(ptr< ss_struct_base > ) abstract;
00048
00049
00050
00051
00052 virtual ptr<reflection_list> reflection_get() const;
00053
00054 virtual ptr<field_list_list> field_values_get() const;
00055
00056 protected:
00057
00058 ss_constructor_finder (
00059 );
00060
00061
00062 virtual void gc_mark();
00063
00064 private:
00065 static ptr< ss_constructor_finder > singleton_instance;
00066 static ptr<reflection_list> reflection;
00067
00068 };
00069
00070
00071 class ss_constructor_find : public ss_constructor_finder {
00072 public:
00073 virtual ptr< ss_function_declaration > find_copy_constructor(ptr< ss_struct_base > );
00074
00075 virtual ptr< ss_function_declaration > find_default_constructor(ptr< ss_struct_base > );
00076
00077 virtual set < ptr < ss_function_declaration > > find_converting_constructors(ptr< ss_struct_base > );
00078
00079 virtual set < ptr < ss_function_declaration > > find_constructors(ptr< ss_struct_base > );
00080
00081
00082
00083 static ptr< ss_constructor_find > create (
00084 );
00085
00086
00087
00088
00089 virtual ptr<reflection_list> reflection_get() const;
00090
00091 virtual ptr<field_list_list> field_values_get() const;
00092
00093 protected:
00094
00095 ss_constructor_find (
00096 );
00097
00098
00099 virtual void gc_mark();
00100
00101 private:
00102 static ptr<reflection_list> reflection;
00103
00104 };
00105
00106
00107
00108 class ss_destructor_finder : public ::lestes::std::object {
00109 public:
00110
00111 static ptr< ss_destructor_finder > singleton_instance_get();
00112
00113
00114 static void singleton_instance_set(const ptr< ss_destructor_finder > &);
00115
00116 static ptr< ss_destructor_finder > instance();
00117
00118 virtual ptr< ss_function_declaration > find_default_destructor(ptr< ss_struct_base > ) abstract;
00119
00120
00121
00122
00123 virtual ptr<reflection_list> reflection_get() const;
00124
00125 virtual ptr<field_list_list> field_values_get() const;
00126
00127 protected:
00128
00129 ss_destructor_finder (
00130 );
00131
00132
00133 virtual void gc_mark();
00134
00135 private:
00136 static ptr< ss_destructor_finder > singleton_instance;
00137 static ptr<reflection_list> reflection;
00138
00139 };
00140
00141
00142 class ss_destructor_find : public ss_destructor_finder {
00143 public:
00144 virtual ptr< ss_function_declaration > find_default_destructor(ptr< ss_struct_base > );
00145
00146
00147
00148 static ptr< ss_destructor_find > create (
00149 );
00150
00151
00152
00153
00154 virtual ptr<reflection_list> reflection_get() const;
00155
00156 virtual ptr<field_list_list> field_values_get() const;
00157
00158 protected:
00159
00160 ss_destructor_find (
00161 );
00162
00163
00164 virtual void gc_mark();
00165
00166 private:
00167 static ptr<reflection_list> reflection;
00168
00169 };
00170
00171
00172 end_package(sem);
00173 end_package(cplus);
00174 end_package(lang);
00175 end_package(lestes);
00176
00177 #endif // lestes__lang__cplus__sem__ss_finders_g_hh__included