Newer
Older
/*
* PrimitiveRegistrator.cpp
*
* Created on: 11. 7. 2017
* Author: Jan Travnicek
*/
#include <registry/CastRegistry.hpp>
#include <registry/ValuePrinterRegistry.hpp>
#include <registry/ImmediateRegistry.hpp>
#include <registry/ContainerRegistry.hpp>
#include <object/Object.h>
#include <alib/trie>
#include <alib/exception>
#include <exception/CommonException.h>
static const ext::set < object::Object > & denormalizeSetObject ( const object::Object & o ) {
const object::AnyObjectBase & data = o.getData ( );
const object::AnyObject < ext::set < object::Object > > * innerData = dynamic_cast < const object::AnyObject < ext::set < object::Object > > * > ( & data );
if ( innerData )
return innerData->getData ( );
throw std::invalid_argument ( "Casted object does not contain data of type " + ext::to_string < ext::set < object::Object > > ( ) + "." );
}
static ext::set < ext::pair < object::Object, object::Object > > denormalizeSetObjectPair ( const object::Object & o ) {
const object::AnyObjectBase & data = o.getData ( );
const object::AnyObject < ext::set < ext::pair < object::Object, object::Object > > > * innerData = dynamic_cast < const object::AnyObject < ext::set < ext::pair < object::Object, object::Object > > > * > ( & data );
if ( innerData )
return innerData->getData ( );
const object::AnyObject < ext::set < object::Object > > * innerData2 = dynamic_cast < const object::AnyObject < ext::set < object::Object > > * > ( & data );
if ( innerData2 ) {
ext::set < ext::pair < object::Object, object::Object > > res;
for ( const object::Object & inner : innerData2->getData ( ) ) {
const object::AnyObjectBase & dataTmp = inner.getData ( );
const object::AnyObject < ext::pair < object::Object, object::Object > > * innerDataTmp = dynamic_cast < const object::AnyObject < ext::pair < object::Object, object::Object > > * > ( & dataTmp );
if ( innerDataTmp ) {
res.insert ( innerDataTmp->getData ( ) );
continue;
}
const object::AnyObject < ext::pair < unsigned, unsigned > > * innerDataTmp2 = dynamic_cast < const object::AnyObject < ext::pair < unsigned, unsigned > > * > ( & dataTmp );
if ( innerDataTmp2 ) {
res.insert ( ext::make_pair ( object::Object ( innerDataTmp2->getData ( ).first ), object::Object ( innerDataTmp2->getData ( ).second ) ) );
continue;
}
throw std::invalid_argument ( "Casted object does not contain data of type " + ext::to_string < ext::set < ext::pair < object::Object, object::Object > > > ( ) + "." );
}
return res;
}
throw std::invalid_argument ( "Casted object does not contain data of type " + ext::to_string < ext::set < ext::pair < object::Object, object::Object > > > ( ) + "." );
}
alib::ExceptionHandler::addHandler < 3 > ( [] ( std::ostream & out, const exception::CommonException & exception ) {
out << "common exception: " << exception << std::endl;
} );
abstraction::CastRegistry::registerCast < double, int > ( );
abstraction::CastRegistry::registerCast < int, double > ( );
abstraction::CastRegistry::registerCastAlgorithm < std::string, int > ( ext::to_string );
abstraction::CastRegistry::registerCastAlgorithm < int, std::string > ( static_cast < int ( * ) ( const std::string & ) > ( ext::from_string < int > ) );
abstraction::CastRegistry::registerCast < bool, int > ( );
abstraction::CastRegistry::registerCastAlgorithm < bool, std::string > ( static_cast < bool ( * ) ( const std::string & ) > ( ext::from_string < bool > ) );
abstraction::CastRegistry::registerCastAlgorithm < unsigned, std::string > ( "unsigned", ext::to_string < std::string > ( ), static_cast < unsigned ( * ) ( const std::string & ) > ( ext::from_string < unsigned > ) );
abstraction::CastRegistry::registerCastAlgorithm < double, std::string > ( static_cast < double ( * ) ( const std::string & ) > ( ext::from_string < double > ) );
abstraction::CastRegistry::registerCast < size_t, int > ( "size_t", ext::to_string < int > ( ) );
abstraction::CastRegistry::registerCast < size_t, int > ( );
abstraction::CastRegistry::registerCast < int, size_t > ( );
abstraction::CastRegistry::registerCast < unsigned, int > ( );
abstraction::CastRegistry::registerCast < long, int > ( "long", ext::to_string < int > ( ) );
abstraction::CastRegistry::registerCastAlgorithm < const ext::set < object::Object > &, const object::Object & > ( "SetOfObjects", ext::to_string < object::Object > ( ), denormalizeSetObject, true );
abstraction::CastRegistry::registerCastAlgorithm < ext::set < ext::pair < object::Object, object::Object > >, const object::Object & > ( "SetOfObjectPairs", ext::to_string < object::Object > ( ), denormalizeSetObjectPair, true );
abstraction::CastRegistry::registerCast < object::Object, const ext::set < object::Object > & > ( "DefaultStateType", ext::to_string < const ext::set < object::Object > & > ( ), true );
abstraction::ContainerRegistry::registerSet < int > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < int > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < unsigned > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < double > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < std::string > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < void > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < bool > ( );
abstraction::ImmediateRegistry::registerImmediate < int > ( );
abstraction::ImmediateRegistry::registerImmediate < std::string > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < object::Object > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::set < object::Object > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::set < ext::pair < object::Object, object::Object > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::set < ext::set < object::Object > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::trie < object::Object, bool > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::set < unsigned > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::vector < int > > ( );
//abstraction::ValuePrinterRegistry::registerValuePrinter < ext::set < string::LinearString > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::vector < object::Object > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::vector < unsigned > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::vector < ext::pair < object::Object, object::Object > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < object::Object >, double > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < object::Object >, int > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < object::Object >, long > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, double > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, int > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, long > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < object::Object, ext::map < object::Object, double > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < object::Object, ext::map < object::Object, int > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < object::Object, ext::map < object::Object, long > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, double > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, int > > > ( );
abstraction::ValuePrinterRegistry::registerValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, long > > > ( );
abstraction::ContainerRegistry::registerSet < object::Object > ( );
~PrimitiveRegistrator ( ) {
abstraction::CastRegistry::unregisterCast < double, int > ( );
abstraction::CastRegistry::unregisterCast < int, double > ( );
abstraction::CastRegistry::unregisterCast < std::string, int > ( );
abstraction::CastRegistry::unregisterCast < int, std::string > ( );
abstraction::CastRegistry::unregisterCast < bool, int > ( );
abstraction::CastRegistry::unregisterCast < bool, std::string > ( );
abstraction::CastRegistry::unregisterCast ( "unsigned", ext::to_string < std::string > ( ) );
abstraction::CastRegistry::unregisterCast < double, std::string > ( );
abstraction::CastRegistry::unregisterCast ( "size_t", ext::to_string < int > ( ) );
abstraction::CastRegistry::unregisterCast < size_t, int > ( );
abstraction::CastRegistry::unregisterCast < int, size_t > ( );
abstraction::CastRegistry::unregisterCast < unsigned, int > ( );
abstraction::CastRegistry::unregisterCast ( "long", ext::to_string < int > ( ) );
abstraction::CastRegistry::unregisterCast ( "SetOfObjects", ext::to_string < object::Object > ( ) );
abstraction::CastRegistry::unregisterCast ( "SetOfObjectPairs", ext::to_string < object::Object > ( ) );
abstraction::CastRegistry::unregisterCast ( "DefaultStateType", ext::to_string < const ext::set < object::Object > & > ( ) );
abstraction::ContainerRegistry::unregisterSet < int > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < int > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < unsigned > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < double > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < std::string > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < void > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < bool > ( );
abstraction::ImmediateRegistry::unregisterImmediate < int > ( );
abstraction::ImmediateRegistry::unregisterImmediate < std::string > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < object::Object > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::set < object::Object > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::set < ext::pair < object::Object, object::Object > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::set < ext::set < object::Object > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::trie < object::Object, bool > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::set < unsigned > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::vector < int > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::vector < object::Object > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::vector < unsigned > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::vector < ext::pair < object::Object, object::Object > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < object::Object >, double > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < object::Object >, int > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < object::Object >, long > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, double > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, int > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::pair < ext::vector < ext::pair < object::Object, object::Object > >, long > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < object::Object, ext::map < object::Object, double > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < object::Object, ext::map < object::Object, int > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < object::Object, ext::map < object::Object, long > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, double > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, int > > > ( );
abstraction::ValuePrinterRegistry::unregisterValuePrinter < ext::map < ext::pair < object::Object, object::Object >, ext::map < ext::pair < object::Object, object::Object >, long > > > ( );
abstraction::ContainerRegistry::unregisterSet < object::Object > ( );
}
auto primitiveRegistrator = PrimitiveRegistrator ( );