From 7d431c50649dc284ffc05e2e7ee9d3ff7b7f074d Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Wed, 20 Feb 2019 08:11:56 +0100
Subject: [PATCH] add documentation to parse and compose wrappers

---
 .../src/registration/AlgoRegistration.hpp          | 14 +++++++++++++-
 alib2raw/src/registration/RawRegistration.hpp      | 10 ++++++++++
 alib2str/src/registration/StringRegistration.hpp   | 10 ++++++++++
 alib2xml/src/registration/XmlRegistration.cpp      |  6 +++++-
 alib2xml/src/registration/XmlRegistration.hpp      |  5 +++++
 5 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/alib2abstraction/src/registration/AlgoRegistration.hpp b/alib2abstraction/src/registration/AlgoRegistration.hpp
index 646da94474..68352a479c 100644
--- a/alib2abstraction/src/registration/AlgoRegistration.hpp
+++ b/alib2abstraction/src/registration/AlgoRegistration.hpp
@@ -64,12 +64,19 @@ public:
 	}
 
 	WrapperRegister ( WrapperRegister && ) = default;
+
+	WrapperRegister && setDocumentation ( std::string documentation ) && {
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < Algorithm, ParameterTypes ... > ( std::move ( documentation ) );
+		return std::move ( * this );
+	}
 };
 
 template < class Algorithm, class ReturnType, class ObjectType, class ... ParameterTypes >
 class MethodRegister : public ext::Register < void > {
 	registration::NormalizationRegister < ReturnType > normalize;
 
+	std::string m_methodName;
+
 public:
 	template < class ... ParamNames >
 	MethodRegister ( ReturnType ( ObjectType::* callback ) ( ParameterTypes ... ), std::string methodName, ParamNames ... paramNames ) : ext::Register < void > ( [=] ( ) {
@@ -78,11 +85,16 @@ public:
 				abstraction::AlgorithmRegistry::registerMethod < Algorithm > ( callback, methodName, std::move ( parameterNames ) );
 			}, [=] ( ) {
 				abstraction::AlgorithmRegistry::unregisterMethod < Algorithm, ObjectType, ParameterTypes ... > ( methodName );
-			} ) {
+			} ), m_methodName ( methodName ) {
 	}
 
 	MethodRegister ( MethodRegister && ) = default;
 
+	MethodRegister && setDocumentation ( std::string documentation ) && {
+		abstraction::AlgorithmRegistry::setDocumentationOfMethod < Algorithm, ObjectType, ParameterTypes ... > ( m_methodName, std::move ( documentation ) );
+		return std::move ( * this );
+	}
+
 };
 
 } /* namespace registration */
diff --git a/alib2raw/src/registration/RawRegistration.hpp b/alib2raw/src/registration/RawRegistration.hpp
index 4cdb01f648..a8500942b9 100644
--- a/alib2raw/src/registration/RawRegistration.hpp
+++ b/alib2raw/src/registration/RawRegistration.hpp
@@ -38,6 +38,11 @@ public:
 	RawReaderRegister ( ) {
 		abstraction::RawReaderRegistry::registerRawReader < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < raw::Parse < Type >, Type, const std::string & > ( raw::Parse < Type >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } );
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < raw::Parse < Type >, const std::string & > (
+"Raw parsing of " + ext::to_string < Type > ( ) + ".\n\
+\n\
+@param arg0 the parsed string\n\
+@return value parsed from @p arg0" );
 	}
 
 	~RawReaderRegister ( ) {
@@ -52,6 +57,11 @@ public:
 	RawWriterRegister ( ) {
 		abstraction::RawWriterRegistry::registerRawWriter < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < raw::Compose, std::string, const Type & > ( raw::Compose::abstractionFromType, std::array < std::string, 1 > { { "arg0" } } );
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < raw::Compose, const Type & > (
+"Raw composing algorithm.\n\
+\n\
+@param arg0 the composed value\n\
+@return the @p arg0 in raw representation" );
 	}
 
 	~RawWriterRegister ( ) {
diff --git a/alib2str/src/registration/StringRegistration.hpp b/alib2str/src/registration/StringRegistration.hpp
index ca3ee90299..42b8041fa3 100644
--- a/alib2str/src/registration/StringRegistration.hpp
+++ b/alib2str/src/registration/StringRegistration.hpp
@@ -51,6 +51,11 @@ class StringReaderGroupRegister {
 public:
 	StringReaderGroupRegister ( ) {
 		abstraction::AlgorithmRegistry::registerWrapper < string::Parse < Group >, abstraction::UnspecifiedType, std::string && > ( string::Parse < Group >::abstractionFromString, std::array < std::string, 1 > { { "arg0" } } );
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < string::Parse < Group >, std::string && > (
+"String parsing of datatype in " + ext::to_string < Group > ( ) + " category.\n\
+\n\
+@param arg0 the parsed string\n\
+@return value parsed from @p arg0" );
 	}
 
 	~StringReaderGroupRegister ( ) {
@@ -64,6 +69,11 @@ public:
 	StringWriterRegister ( ) {
 		abstraction::StringWriterRegistry::registerStringWriter < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < string::Compose, std::string, const Type & > ( string::Compose::abstractionFromType, std::array < std::string, 1 > { { "arg0" } } );
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < string::Compose, const Type & > (
+"String composing algorithm.\n\
+\n\
+@param arg0 the composed value\n\
+@return the @p arg0 in string representation" );
 	}
 
 	~StringWriterRegister ( ) {
diff --git a/alib2xml/src/registration/XmlRegistration.cpp b/alib2xml/src/registration/XmlRegistration.cpp
index 0352a604d0..ea9a99d07a 100644
--- a/alib2xml/src/registration/XmlRegistration.cpp
+++ b/alib2xml/src/registration/XmlRegistration.cpp
@@ -3,6 +3,10 @@
 
 namespace {
 
-auto xmlParse = registration::WrapperRegister < xml::Parse, abstraction::UnspecifiedType, ext::deque < sax::Token > && > ( xml::Parse::abstractionFromTokens, "arg0" );
+auto xmlParse = registration::WrapperRegister < xml::Parse, abstraction::UnspecifiedType, ext::deque < sax::Token > && > ( xml::Parse::abstractionFromTokens, "arg0" ).setDocumentation (
+"Xml parsing of datatype.\n\
+\n\
+@param arg0 the parsed sequence of xml tokens\n\
+@return value parsed from @p arg0" );
 
 }
diff --git a/alib2xml/src/registration/XmlRegistration.hpp b/alib2xml/src/registration/XmlRegistration.hpp
index 9e159c9109..7fcd06158e 100644
--- a/alib2xml/src/registration/XmlRegistration.hpp
+++ b/alib2xml/src/registration/XmlRegistration.hpp
@@ -50,6 +50,11 @@ public:
 	XmlWriterRegister ( ) {
 		abstraction::XmlComposerRegistry::registerXmlComposer < Type > ( );
 		abstraction::AlgorithmRegistry::registerWrapper < xml::Compose, ext::deque < sax::Token >, const Type & > ( xml::Compose::abstractionFromType, std::array < std::string, 1 > { { "arg0" } } );
+		abstraction::AlgorithmRegistry::setDocumentationOfWrapper < xml::Compose, const Type & > (
+"Xml composing algorithm.\n\
+\n\
+@param arg0 the composed value\n\
+@return the @p arg0 in xml tokens representation" );
 	}
 
 	~XmlWriterRegister ( ) {
-- 
GitLab