Proto  3.2
Proto_Register.H
Go to the documentation of this file.
1 #pragma once
2 #ifndef _PROTO_REGISTER_H_
3 #define _PROTO_REGISTER_H_
4 #include "Proto.H"
5 #include "Proto_MemType.H"
6 namespace Proto
7 {
8  template<typename T, unsigned int C, MemType MEM>
9  struct Register
10  {
11  std::shared_ptr<BoxData<T,C,MEM> > m_data;
12  unsigned int m_dir;
15  std::shared_ptr<BoxData<T,C,MEM> > a_data,
16  unsigned int a_dir,
17  Side::LoHiSide a_side)
18  {
19  m_data = a_data;
20  m_dir = a_dir;
21  m_side = a_side;
22  };
23 
25  std::shared_ptr<BoxData<T,C,MEM>> a_data,
26  Point a_dir)
27  {
28  PROTO_ASSERT(a_dir.codim() == 1,
29  "Register constructor | Error: Direction Point must have codimension 1");
30  m_data = a_data;
31  for (int dir = 0; dir < DIM; dir++)
32  {
33  if (a_dir[dir] > 0)
34  {
35  m_dir = dir;
36  m_side = Side::Hi;
37  } else if (a_dir[dir] < 0)
38  {
39  m_dir = dir;
40  m_side = Side::Lo;
41  } else {
42  }
43  }
44  }
45 
46  const BoxData<T,C,MEM>& data() const { return *m_data; }
47  BoxData<T,C,MEM>& data() { return *m_data; }
48 
49  Point dir() const { return Point::Basis(m_dir, m_side); }
50 
51  };
52 }
53 #endif
BoxData< T, C, MEM > & data()
Definition: Proto_Register.H:47
Side::LoHiSide m_side
Definition: Proto_Register.H:13
LoHiSide
Side Enum.
Definition: Proto_Face.H:23
Multidimensional Rectangular Array.
Definition: Proto_BoxData.H:314
std::shared_ptr< BoxData< T, C, MEM > > m_data
Definition: Proto_Register.H:11
const BoxData< T, C, MEM > & data() const
Definition: Proto_Register.H:46
Low side; normal is in negative coordinate direction.
Definition: Proto_Face.H:26
Register(std::shared_ptr< BoxData< T, C, MEM >> a_data, Point a_dir)
Definition: Proto_Register.H:24
static ACCEL_DECORATION Point Basis(int a_dir, int a_scale=1)
Get Basis.
unsigned int m_dir
Definition: Proto_Register.H:12
Point dir() const
Definition: Proto_Register.H:49
Register(std::shared_ptr< BoxData< T, C, MEM > > a_data, unsigned int a_dir, Side::LoHiSide a_side)
Definition: Proto_Register.H:14
#define PROTO_ASSERT(stmt, args...)
Definition: Proto_PAssert.H:48
Definition: Proto_Array.H:17
Definition: Proto_Register.H:9
Integer Valued Vector.
Definition: Proto_Point.H:24
int codim() const
Query Codimension.
High side; normal is in the positive coordinate direction.
Definition: Proto_Face.H:27