Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
RawReaderRegistry.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <ext/memory>
9#include <ext/typeinfo>
10
11#include <alib/string>
12#include <alib/map>
13
15
16namespace abstraction {
17
19public:
20 class Entry {
21 public:
22 virtual std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const = 0;
23
24 virtual ~Entry ( ) = default;
25 };
26
27private:
28 template < class Return >
29 class EntryImpl : public Entry {
30 public:
31 std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( ) const override;
32 };
33
35
36public:
37 static void unregisterRawReader ( const std::string & type );
38
39 template < class ReturnType >
40 static void unregisterRawReader ( ) {
41 std::string type = ext::to_string < ReturnType > ( );
42 unregisterRawReader ( type );
43 }
44
45 static void registerRawReader ( std::string type, std::unique_ptr < Entry > entry );
46
47 template < class ReturnType >
48 static void registerRawReader ( std::string type ) {
49 registerRawReader ( std::move ( type ), std::unique_ptr < Entry > ( new EntryImpl < ReturnType > ( ) ) );
50 }
51
52 template < class ReturnType >
53 static void registerRawReader ( ) {
54 std::string type = ext::to_string < ReturnType > ( );
55 registerRawReader < ReturnType > ( std::move ( type ) );
56 }
57
58 static std::shared_ptr < abstraction::OperationAbstraction > getAbstraction ( const std::string & type );
59};
60
61} /* namespace abstraction */
62
64
65namespace abstraction {
66
67template < class Return >
68std::shared_ptr < abstraction::OperationAbstraction > RawReaderRegistry::EntryImpl < Return >::getAbstraction ( ) const {
69 return std::make_shared < abstraction::RawReaderAbstraction < Return > > ( );
70}
71
72} /* namespace abstraction */
73
Definition: RawReaderRegistry.hpp:20
virtual std::shared_ptr< abstraction::OperationAbstraction > getAbstraction() const =0
Definition: RawReaderRegistry.hpp:18
static void registerRawReader(std::string type)
Definition: RawReaderRegistry.hpp:48
static std::shared_ptr< abstraction::OperationAbstraction > getAbstraction(const std::string &type)
Definition: RawReaderRegistry.cpp:27
static void unregisterRawReader()
Definition: RawReaderRegistry.hpp:40
static void registerRawReader()
Definition: RawReaderRegistry.hpp:53
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