diff --git a/alib2cli/src/builtin/Move.cpp b/alib2cli/src/builtin/Move.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5177982e02fef33657a297ca4aa2ac58dcc16d86 --- /dev/null +++ b/alib2cli/src/builtin/Move.cpp @@ -0,0 +1,20 @@ +/* + * Move.cpp + * + * Created on: 18. 12. 2019 + * Author: Jan Travnicek + */ + +#include "Move.h" + +#include <registration/AlgoRegistration.hpp> + +namespace { + +auto move = ext::Register < void > ( [ ] ( ) { + abstraction::AlgorithmRegistry::registerRaw < cli::builtin::Move > ( cli::builtin::Move::move, ext::pair < std::string, abstraction::ParamQualifiers::ParamQualifierSet > { "auto", abstraction::ParamQualifiers::ParamQualifierSet::RREF }, ext::vector < ext::tuple < std::string, abstraction::ParamQualifiers::ParamQualifierSet, std::string > > { { "auto", abstraction::ParamQualifiers::ParamQualifierSet::LREF, "arg0" } } ); + }, [ ] ( ) { + abstraction::AlgorithmRegistry::unregisterRaw < cli::builtin::Move > ( ext::vector < ext::tuple < std::string, abstraction::ParamQualifiers::ParamQualifierSet > > { { "auto", abstraction::ParamQualifiers::ParamQualifierSet::LREF } } ); + } ); + +} /* namespace */ diff --git a/alib2cli/src/builtin/Move.h b/alib2cli/src/builtin/Move.h new file mode 100644 index 0000000000000000000000000000000000000000..587a5fb6fb1303f7aeb294c6d411cfb7038a638f --- /dev/null +++ b/alib2cli/src/builtin/Move.h @@ -0,0 +1,36 @@ +/* + * Move.h + * + * Created on: 18. 12. 2019 + * Author: Jan Travnicek + */ + +#ifndef _MOVE_H_ +#define _MOVE_H_ + +#include <abstraction/Value.hpp> + +namespace cli { + +namespace builtin { + +/** + * Builtin move on abstraction values. + * + */ +class Move { +public: + static std::shared_ptr < abstraction::Value > move ( std::vector < std::shared_ptr < abstraction::Value > > params ) { + abstraction::ParamQualifiers::ParamQualifierSet paramQualifiers = abstraction::ParamQualifiers::ParamQualifierSet::RREF; + if ( params [ 0 ]->getTypeQualifiers ( ) && abstraction::ParamQualifiers::ParamQualifierSet::CONST ) + paramQualifiers = paramQualifiers | abstraction::ParamQualifiers::ParamQualifierSet::CONST; + + return params [ 0 ]->clone ( paramQualifiers, true, true ); + } +}; + +} /* namespace builtin */ + +} /* namespace cli */ + +#endif /* _MOVE_H_ */