NSVD Reader  0.0.1
WriteConstraint.hpp
Go to the documentation of this file.
1 
5 /*
6  * These codes are licensed under CC0.
7  * http://creativecommons.org/publicdomain/zero/1.0/
8  */
9 #ifndef __NODAMUSHI_SVD_NORMALIZED_WRITECONSTRAINT_HPP__
10 #define __NODAMUSHI_SVD_NORMALIZED_WRITECONSTRAINT_HPP__
11 
12 # include <cstdint>
13 
14 namespace nodamushi{
15 namespace svd{
16 namespace normalized{
17 
24 {
28  struct range_t
29  {
35  bool valid;
37  operator bool()const noexcept{return valid;}
38 
40  uint64_t maximum;
42  uint64_t minimum;
43  range_t():valid(false),maximum(~(uint64_t)0),minimum(0){}
44 
45  void init(uint64_t max,uint64_t min)noexcept
46  {
47  valid = true;
48  maximum = max;
49  minimum = min;
50  }
51  void clear()noexcept
52  {
53  valid = false;
54  maximum = ~(uint64_t)0;
55  minimum = 0;
56  }
57  };
58 
59 
65  bool valid;
67  operator bool()const noexcept{return valid;}
68  //---------------------------------------------------
73  bool writeAsRead;
79 
86 
87  template<typename SVD,typename VALUE,VALUE SVD::* MEMBER>
89  WriteConstraint(d.ptr){}
90 
91  template<typename VALUE>// value
92  WriteConstraint(const VALUE* ptr):
93  valid(ptr!=nullptr),
94  writeAsRead(false),
95  useEnumeratedValues(false),
96  range()
97  {
98  if(valid){
99  const auto& v = **ptr;
100  if(v.writeAsRead) writeAsRead= *v.writeAsRead;
101  if(v.useEnumeratedValues) useEnumeratedValues= *v.useEnumeratedValues;
102  if(v.range){
103  const auto& r= *v.range;
104  uint64_t max=range.maximum,min=range.minimum;
105  if(r.maximum) max = *r.maximum;
106  if(r.minimum) min = *r.minimum;
107  range.init(max,min);
108  }
109  }
110  }
111 };
112 
113 }}} // end namespace svd
114 #endif // __NODAMUSHI_SVD_NORMALIZED_WRITECONSTRAINT_HPP__
bool valid
Indicates whether this data is valid.
bool writeAsRead
<writeAsRead>If true, only the last read value can be written.
bool valid
Indicates whether this data is valid.
normalized <writeConstraint>.<range> element
void init(uint64_t max, uint64_t min) noexcept
uint64_t minimum
range minimum.this value is enable when range is true.
WriteConstraint(derived_from_helper< SVD, VALUE, MEMBER > &&d)
bool useEnumeratedValues
<useEnueratedValues>If true, only the values listed in the enumeratedValues list can be written.
uint64_t maximum
range maxmmum.this value is enable when range is true.