variable_context.hpp
1 // Copyright (C) 2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 
5 #pragma once
6 
7 #include <ngraph/output_vector.hpp>
8 #include <ngraph/variant.hpp>
9 #include "ngraph/op/util/variable.hpp"
10 #include "ngraph/op/util/variable_value.hpp"
11 
12 namespace ngraph
13 {
14  using VariableValuePtr = std::shared_ptr<VariableValue>;
15  using VariableMap = std::unordered_map<VariablePtr, VariableValuePtr>;
16 
17  /// VariableContext stores and manages a evaluation context for Variables.
18  class NGRAPH_API VariableContext
19  {
20  public:
21  /// \brief Constructs an uninitialized VariableContext.
22  VariableContext() = default;
23 
24  /// \brief Constructor for VariableContext.
25  /// \param variable_values The values associated with a particular Variables.
26  explicit VariableContext(const VariableMap& variable_values)
27  : m_variable_values(variable_values)
28  {
29  }
30 
31  /// \brief Sets the reset flags for all stored Variables to true.
33  {
34  for (const auto& el : m_variable_values)
35  {
36  el.second->set_reset(true);
37  }
38  }
39 
40  /// \brief Sets the new values for Variables.
41  /// \param variable_values The new values associated with a particular Variable.
42  void set_variable_values(const VariableMap& variable_values)
43  {
44  m_variable_values = variable_values;
45  }
46 
47  /// \brief Changes/sets the values for Variable.
48  /// \param variable New or stored Variable.
49  /// \param variable_value The values associated with the variable.
50  void set_variable_value(const VariablePtr& variable, const VariableValuePtr& variable_value)
51  {
52  m_variable_values[variable] = variable_value;
53  }
54 
55  /// \brief Removes context for a particular Variable.
56  /// \param variable The variable for which the context will be cleared.
57  void remove_variable_value(const VariablePtr& variable)
58  {
59  m_variable_values.erase(variable);
60  }
61 
62  /// \brief Returns the current values for Variables.
63  const VariableMap& get_variable_values() const { return m_variable_values; }
64 
65  /// \brief Returns the value for specified Variable.
66  VariableValuePtr get_variable_value(const VariablePtr& variable) const
67  {
68  auto var_value = m_variable_values.find(variable);
69  if (var_value != m_variable_values.end())
70  {
71  return (*var_value).second;
72  }
73  return VariableValuePtr();
74  }
75 
76  private:
77  /// The values associated with a particular Variable.
78  VariableMap m_variable_values;
79  };
80 
81  template <>
82  class NGRAPH_API VariantWrapper<VariableContext> : public VariantImpl<VariableContext>
83  {
84  public:
85  static constexpr VariantTypeInfo type_info{"Variant::EvaluationContext::VariableContext",
86  0};
87 
88  const VariantTypeInfo& get_type_info() const override { return type_info; }
89 
90  explicit VariantWrapper(const value_type& value)
92  {
93  }
94 
95  private:
96  using Variant::init;
97  using Variant::merge;
98  };
99 
100 } // namespace ngraph
VariableContext stores and manages a evaluation context for Variables.
Definition: variable_context.hpp:19
VariableValuePtr get_variable_value(const VariablePtr &variable) const
Returns the value for specified Variable.
Definition: variable_context.hpp:66
VariableContext()=default
Constructs an uninitialized VariableContext.
void reset_variable_context() const
Sets the reset flags for all stored Variables to true.
Definition: variable_context.hpp:32
void set_variable_value(const VariablePtr &variable, const VariableValuePtr &variable_value)
Changes/sets the values for Variable.
Definition: variable_context.hpp:50
void remove_variable_value(const VariablePtr &variable)
Removes context for a particular Variable.
Definition: variable_context.hpp:57
VariableContext(const VariableMap &variable_values)
Constructor for VariableContext.
Definition: variable_context.hpp:26
const VariableMap & get_variable_values() const
Returns the current values for Variables.
Definition: variable_context.hpp:63
void set_variable_values(const VariableMap &variable_values)
Sets the new values for Variables.
Definition: variable_context.hpp:42
Definition: variant.hpp:29
Definition: variant.hpp:51
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16
Definition: type.hpp:27