00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00020 #ifndef SHVARIANTFACTORY_HPP
00021 #define SHVARIANTFACTORY_HPP
00022
00023 #include <string>
00024 #include "ShDllExport.hpp"
00025 #include "ShRefCount.hpp"
00026 #include "ShTypeInfo.hpp"
00027
00028 namespace SH {
00029
00030 class ShVariant;
00031
00032 struct
00033 SH_DLLEXPORT
00034 ShVariantFactory {
00035 virtual ~ShVariantFactory() {}
00036
00038 virtual ShVariant* generate(int N) const = 0;
00039
00041
00042
00043 virtual ShVariant* generate(std::string s) const = 0;
00044
00048
00049 virtual ShVariant* generate(int N, void *data, bool managed = true) const = 0;
00050
00052 virtual ShVariant* generateZero(int N = 1) const = 0;
00053
00055 virtual ShVariant* generateOne(int N = 1) const = 0;
00056 };
00057
00058 template<typename T, ShDataType DT>
00059 struct ShDataVariantFactory: public ShVariantFactory {
00060 ShVariant* generate(int N) const;
00061
00062 ShVariant* generate(std::string s) const;
00063
00064 ShVariant* generate(int N, void *data, bool managed = true) const;
00065
00066 ShVariant* generateZero(int N = 1) const;
00067 ShVariant* generateOne(int N = 1) const;
00068
00069 static const ShDataVariantFactory* instance();
00070
00071 protected:
00072 static ShDataVariantFactory *m_instance;
00073
00074 ShDataVariantFactory();
00075 };
00076
00077
00078 }
00079
00080 #include "ShVariantFactoryImpl.hpp"
00081
00082 #endif