Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
XmlContainerParserRegistry.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <ext/functional>
9#include <ext/memory>
10#include <ext/typeinfo>
11
12#include <alib/list>
13#include <alib/string>
14#include <alib/set>
15#include <alib/map>
16
19
20namespace abstraction {
21
23public:
24 class Entry {
25 public:
26 virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const = 0;
27
28 virtual ~Entry ( ) = default;
29 };
30
31private:
32 template < class Params >
33 class SetEntryImpl : public Entry {
34 public:
35 std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
36 };
37
39
40public:
41 static void unregisterSet ( const std::string & param );
42
43 template < class ParamTypes >
44 static void unregisterSet ( ) {
45 std::string param = ext::to_string < typename std::decay < ParamTypes >::type > ( );
46 unregisterSet ( param );
47 }
48
49 static void registerSet ( std::string param, std::unique_ptr < Entry > entry );
50
51 template < class ParamTypes >
52 static void registerSet ( std::string param ) {
53 registerSet ( std::move ( param ), std::make_unique < SetEntryImpl < ParamTypes > > ( ) );
54 }
55
56 template < class ParamTypes >
57 static void registerSet ( ) {
58 std::string param = ext::to_string < typename std::decay < ParamTypes >::type > ( );
59 registerSet < ParamTypes > ( std::move ( param ) );
60 }
61
62 static bool hasAbstraction ( const std::string & container );
63
64 static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & container, const std::string & type );
65
66 static ext::set < std::string > listOverloads ( const std::string & container );
67
69};
70
71} /* namespace abstraction */
72
74
75namespace abstraction {
76
77template < class Param >
78std::shared_ptr < abstraction::OperationAbstraction > XmlContainerParserRegistry::SetEntryImpl < Param >::getAbstraction ( ) const {
79 return std::make_shared < abstraction::XmlParserAbstraction < ext::set < Param > > > ( );
80}
81
82} /* namespace abstraction */
83
Definition: XmlContainerParserRegistry.hpp:24
virtual std::shared_ptr< abstraction::OperationAbstraction > getAbstraction() const =0
Definition: XmlContainerParserRegistry.hpp:22
static ext::set< std::string > listOverloads(const std::string &container)
Definition: XmlContainerParserRegistry.cpp:64
static ext::set< std::string > list()
Definition: XmlContainerParserRegistry.cpp:76
static void registerSet(std::string param)
Definition: XmlContainerParserRegistry.hpp:52
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &container, const std::string &type)
Definition: XmlContainerParserRegistry.cpp:49
static void unregisterSet()
Definition: XmlContainerParserRegistry.hpp:44
static bool hasAbstraction(const std::string &container)
Definition: XmlContainerParserRegistry.cpp:45
static void registerSet()
Definition: XmlContainerParserRegistry.hpp:57
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Definition: set.hpp:44
Definition: AlgorithmAbstraction.hpp:11
Definition: ContainerFromStringLexer.cpp:8