Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Concepts
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