Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
NormalizeRegistry.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <ext/memory>
9#include <ext/string>
10#include <ext/map>
11#include <ext/list>
12#include <ext/typeinfo>
13
15#include "BaseRegistryEntry.hpp"
16
17#include <core/normalize.hpp>
18
19namespace abstraction {
20
22public:
23 class Entry : public BaseRegistryEntry {
24 };
25
26private:
27 template < class Param >
28 class EntryImpl : public Entry {
29 public:
30 EntryImpl ( ) = default;
31
32 std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
33 };
34
36
37public:
38 static void unregisterNormalize ( const std::string & param, std::list < std::unique_ptr < Entry > >::const_iterator iter );
39
40 template < class ParamType >
41 static void unregisterNormalize ( std::list < std::unique_ptr < Entry > >::const_iterator iter ) {
42 std::string param = ext::to_string < ParamType > ( );
43 unregisterNormalize ( param, iter );
44 }
45
46 static std::list < std::unique_ptr < Entry > >::const_iterator registerNormalize ( std::string param, std::unique_ptr < Entry > entry );
47
48 template < class ParamType >
49 static std::list < std::unique_ptr < Entry > >::const_iterator registerNormalize ( std::string param ) {
50 return registerNormalize ( std::move ( param ), std::unique_ptr < Entry > ( new EntryImpl < ParamType > ( ) ) );
51 }
52
53 template < class ParamType >
54 static std::list < std::unique_ptr < Entry > >::const_iterator registerNormalize ( ) {
55 std::string param = ext::to_string < ParamType > ( );
56 return registerNormalize < ParamType > ( std::move ( param ) );
57 }
58
59 static bool hasNormalize ( const std::string & param );
60
61 static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & param );
62};
63
64} /* namespace abstraction */
65
67
68namespace abstraction {
69
70template < class Param >
71std::shared_ptr < abstraction::OperationAbstraction > NormalizeRegistry::EntryImpl < Param >::getAbstraction ( ) const {
72 return std::make_shared < NormalizeAbstraction < core::normalizationResult < Param >, Param > > ( );
73}
74
75} /* namespace abstraction */
76
Definition: BaseRegistryEntry.hpp:12
Definition: NormalizeRegistry.hpp:23
Definition: NormalizeRegistry.hpp:21
static void unregisterNormalize(const std::string &param, std::list< std::unique_ptr< Entry > >::const_iterator iter)
Definition: NormalizeRegistry.cpp:17
static bool hasNormalize(const std::string &param)
Definition: NormalizeRegistry.cpp:39
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &param)
Definition: NormalizeRegistry.cpp:31
static std::list< std::unique_ptr< Entry > >::const_iterator registerNormalize()
Definition: NormalizeRegistry.hpp:54
static std::list< std::unique_ptr< Entry > >::const_iterator registerNormalize(std::string param)
Definition: NormalizeRegistry.hpp:49
static void unregisterNormalize(std::list< std::unique_ptr< Entry > >::const_iterator iter)
Definition: NormalizeRegistry.hpp:41
Class extending the map class from the standard library. Original reason is to allow printing of the ...
Definition: map.hpp:48
Definition: AlgorithmAbstraction.hpp:11