Algorithms Library Toolkit
A toolkit for algorithms, especially for algorithms on formal languages
Value.hpp
Go to the documentation of this file.
1
6#pragma once
7
8#include <memory>
9#include <ext/set>
10#include <ext/typeindex>
11
13
14namespace abstraction {
15
16class OperationAbstraction;
17class ValueReference;
18
19class Value : public std::enable_shared_from_this < Value > {
20protected:
21 virtual std::shared_ptr < abstraction::Value > asValue ( bool move, bool isTemporary ) = 0;
22
23public:
24 virtual ~Value ( ) noexcept = default;
25
26 std::shared_ptr < abstraction::Value > clone ( abstraction::TypeQualifiers::TypeQualifierSet typeQualifiers, bool isTemporary );
27
28 virtual std::shared_ptr < abstraction::Value > getProxyAbstraction ( );
29
30 virtual ext::type_index getTypeIndex ( ) const = 0;
31
32 std::string getType ( ) const;
33
34 virtual abstraction::TypeQualifiers::TypeQualifierSet getTypeQualifiers ( ) const = 0;
35
36 virtual bool isTemporary ( ) const = 0;
37
38 friend class ValueReference;
39};
40
41class ValueReference : public Value {
42 std::weak_ptr < abstraction::Value > m_value;
43
45 bool m_isTemporary;
46
47 std::shared_ptr < abstraction::Value > asValue ( bool move, bool isTemporary ) override;
48
49public:
50 ValueReference ( const std::shared_ptr < abstraction::Value > & value, abstraction::TypeQualifiers::TypeQualifierSet typeQualifiers, bool isTemporary );
51
52 std::shared_ptr < abstraction::Value > getProxyAbstraction ( ) override;
53
55
56 ext::type_index getTypeIndex ( ) const override;
57
58 bool isTemporary ( ) const override;
59};
60
61class Void : public Value {
62public:
63 std::shared_ptr < abstraction::Value > asValue ( bool move, bool isTemporary ) override;
64
65 ext::type_index getTypeIndex ( ) const override;
66
68
69 bool isTemporary ( ) const override;
70};
71
72} /* namespace abstraction */
73
Definition: TypeQualifiers.hpp:13
TypeQualifierSet
Definition: TypeQualifiers.hpp:15
Definition: Value.hpp:41
Definition: Value.hpp:19
virtual std::shared_ptr< abstraction::Value > getProxyAbstraction()
Definition: Value.cpp:11
virtual bool isTemporary() const =0
virtual abstraction::TypeQualifiers::TypeQualifierSet getTypeQualifiers() const =0
std::shared_ptr< abstraction::Value > clone(abstraction::TypeQualifiers::TypeQualifierSet typeQualifiers, bool isTemporary)
Definition: Value.cpp:19
virtual ~Value() noexcept=default
virtual ext::type_index getTypeIndex() const =0
std::string getType() const
Definition: Value.cpp:15
virtual std::shared_ptr< abstraction::Value > asValue(bool move, bool isTemporary)=0
friend class ValueReference
Definition: Value.hpp:38
Definition: Value.hpp:61
Definition: typeindex.h:37
Definition: AlgorithmAbstraction.hpp:11
Definition: sigHandler.cpp:20
Definition: FordFulkerson.hpp:16