diff options
| -rw-r--r-- | slicer/slicer/metadata.cpp | 48 | ||||
| -rw-r--r-- | slicer/slicer/metadata.h | 20 | ||||
| -rw-r--r-- | slicer/slicer/parser.cpp | 33 | ||||
| -rw-r--r-- | slicer/slicer/parser.h | 3 | 
4 files changed, 69 insertions, 35 deletions
diff --git a/slicer/slicer/metadata.cpp b/slicer/slicer/metadata.cpp new file mode 100644 index 0000000..da861ca --- /dev/null +++ b/slicer/slicer/metadata.cpp @@ -0,0 +1,48 @@ +#include "metadata.h" +#include <boost/algorithm/string/predicate.hpp> +#include <boost/algorithm/string/split.hpp> +#include <boost/algorithm/string/classification.hpp> + +bool +Slicer::metaDataFlagSet(const std::list<std::string> & md, const std::string & flag) +{ +	return std::find(md.cbegin(), md.cend(), flag) != md.cend(); +} + +bool +Slicer::metaDataFlagNotSet(const std::list<std::string> & md, const std::string & flag) +{ +	return std::find(md.cbegin(), md.cend(), flag) == md.cend(); +} + +std::list<std::string> +Slicer::metaDataValues(const std::string & prefix, const std::list<std::string> & metadata) +{ +	std::list<std::string> mds; +	for (const auto & md : metadata) { +		if (boost::algorithm::starts_with(md, prefix)) { +			mds.push_back(md.substr(prefix.length())); +		} +	} +	return mds; +} + +std::vector<std::string> +Slicer::metaDataSplit(const std::string & metadata) +{ +	std::vector<std::string> parts; +	boost::algorithm::split(parts, metadata, boost::algorithm::is_any_of(":"), boost::algorithm::token_compress_off); +	return parts; +} + +boost::optional<std::string> +Slicer::metaDataValue(const std::string & prefix, const std::list<std::string> & metadata) +{ +	for (const auto & md : metadata) { +		if (boost::algorithm::starts_with(md, prefix)) { +			return md.substr(prefix.length()); +		} +	} +	return boost::optional<std::string>(); +} + diff --git a/slicer/slicer/metadata.h b/slicer/slicer/metadata.h new file mode 100644 index 0000000..2ed26b8 --- /dev/null +++ b/slicer/slicer/metadata.h @@ -0,0 +1,20 @@ +#ifndef SLICER_METADATA_H +#define SLICER_METADATA_H + +#include <string> +#include <list> +#include <vector> +#include <boost/optional.hpp> + +namespace Slicer { +	// Flags +	bool metaDataFlagSet(const std::list<std::string> &, const std::string & flag); +	bool metaDataFlagNotSet(const std::list<std::string> &, const std::string & flag); +	// Values +	boost::optional<std::string> metaDataValue(const std::string & prefix, const std::list<std::string> & metadata); +	std::list<std::string> metaDataValues(const std::string & prefix, const std::list<std::string> & metadata); +	std::vector<std::string> metaDataSplit(const std::string & metadata); +} + +#endif + diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp index 9c72d09..bdd42ec 100644 --- a/slicer/slicer/parser.cpp +++ b/slicer/slicer/parser.cpp @@ -1,9 +1,8 @@  #include "parser.h" +#include "metadata.h"  #include <Slice/Parser.h>  #include <Slice/Preprocessor.h>  #include <boost/algorithm/string/predicate.hpp> -#include <boost/algorithm/string/classification.hpp> -#include <boost/algorithm/string/split.hpp>  #include <boost/algorithm/string/replace.hpp>  #include <boost/algorithm/string/trim.hpp>  #include <Slice/CPlusPlusUtil.h> @@ -428,36 +427,6 @@ namespace Slicer {  		fprintf(cpp, "};\n\n");  	} -	boost::optional<std::string> -	Slicer::metaDataValue(const std::string & prefix, const std::list<std::string> & metadata) -	{ -		for (const auto & md : metadata) { -			if (boost::algorithm::starts_with(md, prefix)) { -				return md.substr(prefix.length()); -			} -		} -		return boost::optional<std::string>(); -	} - -	std::list<std::string> -	Slicer::metaDataValues(const std::string & prefix, const std::list<std::string> & metadata) -	{ -		std::list<std::string> mds; -		for (const auto & md : metadata) { -			if (boost::algorithm::starts_with(md, prefix)) { -				mds.push_back(md.substr(prefix.length())); -			} -		} -		return mds; -	} - -	std::vector<std::string> -	Slicer::metaDataSplit(const std::string & metadata) -	{ -		std::vector<std::string> parts; -		boost::algorithm::split(parts, metadata, boost::algorithm::is_any_of(":"), boost::algorithm::token_compress_off);  -		return parts;	 -	}  	std::vector<Slicer::ConversionSpec>  	Slicer::getConversions(Slice::DataMemberPtr dm) diff --git a/slicer/slicer/parser.h b/slicer/slicer/parser.h index f53e62e..9be2465 100644 --- a/slicer/slicer/parser.h +++ b/slicer/slicer/parser.h @@ -48,9 +48,6 @@ namespace Slicer {  			void defineConversions(Slice::DataMemberPtr dm) const;  			void copyMetadata(const std::list<std::string> & metadata) const; -			static boost::optional<std::string> metaDataValue(const std::string & prefix, const std::list<std::string> & metadata); -			static std::list<std::string> metaDataValues(const std::string & prefix, const std::list<std::string> & metadata); -			static std::vector<std::string> metaDataSplit(const std::string & metadata);  			static std::vector<ConversionSpec> getConversions(Slice::DataMemberPtr);  			unsigned int components;  | 
