diff options
| author | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-09-23 01:08:58 +0100 | 
|---|---|---|
| committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2016-09-23 01:08:58 +0100 | 
| commit | 02c0ef321cd8082aa1d9abef6a17482188fbfa21 (patch) | |
| tree | aadb808db5350ce319279a0cb7ddcc310b9c8174 | |
| parent | Fold the template argument into createNewModelPartPtrFor (diff) | |
| download | slicer-02c0ef321cd8082aa1d9abef6a17482188fbfa21.tar.bz2 slicer-02c0ef321cd8082aa1d9abef6a17482188fbfa21.tar.xz slicer-02c0ef321cd8082aa1d9abef6a17482188fbfa21.zip  | |
Refactor getAllConversions into getAllMetadata and fold ModelPartForConverted into createNewModelPartPtrFor
| -rw-r--r-- | slicer/tool/parser.cpp | 72 | ||||
| -rw-r--r-- | slicer/tool/parser.h | 6 | 
2 files changed, 39 insertions, 39 deletions
diff --git a/slicer/tool/parser.cpp b/slicer/tool/parser.cpp index 0b7b2a8..205180f 100644 --- a/slicer/tool/parser.cpp +++ b/slicer/tool/parser.cpp @@ -32,7 +32,7 @@ namespace Slicer {  		auto type = dm->type();  		auto c = Slice::ContainedPtr::dynamicCast(dm->container()); -		auto conversions = getAllConversions(dm); +		auto conversions = getConversions(getAllMetadata(dm));  		for (const auto & conversion : conversions) {  			if (!AdHoc::containerContains(conversion.Options, "nodeclare")) {  				if (!AdHoc::containerContains(conversion.Options, "nodeclareto")) { @@ -274,7 +274,6 @@ namespace Slicer {  				t = Slice::ClassDefPtr::dynamicCast(dm->container())->declaration();  			}  			auto name = metaDataValue("slicer:name:", dm->getMetaData()); -			auto conversions = getAllConversions(dm);  			fprintbf(cpp, "\t\tnew ");  			auto type = dm->type();  			createNewModelPartPtrFor(it); @@ -286,15 +285,7 @@ namespace Slicer {  			if (dm->optional()) {  				fprintbf(cpp, "ModelPartForOptional< ");  			} -			if (!conversions.empty()) { -				fprintbf(cpp, "ModelPartForConverted< %s, %s, &%s >", -						Slice::typeToString(type), -						boost::algorithm::trim_right_copy_if(dm->container()->thisScope(), ispunct), -						dm->scoped()); -			} -			else { -				createNewModelPartPtrFor(type); -			} +			createNewModelPartPtrFor(type, dm, getAllMetadata(dm));  			if (dm->optional()) {  				fprintbf(cpp, " > ");  			} @@ -490,28 +481,37 @@ namespace Slicer {  	}  	void -	Slicer::createNewModelPartPtrFor(const Slice::TypePtr & type) const +	Slicer::createNewModelPartPtrFor(const Slice::TypePtr & type, const Slice::DataMemberPtr & dm, const Slice::StringList & md) const  	{ -		if (auto builtin = Slice::BuiltinPtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForSimple"); -		} -		else if (auto complexClass = Slice::ClassDeclPtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForClass"); -		} -		else if (auto complexStruct = Slice::StructPtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForStruct"); -		} -		else if (auto sequence = Slice::SequencePtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForSequence"); -		} -		else if (auto dictionary = Slice::DictionaryPtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForDictionary"); +		auto conversions = getConversions(md); +		if (dm && !conversions.empty()) { +			fprintbf(cpp, "ModelPartForConverted< %s, %s, &%s >", +					Slice::typeToString(type), +					boost::algorithm::trim_right_copy_if(dm->container()->thisScope(), ispunct), +					dm->scoped());  		} -		else if (auto enumeration = Slice::EnumPtr::dynamicCast(type)) { -			fprintbf(cpp, "ModelPartForEnum"); +		else { +			if (auto builtin = Slice::BuiltinPtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForSimple"); +			} +			else if (auto complexClass = Slice::ClassDeclPtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForClass"); +			} +			else if (auto complexStruct = Slice::StructPtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForStruct"); +			} +			else if (auto sequence = Slice::SequencePtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForSequence"); +			} +			else if (auto dictionary = Slice::DictionaryPtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForDictionary"); +			} +			else if (auto enumeration = Slice::EnumPtr::dynamicCast(type)) { +				fprintbf(cpp, "ModelPartForEnum"); +			} +			fprintbf(cpp, "< %s >", +					Slice::typeToString(type));  		} -		fprintbf(cpp, "< %s >", -				Slice::typeToString(type));  	}  	bool @@ -537,19 +537,19 @@ namespace Slicer {  		fprintbf(cpp, "};\n\n");  	} -	Slicer::Conversions -	Slicer::getAllConversions(Slice::DataMemberPtr dm) +	Slice::StringList +	Slicer::getAllMetadata(const Slice::DataMemberPtr & dm)  	{ -		auto conversions = getConversions(dm->getMetaData()); +		auto metadata = dm->getMetaData();  		auto typec = Slice::ContainedPtr::dynamicCast(dm->type());  		if (typec) {  			if (auto cd = Slice::ClassDeclPtr::dynamicCast(typec)) {  				typec = cd->definition();  			} -			auto typeConversions = getConversions(typec->getMetaData()); -			std::copy(typeConversions.begin(), typeConversions.end(), std::back_inserter(conversions)); +			auto typeMetadata = typec->getMetaData(); +			std::copy(typeMetadata.begin(), typeMetadata.end(), std::back_inserter(metadata));  		} -		return conversions; +		return metadata;  	}  	Slicer::Conversions diff --git a/slicer/tool/parser.h b/slicer/tool/parser.h index a58df3a..b8bdf0b 100644 --- a/slicer/tool/parser.h +++ b/slicer/tool/parser.h @@ -55,7 +55,7 @@ namespace Slicer {  			virtual void visitModuleEnd(const Slice::ModulePtr & m) override;  		private: -			void createNewModelPartPtrFor(const Slice::TypePtr & type) const; +			void createNewModelPartPtrFor(const Slice::TypePtr & type, const Slice::DataMemberPtr & dm = Slice::DataMemberPtr(), const Slice::StringList & md = Slice::StringList()) const;  			void visitComplexDataMembers(Slice::ConstructedPtr t, const Slice::DataMemberList &) const; @@ -64,8 +64,8 @@ namespace Slicer {  			bool hasMetadata(const std::list<std::string> & metadata) const;  			void copyMetadata(const std::list<std::string> & metadata) const; -			static Conversions getAllConversions(Slice::DataMemberPtr dm); -			static Conversions getConversions(const std::list<std::string> & metadata); +			static Slice::StringList getAllMetadata(const Slice::DataMemberPtr & dm); +			static Conversions getConversions(const Slice::StringList & metadata);  #pragma GCC visibility pop  			unsigned int components;  | 
