axis_vector.hpp
1 // Copyright (C) 2018-2021 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 
5 #pragma once
6 
7 #include <cstddef>
8 #include <ostream>
9 #include <vector>
10 
11 #include "ngraph/attribute_adapter.hpp"
12 #include "ngraph/ngraph_visibility.hpp"
13 
14 namespace ngraph
15 {
16  /// \brief A vector of axes.
17  class AxisVector : public std::vector<size_t>
18  {
19  public:
20  NGRAPH_API AxisVector(const std::initializer_list<size_t>& axes);
21 
22  NGRAPH_API AxisVector(const std::vector<size_t>& axes);
23 
24  NGRAPH_API AxisVector(const AxisVector& axes);
25 
26  NGRAPH_API explicit AxisVector(size_t n);
27 
28  template <class InputIterator>
29  AxisVector(InputIterator first, InputIterator last)
30  : std::vector<size_t>(first, last)
31  {
32  }
33 
34  NGRAPH_API AxisVector();
35 
36  NGRAPH_API ~AxisVector();
37 
38  NGRAPH_API AxisVector& operator=(const AxisVector& v);
39 
40  NGRAPH_API AxisVector& operator=(AxisVector&& v) noexcept;
41  };
42 
43  template <>
44  class NGRAPH_API AttributeAdapter<AxisVector>
45  : public IndirectVectorValueAccessor<AxisVector, std::vector<int64_t>>
46  {
47  public:
50  {
51  }
52 
53  static constexpr DiscreteTypeInfo type_info{"AttributeAdapter<AxisVector>", 0};
54  const DiscreteTypeInfo& get_type_info() const override { return type_info; }
55  };
56 
57  NGRAPH_API
58  std::ostream& operator<<(std::ostream& s, const AxisVector& axis_vector);
59 } // namespace ngraph
An AttributeAdapter "captures" an attribute as an AT& and makes it available as a ValueAccessor<VAT>.
Definition: attribute_adapter.hpp:161
A vector of axes.
Definition: axis_vector.hpp:18
Definition: attribute_adapter.hpp:126
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16
Definition: type.hpp:27