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