Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
NormalizeFactory.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <ext/type_traits>
9#include <utility>
10
11#include <core/normalize.hpp>
12
13namespace factory {
14
16public:
17 template < class SourceType >
18 class normalizer {
19 SourceType && m_source;
20
21 public:
22 explicit normalizer ( SourceType && source ) : m_source ( std::move ( source ) ) {
23 }
24
25 template < class TargetType >
26 operator TargetType ( ) {
27 if constexpr ( std::is_same < TargetType, SourceType >::value )
28 return TargetType ( std::move ( m_source ) );
29 else
30 return core::normalize < SourceType >::eval ( std::move ( m_source ) );
31 }
32 };
33
34 template < class SourceType >
35 static normalizer < SourceType > normalize ( SourceType && source ) {
36 return normalizer < SourceType > ( std::forward < SourceType > ( source ) );
37 }
38
39};
40
41} /* namespace factory */
42
Definition: NormalizeFactory.hpp:18
normalizer(SourceType &&source)
Definition: NormalizeFactory.hpp:22
Definition: NormalizeFactory.hpp:15
static normalizer< SourceType > normalize(SourceType &&source)
Definition: NormalizeFactory.hpp:35
Definition: NormalizeFactory.hpp:13
Definition: FordFulkerson.hpp:16
Definition: normalize.hpp:13