From f35507a3531ca904c6a7a471f553c6cf95b37825 Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Fri, 8 Feb 2019 10:46:35 +0100 Subject: [PATCH] workout passing parameter qualifiers to overload resolution algo --- .../AnyaryOperationAbstraction.hpp | 4 +++ .../abstraction/NaryOperationAbstraction.hpp | 4 +++ .../src/abstraction/OperationAbstraction.hpp | 7 +++++ .../src/abstraction/PackingAbstraction.hpp | 8 +++++ .../abstraction/ValueOperationAbstraction.hpp | 29 +++++++++++++++++++ .../src/abstraction/WrapperAbstraction.hpp | 15 ++++++++++ .../src/common/AbstractionHelpers.hpp | 13 ++++++++- .../src/common/AlgorithmHelper.cpp | 7 +++-- .../src/registry/AlgorithmRegistry.cpp | 2 +- .../src/registry/AlgorithmRegistry.hpp | 2 +- alib2abstraction/src/registry/Registry.cpp | 4 +-- alib2abstraction/src/registry/Registry.h | 2 +- .../InputFileTypeRegistration.cpp | 3 +- .../OutputFileTypeRegistration.cpp | 3 +- .../src/InputFileTypeRegistration.cpp | 3 +- .../src/OutputFileTypeRegistration.cpp | 3 +- .../src/InputFileTypeRegistration.cpp | 3 +- .../src/OutputFileTypeRegistration.cpp | 3 +- 18 files changed, 101 insertions(+), 14 deletions(-) diff --git a/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp b/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp index 7bed05b845..f1208513aa 100644 --- a/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp +++ b/alib2abstraction/src/abstraction/AnyaryOperationAbstraction.hpp @@ -81,6 +81,10 @@ public: return ext::type_index ( typeid ( ParamType ) ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned ) const override { + return abstraction::ParamQualifiers::paramQualifiers < ParamType > ( ); + } + }; } /* namespace abstraction */ diff --git a/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp b/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp index 5df783dbae..38262a329d 100644 --- a/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp +++ b/alib2abstraction/src/abstraction/NaryOperationAbstraction.hpp @@ -88,6 +88,10 @@ public: return abstraction::ParamType < ParamTypes ... >::paramType ( index ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override { + return abstraction::ParamType < ParamTypes ... >::paramTypeQualifiers ( index ); + } + }; } /* namespace abstraction */ diff --git a/alib2abstraction/src/abstraction/OperationAbstraction.hpp b/alib2abstraction/src/abstraction/OperationAbstraction.hpp index 491a4ae263..9ab0e32e48 100644 --- a/alib2abstraction/src/abstraction/OperationAbstraction.hpp +++ b/alib2abstraction/src/abstraction/OperationAbstraction.hpp @@ -11,6 +11,9 @@ #include <alib/memory> #include <alib/string> #include <alib/typeindex> +#include <alib/set> + +#include <common/ParamQualifiers.hpp> namespace abstraction { @@ -38,10 +41,14 @@ public: return ext::to_string ( getParamTypeIndex ( index ) ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const = 0; + std::string getReturnType ( ) const { return ext::to_string ( getReturnTypeIndex ( ) ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const = 0; + virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) { return shared_from_this(); } diff --git a/alib2abstraction/src/abstraction/PackingAbstraction.hpp b/alib2abstraction/src/abstraction/PackingAbstraction.hpp index 37abbd7a2b..0a481c28d3 100644 --- a/alib2abstraction/src/abstraction/PackingAbstraction.hpp +++ b/alib2abstraction/src/abstraction/PackingAbstraction.hpp @@ -105,10 +105,18 @@ public: return m_abstractions [ m_connections.at ( index ) [ 0 ].targetId ]->getParamTypeIndex ( m_connections.at ( index ) [ 0 ].paramPosition ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override { + return m_abstractions [ m_connections.at ( index ) [ 0 ].targetId ]->getParamTypeQualifiers ( m_connections.at ( index ) [ 0 ].paramPosition ); + } + virtual ext::type_index getReturnTypeIndex ( ) const override { return m_abstractions [ m_resultId ]->getReturnTypeIndex ( ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return m_abstractions [ m_resultId ]->getReturnTypeQualifiers ( ); + } + virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) override { return m_abstractions [ m_resultId ]->getProxyAbstraction ( ); } diff --git a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp index 2eac4cb455..af752aab1f 100644 --- a/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp +++ b/alib2abstraction/src/abstraction/ValueOperationAbstraction.hpp @@ -15,6 +15,7 @@ #include <abstraction/OperationAbstraction.hpp> #include <abstraction/ValueProvider.hpp> +#include <common/ParamQualifiers.hpp> #include <common/AbstractionHelpers.hpp> namespace abstraction { @@ -58,6 +59,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -103,6 +108,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < const ReturnType > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -148,6 +157,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < ReturnType & > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -193,6 +206,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < const ReturnType & > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -240,6 +257,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < ReturnType && > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -287,6 +308,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < const ReturnType && > ( ); + } + virtual bool cached ( ) const override { return ( bool ) m_data; } @@ -308,6 +333,10 @@ public: return ext::type_index ( typeid ( void ) ); } + ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < void > ( ); + } + virtual bool cached ( ) const override { return false; } diff --git a/alib2abstraction/src/abstraction/WrapperAbstraction.hpp b/alib2abstraction/src/abstraction/WrapperAbstraction.hpp index 0b2fc58e7c..f48c4a38ad 100644 --- a/alib2abstraction/src/abstraction/WrapperAbstraction.hpp +++ b/alib2abstraction/src/abstraction/WrapperAbstraction.hpp @@ -96,6 +96,10 @@ public: return ParamType < ParamTypes ... >::paramType ( index ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getParamTypeQualifiers ( unsigned index ) const override { + return ParamType < ParamTypes ... >::paramTypeQualifiers ( index ); + } + virtual std::shared_ptr < abstraction::OperationAbstraction > getProxyAbstraction ( ) override { if ( this->cached ( ) ) return this->m_abstraction->getProxyAbstraction ( ); @@ -133,6 +137,10 @@ public: return ext::type_index ( typeid ( ReturnType ) ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + return abstraction::ParamQualifiers::paramQualifiers < ReturnType > ( ); + } + }; template < class ... ParamTypes > @@ -156,6 +164,13 @@ public: throw std::domain_error ( "Return type unknown before evaluation." ); } + virtual ext::set < abstraction::ParamQualifiers::ParamQualifier > getReturnTypeQualifiers ( ) const override { + if ( this->cached ( ) ) + return this->m_abstraction->getProxyAbstraction ( )->getReturnTypeQualifiers ( ); + else + throw std::domain_error ( "Return type qualifiers unknown before evaluation." ); + } + }; } /* namespace abstraction */ diff --git a/alib2abstraction/src/common/AbstractionHelpers.hpp b/alib2abstraction/src/common/AbstractionHelpers.hpp index 25ce77edbf..15a7660123 100644 --- a/alib2abstraction/src/common/AbstractionHelpers.hpp +++ b/alib2abstraction/src/common/AbstractionHelpers.hpp @@ -62,6 +62,10 @@ struct ParamType < > { static ext::type_index paramType ( unsigned ) { throw std::logic_error ( "Out of types to check" ); } + + static ext::set < abstraction::ParamQualifiers::ParamQualifier > paramTypeQualifiers ( unsigned ) { + throw std::logic_error ( "Out of types to check" ); + } }; template < class Param, class ... Params > @@ -70,7 +74,14 @@ struct ParamType < Param, Params ... > { if ( index == 0 ) return ext::type_index ( typeid ( Param ) ); else - return ParamType < Params ... >::paramType ( index - 1); + return ParamType < Params ... >::paramType ( index - 1 ); + } + + static ext::set < abstraction::ParamQualifiers::ParamQualifier > paramTypeQualifiers ( unsigned index ) { + if ( index == 0 ) + return abstraction::ParamQualifiers::paramQualifiers < Param > ( ); + else + return ParamType < Params ... >::paramTypeQualifiers ( index - 1 ); } }; diff --git a/alib2abstraction/src/common/AlgorithmHelper.cpp b/alib2abstraction/src/common/AlgorithmHelper.cpp index 053452984f..c0d5bc45a9 100644 --- a/alib2abstraction/src/common/AlgorithmHelper.cpp +++ b/alib2abstraction/src/common/AlgorithmHelper.cpp @@ -14,10 +14,13 @@ namespace abstraction { std::shared_ptr < abstraction::OperationAbstraction > AlgorithmHelper::eval ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > & params, std::vector < bool > & moves, AlgorithmCategories::AlgorithmCategory category ) { ext::vector < std::string > paramTypes; - for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params ) + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers; + for ( const std::shared_ptr < abstraction::OperationAbstraction > & param : params ) { paramTypes.push_back ( param->getReturnType ( ) ); + paramTypeQualifiers.push_back ( param->getReturnTypeQualifiers ( ) ); + } - std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getAlgorithmAbstraction ( name, templateParams, paramTypes, category ); + std::shared_ptr < abstraction::OperationAbstraction > algo = abstraction::Registry::getAlgorithmAbstraction ( name, templateParams, paramTypes, paramTypeQualifiers, category ); unsigned i = 0; ext::vector < std::shared_ptr < abstraction::OperationAbstraction > > casted_params; diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.cpp b/alib2abstraction/src/registry/AlgorithmRegistry.cpp index 983d80facf..6b2c3b6a97 100644 --- a/alib2abstraction/src/registry/AlgorithmRegistry.cpp +++ b/alib2abstraction/src/registry/AlgorithmRegistry.cpp @@ -86,7 +86,7 @@ ext::map < ext::pair < std::string, ext::vector < std::string > >, ext::list < s return group; } -std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory ) { +std::shared_ptr < abstraction::OperationAbstraction > AlgorithmRegistry::getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > &, AlgorithmCategories::AlgorithmCategory ) { auto group = findAbstractionGroup ( name, templateParams ); auto incompatibleLambda = [ ] ( MatchType compatibility ) { diff --git a/alib2abstraction/src/registry/AlgorithmRegistry.hpp b/alib2abstraction/src/registry/AlgorithmRegistry.hpp index bb704e65e7..627833a726 100644 --- a/alib2abstraction/src/registry/AlgorithmRegistry.hpp +++ b/alib2abstraction/src/registry/AlgorithmRegistry.hpp @@ -302,7 +302,7 @@ public: registerInternal ( std::move ( algorithm ), std::move ( templateParams ), std::make_shared < WrapperImpl < ReturnType, ParamTypes ... > > ( category, std::move ( params ), std::move ( parameterNames ), std::move ( result ), callback ) ); } - static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory category ); + static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory category ); static ext::set < ext::pair < std::string, ext::vector < std::string > > > listGroup ( const std::string & group ); diff --git a/alib2abstraction/src/registry/Registry.cpp b/alib2abstraction/src/registry/Registry.cpp index 7bc204e2f5..7dcd2032c8 100644 --- a/alib2abstraction/src/registry/Registry.cpp +++ b/alib2abstraction/src/registry/Registry.cpp @@ -44,8 +44,8 @@ std::shared_ptr < abstraction::OperationAbstraction > Registry::getContainerAbst return ContainerRegistry::getAbstraction ( container, type ); } -std::shared_ptr < abstraction::OperationAbstraction > Registry::getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory category ) { - return AlgorithmRegistry::getAbstraction ( name, templateParams, paramTypes, category ); +std::shared_ptr < abstraction::OperationAbstraction > Registry::getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory category ) { + return AlgorithmRegistry::getAbstraction ( name, templateParams, paramTypes, paramQualifiers, category ); } std::shared_ptr < abstraction::OperationAbstraction > Registry::getCastAbstraction ( const std::string & target, const std::string & param ) { diff --git a/alib2abstraction/src/registry/Registry.h b/alib2abstraction/src/registry/Registry.h index b759517436..12f08c5280 100644 --- a/alib2abstraction/src/registry/Registry.h +++ b/alib2abstraction/src/registry/Registry.h @@ -29,7 +29,7 @@ public: static ext::set < ext::tuple < AlgorithmCategories::AlgorithmCategory, ext::pair < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > >, ext::vector < ext::tuple < std::string, ext::set < abstraction::ParamQualifiers::ParamQualifier > > >, ext::vector < std::string >, std::string > > listOverloads ( const std::string & algorithm, const ext::vector < std::string > & templateParams ); static std::shared_ptr < abstraction::OperationAbstraction > getContainerAbstraction ( const std::string & container, const std::string & type ); - static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, AlgorithmCategories::AlgorithmCategory ); + static std::shared_ptr < abstraction::OperationAbstraction > getAlgorithmAbstraction ( const std::string & name, const ext::vector < std::string > & templateParams, const ext::vector < std::string > & paramTypes, const ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > & paramQualifiers, AlgorithmCategories::AlgorithmCategory ); static std::shared_ptr < abstraction::OperationAbstraction > getCastAbstraction ( const std::string & target, const std::string & param ); static bool isCastNoOp ( const std::string & target, const std::string & param ); static std::shared_ptr < abstraction::OperationAbstraction > getImmediateAbstraction ( const std::string & result, std::string value ); diff --git a/alib2cli/src/registration/InputFileTypeRegistration.cpp b/alib2cli/src/registration/InputFileTypeRegistration.cpp index 26af7813f7..01fe22bec6 100644 --- a/alib2cli/src/registration/InputFileTypeRegistration.cpp +++ b/alib2cli/src/registration/InputFileTypeRegistration.cpp @@ -51,8 +51,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category ); + return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category ); } auto xmlInputFileHandler = registration::InputFileRegister ( "xml", dummy ); diff --git a/alib2cli/src/registration/OutputFileTypeRegistration.cpp b/alib2cli/src/registration/OutputFileTypeRegistration.cpp index 50277ab395..56eb9d6666 100644 --- a/alib2cli/src/registration/OutputFileTypeRegistration.cpp +++ b/alib2cli/src/registration/OutputFileTypeRegistration.cpp @@ -31,8 +31,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category ); + return abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category ); } auto xmlOutputFileHandler = registration::OutputFileRegister ( "xml", dummy ); diff --git a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp index cefbbc483b..cbd4faf4c9 100644 --- a/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp +++ b/alib2raw_cli_integration/src/InputFileTypeRegistration.cpp @@ -15,8 +15,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category ) ); + abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category ) ); auto rawParserAbstractionFinder = [ = ] ( const std::string & ) { return abstraction::RawReaderRegistry::getAbstraction ( typehint ); diff --git a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp index 096fc0b6dc..668c59300a 100644 --- a/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp +++ b/alib2raw_cli_integration/src/OutputFileTypeRegistration.cpp @@ -18,8 +18,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category ) ); + abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category ) ); std::shared_ptr < abstraction::PackingAbstraction < 2 > > res = std::make_shared < abstraction::PackingAbstraction < 2 > > ( std::move ( abstractions ), 1 ); res->setInnerConnection ( 0, 1, 1, true ); diff --git a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp index 77acaad93a..b6eed2f023 100644 --- a/alib2str_cli_integration/src/InputFileTypeRegistration.cpp +++ b/alib2str_cli_integration/src/InputFileTypeRegistration.cpp @@ -15,8 +15,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, category ) ); + abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::ReadFile", templateParams, paramTypes, paramTypeQualifiers, category ) ); auto stringParserAbstractionFinder = [ = ] ( const std::string & data ) { return abstraction::StringReaderRegistry::getAbstraction ( typehint, data ); diff --git a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp index a7e427e7a0..1b32d89648 100644 --- a/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp +++ b/alib2str_cli_integration/src/OutputFileTypeRegistration.cpp @@ -18,8 +18,9 @@ namespace { ext::vector < std::string > templateParams; ext::vector < std::string > paramTypes { ext::to_string < std::string > ( ), ext::to_string < std::string > ( ) }; abstraction::AlgorithmCategories::AlgorithmCategory category = abstraction::AlgorithmCategories::AlgorithmCategory::NONE; + ext::vector < ext::set < abstraction::ParamQualifiers::ParamQualifier > > paramTypeQualifiers { abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ), abstraction::ParamQualifiers::paramQualifiers < const std::string & > ( ) }; - abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, category ) ); + abstractions.push_back ( abstraction::Registry::getAlgorithmAbstraction ( "cli::builtin::WriteFile", templateParams, paramTypes, paramTypeQualifiers, category ) ); std::shared_ptr < abstraction::PackingAbstraction < 2 > > res = std::make_shared < abstraction::PackingAbstraction < 2 > > ( std::move ( abstractions ), 1 ); res->setInnerConnection ( 0, 1, 1, true ); -- GitLab