00001 #ifndef _IT_BUS_BUILTIN_TYPES_FACTORY_H_
00002 #define _IT_BUS_BUILTIN_TYPES_FACTORY_H_
00003
00004
00005
00006
00007 #include <it_bus/qname.h>
00008 #include <it_bus/type_factory.h>
00009 #include <it_bus/any_type.h>
00010 #include <it_bus/user_fault_exception.h>
00011
00012 namespace IT_Bus
00013 {
00023 class IT_AFC_API BuiltInTypesFactory : public IT_Bus::TypeFactory
00024 {
00025
00026 public:
00027
00033 static void
00034 create_builtin_type_factory();
00035
00039 static void
00040 destroy_builtin_type_factory();
00041
00042
00043 ~BuiltInTypesFactory();
00044
00045 typedef IT_Bus::AnyType * (*create_type_ptr)();
00046
00054 IT_Bus::AnyType *
00055 create_type(
00056 const IT_Bus::QName& type_name
00057 ) const ;
00058
00062 void destroy_type(
00063 IT_Bus::AnyType * any_type
00064 ) const;
00065
00069 IT_Bus::UserFaultException *
00070 create_exception(
00071 const IT_Bus::QName& type_name
00072 ) const;
00073
00077 AnyType*
00078 create_type_for_element(
00079 const QName& element_name
00080 ) const;
00081
00085 void destroy_exception(
00086 IT_Bus::UserFaultException * ex_type
00087 ) const;
00088
00092 static IT_Bus::AnyType *
00093 smf_create_boolean_holder();
00094
00098 static IT_Bus::AnyType *
00099 smf_create_byte_holder();
00100
00104 static IT_Bus::AnyType *
00105 smf_create_short_holder();
00106
00110 static IT_Bus::AnyType *
00111 smf_create_int_holder();
00112
00116 static IT_Bus::AnyType *
00117 smf_create_long_holder();
00118
00122 static IT_Bus::AnyType *
00123 smf_create_string_holder();
00124
00128 static IT_Bus::AnyType *
00129 smf_create_float_holder();
00130
00134 static IT_Bus::AnyType *
00135 smf_create_double_holder();
00136
00140 static IT_Bus::AnyType *
00141 smf_create_ubyte_holder();
00142
00146 static IT_Bus::AnyType *
00147 smf_create_ushort_holder();
00148
00152 static IT_Bus::AnyType *
00153 smf_create_uint_holder();
00154
00158 static IT_Bus::AnyType *
00159 smf_create_ulong_holder();
00160
00164 static IT_Bus::AnyType *
00165 smf_create_decimal_holder();
00166
00170 static IT_Bus::AnyType *
00171 smf_create_any_type_holder();
00172
00177 static IT_Bus::AnyType *
00178 smf_create_reference();
00179
00183 static IT_Bus::AnyType *
00184 smf_create_gyear();
00185
00189 static IT_Bus::AnyType *
00190 smf_create_ncname();
00191
00195 static IT_Bus::AnyType *
00196 smf_create_name();
00197
00201 static IT_Bus::AnyType *
00202 smf_create_pint();
00203
00207 static IT_Bus::AnyType *
00208 smf_create_id();
00209
00213 static IT_Bus::AnyType *
00214 smf_create_token();
00215
00219 static IT_Bus::AnyType *
00220 smf_create_nstring();
00221
00225 static IT_Bus::AnyType *
00226 smf_create_auri();
00227
00231 static IT_Bus::AnyType *
00232 smf_create_language();
00233
00237 static IT_Bus::AnyType *
00238 smf_create_date();
00239
00243 static IT_Bus::AnyType *
00244 smf_create_nmtokens();
00245
00249 static IT_Bus::AnyType *
00250 smf_create_nmtoken();
00251
00255 static IT_Bus::AnyType *
00256 smf_create_gmonth();
00257
00261 static IT_Bus::AnyType *
00262 smf_create_time();
00263
00267 static IT_Bus::AnyType *
00268 smf_create_qname();
00269
00273 static IT_Bus::AnyType *
00274 smf_create_nnint();
00275
00279 static IT_Bus::AnyType *
00280 smf_create_npint();
00281
00285 static IT_Bus::AnyType *
00286 smf_create_gmonthday();
00287
00291 static IT_Bus::AnyType *
00292 smf_create_date_time();
00293
00297 static IT_Bus::AnyType *
00298 smf_create_gyearmonth();
00299
00303 static IT_Bus::AnyType *
00304 smf_create_gday();
00305
00309 static IT_Bus::AnyType *
00310 smf_create_duration();
00311
00315 static IT_Bus::AnyType *
00316 smf_create_nint();
00317
00321 static IT_Bus::AnyType *
00322 smf_create_integer();
00323
00327 static IT_Bus::AnyType *
00328 smf_create_hbin();
00329
00333 static IT_Bus::AnyType *
00334 smf_create_base64();
00335
00336 protected:
00345 BuiltInTypesFactory();
00346
00347 private:
00348 void populate_type_map();
00349
00350 void insert_type_fn_ptr(const IT_Bus::QName & type_name, create_type_ptr op_ptr);
00351
00352 static BuiltInTypesFactory * sm_builtin_type_factory;
00353 static IT_Bus::QNameHashMap<create_type_ptr> sm_type_map;
00354 };
00355 }
00356
00357 #endif
00358
00359