Tenncor
coord.hpp
Go to the documentation of this file.
1 
9 #include "teq/coord.hpp"
10 
11 #ifndef ETEQ_COORD_HPP
12 #define ETEQ_COORD_HPP
13 
14 namespace eteq
15 {
16 
18 struct CoordMap final : public teq::iCoordMap
19 {
20  CoordMap (teq::CoordT indices, bool bijective) :
21  indices_(indices), bijective_(bijective) {}
22 
24  teq::iCoordMap* connect (const teq::iCoordMap& rhs) const override
25  {
26  return nullptr;
27  }
28 
30  void forward (teq::CoordT::iterator out,
31  teq::CoordT::const_iterator in) const override
32  {
33  std::copy(indices_.begin(), indices_.end(), out);
34  }
35 
37  iCoordMap* reverse (void) const override
38  {
39  return nullptr;
40  }
41 
43  std::string to_string (void) const override
44  {
45  return fmts::to_string(indices_.begin(), indices_.end());
46  }
47 
49  void access (std::function<void(const teq::MatrixT&)> cb) const override {}
50 
52  bool is_bijective (void) const override
53  {
54  return bijective_;
55  }
56 
57 private:
59 
60  bool bijective_;
61 };
62 
64 using CoordptrT = std::shared_ptr<CoordMap>;
65 
67 CoordptrT reduce (std::vector<teq::RankT> red_dims);
68 
70 CoordptrT extend (teq::RankT rank, std::vector<teq::DimT> ext);
71 
73 CoordptrT permute (std::vector<teq::RankT> dims);
74 
75 }
76 
77 #endif // ETEQ_COORD_HPP
std::array< CDimT, rank_cap > CoordT
Definition: shape.hpp:56
teq::CoordT indices_
Definition: coord.hpp:58
CoordMap(teq::CoordT indices, bool bijective)
Definition: coord.hpp:20
CoordptrT extend(teq::RankT rank, std::vector< teq::DimT > ext)
Return CoordMap wrapper of extension parameters.
Definition: constant.hpp:17
CoordptrT reduce(std::vector< teq::RankT > red_dims)
Return CoordMap wrapper of reduction dimensions.
uint8_t RankT
Type used for shape rank.
Definition: shape.hpp:23
Interface for transforming coordinates and reversing the coordinate.
Definition: coord.hpp:20
std::shared_ptr< CoordMap > CoordptrT
Type of iCoordMap smartpointer.
Definition: coord.hpp:64
Eigen transformation wrapper implementation of iCoordMap.
Definition: coord.hpp:18
teq::iCoordMap * connect(const teq::iCoordMap &rhs) const override
Implementation of iCoordMap.
Definition: coord.hpp:24
void forward(teq::CoordT::iterator out, teq::CoordT::const_iterator in) const override
Implementation of iCoordMap.
Definition: coord.hpp:30
bool bijective_
Definition: coord.hpp:60
CoordptrT permute(std::vector< teq::RankT > dims)
Return CoordMap wrapper of permute indices.
std::string to_string(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:43
bool is_bijective(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:52
std::string to_string(teq::CoordptrT c)
Return brief hashable string representation of coordinate mapper.
void access(std::function< void(const teq::MatrixT &)> cb) const override
Implementation of iCoordMap.
Definition: coord.hpp:49
iCoordMap * reverse(void) const override
Implementation of iCoordMap.
Definition: coord.hpp:37
double[mat_dim][mat_dim] MatrixT
Coordinate transformation matrix (using homogeneous)
Definition: matops.hpp:28