HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GT_DAClampedArray.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: GT_DAClampedArray.h ( GT Library, C++)
7  *
8  * COMMENTS:
9  */
10 #ifndef __GT_DAClampedArray__
11 #define __GT_DAClampedArray__
12 
13 #include "GT_API.h"
14 #include "GT_DAInherit.h"
15 
16 #include <UT/UT_StringArray.h>
17 #include <UT/UT_ValArray.h>
18 
19 /// @brief A value-clamped version of another array, useful for data ranges.
21 {
22 public:
24  : myMin(-SYS_FP64_MAX),
25  myMax(SYS_FP64_MAX)
26  {}
28  fpreal64 min_v, fpreal64 max_v)
29  : GT_DAInherit(data),
30  myMin(min_v),
31  myMax(max_v)
32  {}
34  : GT_DAInherit(src),
35  myMin(src.myMin),
36  myMax(src.myMax)
37  {}
38  ~GT_DAClampedArray() override;
39 
40  const char *className() const override { return "GT_DAClampedArray"; }
41  GT_Size entries() const override { return myData->entries(); }
42  bool isSameIndirection(const GT_DataArray &base) const override
43  {
44  auto other = dynamic_cast<const GT_DAClampedArray *>(&base);
45  return other && myData->isSameIndirection(*other->myData);
46  }
47 
48 #define CLAMP(EXPR, TYPE) SYSclamp((EXPR), (TYPE)myMin, (TYPE)myMax)
49  fpreal16 getF16(GT_Offset offset, int idx=0) const override
50  { return CLAMP(myData->getF16(offset, idx), fpreal16); }
51  fpreal32 getF32(GT_Offset offset, int idx=0) const override
52  { return CLAMP(myData->getF32(offset, idx), fpreal32); }
53  fpreal64 getF64(GT_Offset offset, int idx=0) const override
54  { return CLAMP(myData->getF64(offset, idx), fpreal64); }
55  uint8 getU8(GT_Offset offset, int idx=0) const override
56  { return CLAMP(myData->getU8(offset, idx), uint8); }
57  int32 getI32(GT_Offset offset, int idx=0) const override
58  { return CLAMP(myData->getI32(offset, idx), int32); }
59  int64 getI64(GT_Offset offset, int idx=0) const override
60  { return CLAMP(myData->getI64(offset, idx), int64); }
61  GT_String getS(GT_Offset offset, int idx=0) const override
62  { return myData->getS(offset, idx); }
63  GT_Size getStringIndexCount() const override
64  { return myData->getStringIndexCount(); }
65  GT_Offset getStringIndex(GT_Offset offset, int idx) const override
66  { return myData->getStringIndex(offset, idx); }
68  UT_IntArray &indices) const override
69  { myData->getIndexedStrings(strings, indices); }
70  bool getSA(UT_StringArray &a, GT_Offset offset) const override
71  { return myData->getSA(a, offset); }
72  GT_Size getDictIndexCount() const override
73  { return myData->getDictIndexCount(); }
74  GT_Offset getDictIndex(GT_Offset offset, int idx) const override
75  { return myData->getDictIndex(offset, idx); }
77  UT_IntArray &indices) const override
78  { myData->getIndexedDicts(dicts, indices); }
79  int getIndexPairObjectSetCount() const override
80  { return myData->getIndexPairObjectSetCount(); }
82  int s = 0) const override
83  { return myData->getIndexPairObjects(properties, s); }
84 #undef CLAMP
85 #define CLAMP_VALUES(TYPE) \
86  for(exint i=0; i<sz; i++) \
87  d[i] = SYSclamp(d[i], TYPE(myMin), TYPE(myMax))
88 
89  void doImport(GT_Offset off, uint8 *d, GT_Size sz) const override
90  { myData->import(off, d, sz);
92  void doImport(GT_Offset off, int8 *d, GT_Size sz) const override
93  { myData->import(off, d, sz);
94  CLAMP_VALUES(int8); }
95  void doImport(GT_Offset off, int16 *d, GT_Size sz) const override
96  { myData->import(off, d, sz);
98  void doImport(GT_Offset off, int32 *d, GT_Size sz) const override
99  { myData->import(off, d, sz);
100  CLAMP_VALUES(int32); }
101  void doImport(GT_Offset off, int64 *d, GT_Size sz) const override
102  { myData->import(off, d, sz);
103  CLAMP_VALUES(int64); }
104  void doImport(GT_Offset off, fpreal16 *d, GT_Size sz) const override
105  { myData->import(off, d, sz);
107  void doImport(GT_Offset off, fpreal32 *d, GT_Size sz) const override
108  { myData->import(off, d, sz);
111  GT_Size sz) const override
112  { myData->import(off, d, sz);
114 #undef CLAMP_VALUES
115 #define CLAMP_ARRAY(TYPE) \
116  for(int i=0; i<data.entries(); i++) \
117  data(i) = SYSclamp(data(i), (TYPE)myMin, (TYPE)myMax)
118 
120  UT_ValArray<fpreal16> &data) const override
121  { myData->import(off, data);
124  UT_ValArray<fpreal32> &data) const override
125  { myData->import(off, data);
128  UT_ValArray<fpreal64> &data) const override
129  { myData->import(off, data);
132  UT_ValArray<uint8> &data) const override
133  { myData->import(off, data);
134  CLAMP_ARRAY(uint8);}
136  UT_ValArray<int8> &data) const override
137  { myData->import(off, data);
138  CLAMP_ARRAY(int8); }
140  UT_ValArray<int16> &data) const override
141  { myData->import(off, data);
142  CLAMP_ARRAY(int16); }
144  UT_ValArray<int32> &data) const override
145  { myData->import(off, data);
146  CLAMP_ARRAY(int32); }
148  UT_ValArray<int64> &data) const override
149  { myData->import(off, data);
150  CLAMP_ARRAY(int64); }
153  GT_Offset start, GT_Size length) const override
154  {
155  UT_ASSERT(start >= 0 && length <= entries());
156  if (myData->getStorage() == GT_STORE_STRING)
157  {
158  UT_StringArray attr_strings;
159  for (GT_Offset off = start; off < length; ++off)
160  {
161  attr_strings.clear();
162  getSA(attr_strings, off);
163  sizes.append(attr_strings.entries());
164  data.concat(attr_strings);
165  }
166  }
167  }
168 
169 #undef CLAMP_ARRAY
170 
171 private:
172  double myMin;
173  double myMax;
174 };
175 
176 #endif
fpreal32 getF32(GT_Offset offset, int idx=0) const override
void doImport(GT_Offset off, int16 *d, GT_Size sz) const override
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
Definition: glcorearb.h:2621
#define CLAMP(EXPR, TYPE)
void doImportArray(GT_Offset off, UT_ValArray< fpreal64 > &data) const override
GLsizei GLenum const void * indices
Definition: glcorearb.h:406
int int32
Definition: SYS_Types.h:39
bool isSameIndirection(const GT_DataArray &base) const override
fpreal64 getF64(GT_Offset offset, int idx=0) const override
void getIndexPairObjects(GT_AttributeListHandle &properties, int s=0) const override
GT_DAClampedArray(const GT_DataArrayHandle &data, fpreal64 min_v, fpreal64 max_v)
GT_Size entries() const override
Number of entries in the array.
GLuint start
Definition: glcorearb.h:475
void doImport(GT_Offset off, fpreal32 *d, GT_Size sz) const override
uint8 getU8(GT_Offset offset, int idx=0) const override
GT_DAClampedArray(const GT_DAClampedArray &src)
void fillStringArray(UT_StringArray &data, UT_ValArray< int > &sizes, GT_Offset start, GT_Size length) const override
GT_Size getStringIndexCount() const override
void doImportArray(GT_Offset off, UT_ValArray< int32 > &data) const override
bool getSA(UT_StringArray &a, GT_Offset offset) const override
#define GT_API
Definition: GT_API.h:13
void doImport(GT_Offset off, fpreal64 *d, GT_Size sz) const override
#define CLAMP_ARRAY(TYPE)
GLboolean GLboolean GLboolean GLboolean a
Definition: glcorearb.h:1222
GLdouble s
Definition: glad.h:3009
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
A value-clamped version of another array, useful for data ranges.
void doImport(GT_Offset off, fpreal16 *d, GT_Size sz) const override
exint concat(const UT_Array< T > &a)
Takes another T array and concatenate it onto my end.
Definition: UT_ArrayImpl.h:994
void doImportArray(GT_Offset off, UT_ValArray< uint8 > &data) const override
void doImport(GT_Offset off, int32 *d, GT_Size sz) const override
float fpreal32
Definition: SYS_Types.h:200
#define SYS_FP64_MAX
Definition: SYS_Types.h:226
int32 getI32(GT_Offset offset, int idx=0) const override
const char * className() const override
double fpreal64
Definition: SYS_Types.h:201
unsigned char uint8
Definition: SYS_Types.h:36
GLintptr offset
Definition: glcorearb.h:665
Abstract data class for an array of float, int or string data.
Definition: GT_DataArray.h:41
void getIndexedDicts(UT_Array< UT_OptionsHolder > &dicts, UT_IntArray &indices) const override
GT_Offset getDictIndex(GT_Offset offset, int idx) const override
void doImport(GT_Offset off, int64 *d, GT_Size sz) const override
void doImportArray(GT_Offset off, UT_ValArray< int8 > &data) const override
int64 getI64(GT_Offset offset, int idx=0) const override
#define CLAMP_VALUES(TYPE)
int64 GT_Offset
Definition: GT_Types.h:129
long long int64
Definition: SYS_Types.h:116
virtual bool getSA(UT_StringArray &a, GT_Offset offset) const
Definition: GT_DataArray.h:119
signed char int8
Definition: SYS_Types.h:35
fpreal16 getF16(GT_Offset offset, int idx=0) const override
void doImport(GT_Offset off, uint8 *d, GT_Size sz) const override
GLsizei const GLchar *const * strings
Definition: glcorearb.h:1933
exint append()
Definition: UT_Array.h:142
virtual GT_Size entries() const =0
Number of entries in the array.
void doImportArray(GT_Offset off, UT_ValArray< fpreal16 > &data) const override
GT_Size getDictIndexCount() const override
exint entries() const
Alias of size(). size() is preferred.
Definition: UT_Array.h:669
int64 GT_Size
Definition: GT_Types.h:128
GT_String getS(GT_Offset offset, int idx=0) const override
void doImportArray(GT_Offset off, UT_ValArray< int64 > &data) const override
Base class for a data array which references another data array.
Definition: GT_DAInherit.h:18
short int16
Definition: SYS_Types.h:37
void getIndexedStrings(UT_StringArray &strings, UT_IntArray &indices) const override
GT_Offset getStringIndex(GT_Offset offset, int idx) const override
void doImportArray(GT_Offset off, UT_ValArray< int16 > &data) const override
#define UT_ASSERT(ZZ)
Definition: UT_Assert.h:165
void clear()
Resets list to an empty list.
Definition: UT_Array.h:753
void doImport(GT_Offset off, int8 *d, GT_Size sz) const override
Definition: format.h:1821
void doImportArray(GT_Offset off, UT_ValArray< fpreal32 > &data) const override
int getIndexPairObjectSetCount() const override
GLenum src
Definition: glcorearb.h:1793