factory_adapter.hpp
1 // Copyright (C) 2018-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 
5 #pragma once
6 
7 #include "ngraph/attribute_adapter.hpp"
8 #include "ngraph/attribute_visitor.hpp"
9 #include "ngraph/factory.hpp"
10 
11 namespace ngraph
12 {
13  template <typename BASE_TYPE>
15  {
16  public:
17  FactoryAttributeAdapter(std::shared_ptr<BASE_TYPE>& ref)
18  : m_ref(ref)
19  {
20  }
21 
22  /// \brief Hook for extra processing before other attributes
23  virtual bool on_start(AttributeVisitor& /* visitor */) { return true; }
24  /// \brief Hook for extra processing after other attributes
25  virtual bool on_finish(AttributeVisitor& /* visitor */) { return true; }
26  bool visit_attributes(AttributeVisitor& visitor) override
27  {
28  if (on_start(visitor))
29  {
30  std::string type_info_name;
31  uint64_t type_info_version;
32  if (m_ref)
33  {
34  auto& type_info = m_ref->get_type_info();
35  type_info_name = type_info.name;
36  type_info_version = type_info.version;
37  }
38  visitor.on_attribute("name", type_info_name);
39  visitor.on_attribute("version", type_info_version);
40  if (m_ref)
41  {
42  visitor.start_structure("value");
43  m_ref->visit_attributes(visitor);
44  visitor.finish_structure();
45  }
46  on_finish(visitor);
47  }
48  return true;
49  }
50 
51  protected:
52  std::shared_ptr<BASE_TYPE>& m_ref;
53  };
54 } // namespace ngraph
Visits the attributes of a node, primarily for serialization-like tasks.
Definition: attribute_visitor.hpp:59
virtual void start_structure(const std::string &name)
Start visiting a nested structure.
void on_attribute(const std::string &name, AT &value)
Definition: attribute_visitor.hpp:117
virtual std::string finish_structure()
Finish visiting a nested structure.
Definition: factory_adapter.hpp:15
virtual bool on_start(AttributeVisitor &)
Hook for extra processing before other attributes.
Definition: factory_adapter.hpp:23
virtual bool on_finish(AttributeVisitor &)
Hook for extra processing after other attributes.
Definition: factory_adapter.hpp:25
Adapters will see visitor.
Definition: attribute_adapter.hpp:185
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16