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