coordinate_diff.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 difference (signed) of tensor element coordinates.
17  class CoordinateDiff : public std::vector<std::ptrdiff_t>
18  {
19  public:
20  NGRAPH_API CoordinateDiff(const std::initializer_list<std::ptrdiff_t>& diffs);
21 
22  NGRAPH_API CoordinateDiff(const std::vector<std::ptrdiff_t>& diffs);
23 
24  NGRAPH_API CoordinateDiff(const CoordinateDiff& diffs);
25 
26  NGRAPH_API explicit CoordinateDiff(size_t n, std::ptrdiff_t initial_value = 0);
27 
28  template <class InputIterator>
29  CoordinateDiff(InputIterator first, InputIterator last)
30  : std::vector<std::ptrdiff_t>(first, last)
31  {
32  }
33 
34  NGRAPH_API ~CoordinateDiff();
35 
36  NGRAPH_API CoordinateDiff();
37 
38  NGRAPH_API CoordinateDiff& operator=(const CoordinateDiff& v);
39 
40  NGRAPH_API CoordinateDiff& operator=(CoordinateDiff&& v) noexcept;
41  };
42 
43  template <>
44  class NGRAPH_API AttributeAdapter<CoordinateDiff>
45  : public IndirectVectorValueAccessor<CoordinateDiff, std::vector<int64_t>>
46 
47  {
48  public:
51  {
52  }
53 
54  static constexpr DiscreteTypeInfo type_info{"AttributeAdapter<CoordinateDiff>", 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 CoordinateDiff& coordinate_diff);
60 } // namespace ngraph
An AttributeAdapter "captures" an attribute as an AT& and makes it available as a ValueAccessor<VAT>.
Definition: attribute_adapter.hpp:161
A difference (signed) of tensor element coordinates.
Definition: coordinate_diff.hpp:18
Definition: attribute_adapter.hpp:126
The Intel nGraph C++ API.
Definition: attribute_adapter.hpp:16
Definition: type.hpp:27