Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
ContainerRegistry.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <exception>
9
10#include <ext/memory>
11#include <ext/list>
12#include <ext/string>
13#include <ext/set>
14#include <ext/map>
15#include <ext/typeinfo>
16
18#include "BaseRegistryEntry.hpp"
19
20namespace abstraction {
21
23public:
24 class Entry : public BaseRegistryEntry {
25 };
26
27private:
28 template < class Params >
29 class SetEntryImpl : public Entry {
30 public:
31 std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
32 };
33
35
36public:
37 static void unregisterSet ( const std::string & param );
38
39 template < class ParamTypes >
40 static void unregisterSet ( ) {
41 std::string param = ext::to_string < typename std::decay < ParamTypes >::type > ( );
42 unregisterSet ( param );
43 }
44
45 static void registerSet ( std::string param, std::unique_ptr < Entry > entry );
46
47 template < class ParamTypes >
48 static void registerSet ( std::string param ) {
49 registerSet ( std::move ( param ), std::make_unique < SetEntryImpl < ParamTypes > > ( ) );
50 }
51
52 template < class ParamTypes >
53 static void registerSet ( ) {
54 std::string param = ext::to_string < typename std::decay < ParamTypes >::type > ( );
55 registerSet < ParamTypes > ( std::move ( param ) );
56 }
57
58 static bool hasAbstraction ( const std::string & container );
59
60 static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & container, const std::string & param );
61
62 static ext::set < std::string > listOverloads ( const std::string & container );
63
65};
66
67} /* namespace abstraction */
68
70
71namespace abstraction {
72
73template < class Param >
74std::shared_ptr < abstraction::OperationAbstraction > ContainerRegistry::SetEntryImpl < Param >::getAbstraction ( ) const {
75 return std::make_shared < abstraction::SetAbstraction < Param > > ( );
76}
77
78} /* namespace abstraction */
79
Definition: BaseRegistryEntry.hpp:12
Definition: ContainerRegistry.hpp:24
Definition: ContainerRegistry.hpp:22
static ext::set< std::string > list()
Definition: ContainerRegistry.cpp:74
static ext::set< std::string > listOverloads(const std::string &container)
Definition: ContainerRegistry.cpp:62
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &container, const std::string &param)
Definition: ContainerRegistry.cpp:46
static void registerSet(std::string param)
Definition: ContainerRegistry.hpp:48
static bool hasAbstraction(const std::string &container)
Definition: ContainerRegistry.cpp:42
static void registerSet()
Definition: ContainerRegistry.hpp:53
static void unregisterSet()
Definition: ContainerRegistry.hpp:40
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