diff options
| -rw-r--r-- | slicer/slicer/modelParts.h | 3 | ||||
| -rw-r--r-- | slicer/slicer/modelPartsTypes.cpp | 44 | ||||
| -rw-r--r-- | slicer/slicer/modelPartsTypes.h | 38 | ||||
| -rw-r--r-- | slicer/slicer/parser.cpp | 30 | 
4 files changed, 59 insertions, 56 deletions
| diff --git a/slicer/slicer/modelParts.h b/slicer/slicer/modelParts.h index ea563c1..3533cc7 100644 --- a/slicer/slicer/modelParts.h +++ b/slicer/slicer/modelParts.h @@ -203,10 +203,11 @@ namespace Slicer {  			virtual ModelPartType GetType() const override;  			virtual bool IsOptional() const override; +			static const std::string rootName; +  		private:  			T * ModelObject;  			ModelPartPtr mp; -			static std::string rootName;  	};  } diff --git a/slicer/slicer/modelPartsTypes.cpp b/slicer/slicer/modelPartsTypes.cpp index 4540060..f518f61 100644 --- a/slicer/slicer/modelPartsTypes.cpp +++ b/slicer/slicer/modelPartsTypes.cpp @@ -10,23 +10,23 @@ namespace Slicer {  	MODELPARTFOR(Ice::Int, ModelPartForSimple);  	MODELPARTFOR(Ice::Long, ModelPartForSimple); -	template<> std::string Slicer::ModelPartForRoot<std::string>::rootName = "String"; -	template<> std::string Slicer::ModelPartForRoot<bool>::rootName = "Boolean"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Float>::rootName = "Float"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Double>::rootName = "Double"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Byte>::rootName = "Byte"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Short>::rootName = "Short"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Int>::rootName = "Int"; -	template<> std::string Slicer::ModelPartForRoot<Ice::Long>::rootName = "Long"; +	template<> const std::string Slicer::ModelPartForRoot<std::string>::rootName = "String"; +	template<> const std::string Slicer::ModelPartForRoot<bool>::rootName = "Boolean"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Float>::rootName = "Float"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Double>::rootName = "Double"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Byte>::rootName = "Byte"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Short>::rootName = "Short"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Int>::rootName = "Int"; +	template<> const std::string Slicer::ModelPartForRoot<Ice::Long>::rootName = "Long"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<std::string>>::rootName = "OptionalString"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<bool>>::rootName = "OptionalBoolean"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Float>>::rootName = "OptionalFloat"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Double>>::rootName = "OptionalDouble"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Byte>>::rootName = "OptionalByte"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Short>>::rootName = "OptionalShort"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Int>>::rootName = "OptionalInt"; -	template<> std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Long>>::rootName = "OptionalLong"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<std::string>>::rootName = "OptionalString"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<bool>>::rootName = "OptionalBoolean"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Float>>::rootName = "OptionalFloat"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Double>>::rootName = "OptionalDouble"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Byte>>::rootName = "OptionalByte"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Short>>::rootName = "OptionalShort"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Int>>::rootName = "OptionalInt"; +	template<> const std::string Slicer::ModelPartForRoot<IceUtil::Optional<Ice::Long>>::rootName = "OptionalLong";  	template class Slicer::ModelPartForRoot<std::string>;  	template class Slicer::ModelPartForRoot<bool>; @@ -51,31 +51,31 @@ namespace Slicer {  	ChildRefPtr ModelPartForSimpleBase::GetChildRef(const std::string &, const HookFilter &) { return NULL; }  	bool ModelPartForSimpleBase::HasValue() const { return true; }  	ModelPartType ModelPartForSimpleBase::GetType() const { return type; } -	ModelPartType ModelPartForSimpleBase::type = mpt_Simple; +	const ModelPartType ModelPartForSimpleBase::type = mpt_Simple;  	void ModelPartForConvertedBase::OnEachChild(const ChildHandler &) { }  	ChildRefPtr ModelPartForConvertedBase::GetAnonChildRef(const HookFilter &) { return NULL; }  	ChildRefPtr ModelPartForConvertedBase::GetChildRef(const std::string &, const HookFilter &) { return NULL; }  	bool ModelPartForConvertedBase::HasValue() const { return true; }  	ModelPartType ModelPartForConvertedBase::GetType() const { return type; } -	ModelPartType ModelPartForConvertedBase::type = mpt_Simple; +	const ModelPartType ModelPartForConvertedBase::type = mpt_Simple;  	ModelPartType ModelPartForComplexBase::GetType() const { return type; } -	ModelPartType ModelPartForComplexBase::type = mpt_Complex; +	const ModelPartType ModelPartForComplexBase::type = mpt_Complex;  	void ModelPartForEnumBase::OnEachChild(const ChildHandler &) { }  	ChildRefPtr ModelPartForEnumBase::GetAnonChildRef(const HookFilter &) { return NULL; }  	ChildRefPtr ModelPartForEnumBase::GetChildRef(const std::string &, const HookFilter &) { return NULL; }  	bool ModelPartForEnumBase::HasValue() const { return true; }  	ModelPartType ModelPartForEnumBase::GetType() const { return type; } -	ModelPartType ModelPartForEnumBase::type = mpt_Simple; +	const ModelPartType ModelPartForEnumBase::type = mpt_Simple;  	bool ModelPartForSequenceBase::HasValue() const { return true; }  	ModelPartType ModelPartForSequenceBase::GetType() const { return type; } -	ModelPartType ModelPartForSequenceBase::type = mpt_Sequence; +	const ModelPartType ModelPartForSequenceBase::type = mpt_Sequence;  	bool ModelPartForDictionaryBase::HasValue() const { return true; }  	ModelPartType ModelPartForDictionaryBase::GetType() const { return type; } -	ModelPartType ModelPartForDictionaryBase::type = mpt_Dictionary; +	const ModelPartType ModelPartForDictionaryBase::type = mpt_Dictionary;  } diff --git a/slicer/slicer/modelPartsTypes.h b/slicer/slicer/modelPartsTypes.h index e3f56a4..c2e8cfe 100644 --- a/slicer/slicer/modelPartsTypes.h +++ b/slicer/slicer/modelPartsTypes.h @@ -11,7 +11,7 @@ namespace Slicer {  			virtual ChildRefPtr GetChildRef(const std::string &, const HookFilter &) override;  			virtual bool HasValue() const override;  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T> @@ -35,7 +35,7 @@ namespace Slicer {  			virtual ChildRefPtr GetChildRef(const std::string &, const HookFilter &) override;  			virtual bool HasValue() const override;  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T, typename M, T M::* MV> @@ -80,7 +80,7 @@ namespace Slicer {  	class DLL_PUBLIC ModelPartForComplexBase : public ModelPart {  		public:  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T> @@ -98,8 +98,7 @@ namespace Slicer {  				public:  					virtual const Metadata & GetMetadata() const override { return metadata; } -				private: -					static Metadata metadata; +					static const Metadata metadata;  			};  			template <typename MT, typename CT, MT CT::*M, typename MP, typename Base = HookMetadata<MT, CT, M>> @@ -136,9 +135,8 @@ namespace Slicer {  			typedef std::vector<HookPtr> Hooks; -		private: -			static Hooks hooks; -			static Metadata metadata; +			static const Hooks hooks; +			static const Metadata metadata;  	};  	template<typename T> @@ -160,9 +158,10 @@ namespace Slicer {  			virtual IceUtil::Optional<std::string> GetTypeIdProperty() const override; +			static const std::string typeIdProperty; +  		private:  			T & ModelObject; -			static std::string typeIdProperty;  	};  	template<typename T> @@ -187,7 +186,7 @@ namespace Slicer {  			ChildRefPtr GetChildRef(const std::string &, const HookFilter &) override;  			virtual bool HasValue() const override;  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T> @@ -204,17 +203,18 @@ namespace Slicer {  			virtual void GetValue(ValueTargetPtr s) override; +			static const Metadata metadata; +			static const Enumerations enumerations; +  		private:  			T & modelPart; -			static Metadata metadata; -			static Enumerations enumerations;  	};  	class DLL_PUBLIC ModelPartForSequenceBase : public ModelPart {  		public:  			virtual bool HasValue() const override;  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T> @@ -232,12 +232,13 @@ namespace Slicer {  			virtual const Metadata & GetMetadata() const override; +			static const Metadata metadata; +			static const std::string elementName; +  		private:  			ModelPartPtr elementModelPart(typename T::value_type &) const;  			T & sequence; -			static std::string elementName; -			static Metadata metadata;  	};  	template<typename T> @@ -257,7 +258,7 @@ namespace Slicer {  		public:  			virtual bool HasValue() const override;  			virtual ModelPartType GetType() const override; -			static ModelPartType type; +			static const ModelPartType type;  	};  	template<typename T> @@ -275,10 +276,11 @@ namespace Slicer {  			virtual const Metadata & GetMetadata() const override; +			static const Metadata metadata; +			static const std::string pairName; +  		private:  			T & dictionary; -			static std::string pairName; -			static Metadata metadata;  	};  } diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp index 7e795be..6a5019b 100644 --- a/slicer/slicer/parser.cpp +++ b/slicer/slicer/parser.cpp @@ -157,10 +157,10 @@ namespace Slicer {  	Slicer::defineRootName(const std::string & type, const std::string & name) const  	{  		fprintbf(cpp, "template<>\n"); -		fprintbf(cpp, "std::string ModelPartForRoot< %s >::rootName(\"%s\");\n\n", +		fprintbf(cpp, "const std::string ModelPartForRoot< %s >::rootName(\"%s\");\n\n",  				type, name);  		fprintbf(cpp, "template<>\n"); -		fprintbf(cpp, "std::string ModelPartForRoot< IceUtil::Optional< %s > >::rootName(\"Optional%s\");\n\n", +		fprintbf(cpp, "const std::string ModelPartForRoot< IceUtil::Optional< %s > >::rootName(\"Optional%s\");\n\n",  				type, name);  		fprintbf(cpp, "template class ModelPartForRoot< %s >;\n\n", type); @@ -183,7 +183,7 @@ namespace Slicer {  		fprintbf(cpp, "template<>\n");  		auto typeId = metaDataValue("slicer:typeid:", c->getMetaData()); -		fprintbf(cpp, "std::string ModelPartForClass< %s >::typeIdProperty(\"%s\");\n\n", +		fprintbf(cpp, "const std::string ModelPartForClass< %s >::typeIdProperty(\"%s\");\n\n",  				typeToString(decl),  				typeId ? *typeId : "slicer-typeid"); @@ -219,7 +219,7 @@ namespace Slicer {  		fprintbf(cpp, "\treturn (id == \"%s\") ? TypeId() : ModelPart::ToExchangeTypeName(id);\n}\n\n",  				c->scoped()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForComplex< %s >::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForComplex< %s >::metadata ",  				c->scoped());  		copyMetadata(c->getMetaData()); @@ -246,7 +246,7 @@ namespace Slicer {  		auto name = metaDataValue("slicer:root:", c->getMetaData());  		defineRootName(c->scoped(), name ? *name : c->name()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForComplex< %s >::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForComplex< %s >::metadata ",  				c->scoped());  		copyMetadata(c->getMetaData()); @@ -262,7 +262,7 @@ namespace Slicer {  		if (!cpp) return;  		fprintbf(cpp, "template<>\n"); -		fprintbf(cpp, "ModelPartForComplex< %s >::Hooks ", +		fprintbf(cpp, "const ModelPartForComplex< %s >::Hooks ",  				it->scoped());  		fprintbf(cpp, "ModelPartForComplex< %s >::hooks {\n",  				it->scoped()); @@ -318,7 +318,7 @@ namespace Slicer {  				t = Slice::ClassDefPtr::dynamicCast(dm->container())->declaration();  			}  			auto type = dm->type(); -			fprintbf(cpp, "template<>\ntemplate<>\nMetadata\n"); +			fprintbf(cpp, "template<>\ntemplate<>\nconst Metadata\n");  			createNewModelPartPtrFor(t);  			fprintbf(cpp, "< %s >::HookMetadata< %s",  					typeToString(it), @@ -340,11 +340,11 @@ namespace Slicer {  		if (!cpp) return;  		fprintbf(cpp, "// Enumeration %s\n", e->name()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForEnum< %s >::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForEnum< %s >::metadata ",  				e->scoped());  		copyMetadata(e->getMetaData()); -		fprintbf(cpp, "template<>\nModelPartForEnum< %s >::Enumerations\nModelPartForEnum< %s >::enumerations([]() -> ModelPartForEnum< %s >::Enumerations\n", +		fprintbf(cpp, "template<>\nconst ModelPartForEnum< %s >::Enumerations\nModelPartForEnum< %s >::enumerations([]() -> ModelPartForEnum< %s >::Enumerations\n",  				e->scoped(),  				e->scoped(),  				e->scoped()); @@ -411,14 +411,14 @@ namespace Slicer {  		fprintbf(cpp, "template<>\n");  		auto ename = metaDataValue("slicer:element:", s->getMetaData()); -		fprintbf(cpp, "std::string ModelPartForSequence< %s >::elementName(\"%s\");\n\n", +		fprintbf(cpp, "const std::string ModelPartForSequence< %s >::elementName(\"%s\");\n\n",  				s->scoped(),  				ename ? *ename : "element");  		auto name = metaDataValue("slicer:root:", s->getMetaData());  		defineRootName(s->scoped(), name ? *name : s->name()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForSequence< %s >::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForSequence< %s >::metadata ",  				s->scoped());  		copyMetadata(s->getMetaData()); @@ -438,12 +438,12 @@ namespace Slicer {  		fprintbf(cpp, "// Dictionary %s\n", d->name());  		auto iname = metaDataValue("slicer:item:", d->getMetaData());  		fprintbf(cpp, "template<>\n"); -		fprintbf(cpp, "std::string ModelPartForDictionary< %s >::pairName(\"%s\");\n\n", +		fprintbf(cpp, "const std::string ModelPartForDictionary< %s >::pairName(\"%s\");\n\n",  				d->scoped(),  				iname ? *iname : "element");  		fprintbf(cpp, "template<>\n"); -		fprintbf(cpp, "ModelPartForComplex< %s::value_type >::Hooks ", +		fprintbf(cpp, "const ModelPartForComplex< %s::value_type >::Hooks ",  				d->scoped());  		fprintbf(cpp, "ModelPartForComplex< %s::value_type >::hooks {\n",  				d->scoped()); @@ -476,11 +476,11 @@ namespace Slicer {  		auto name = metaDataValue("slicer:root:", d->getMetaData());  		defineRootName(d->scoped(), name ? *name : d->name()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForDictionary< %s >::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForDictionary< %s >::metadata ",  				d->scoped());  		copyMetadata(d->getMetaData()); -		fprintbf(cpp, "template<>\nMetadata ModelPartForComplex<%s::value_type>::metadata ", +		fprintbf(cpp, "template<>\nconst Metadata ModelPartForComplex<%s::value_type>::metadata ",  				d->scoped());  		copyMetadata(d->getMetaData()); | 
