HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GT_DAValues.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_DAValues.h ( GT Library, C++)
7  *
8  * COMMENTS:
9  */
10 
11 #ifndef __GT_DAValue__
12 #define __GT_DAValue__
13 
14 #include "GT_API.h"
15 #include "GT_DataArray.h"
16 #include <UT/UT_Assert.h>
17 
18 /// @brief An array of const values.
19 ///
20 /// The data in the array is @b not owned by the array, but needs to exist
21 /// while the array is in use.
22 template <typename T>
23 class GT_DAValues : public GT_DataArray
24 {
25 public:
26  GT_DAValues(const T *values, GT_Size array_size,
27  int tuple_size, GT_Type type=GT_TYPE_NONE)
28  : myData(values)
29  , mySize(array_size)
30  , myTupleSize(tuple_size)
31  , myType(type)
32  {
33  }
34  ~GT_DAValues() override {}
35 
36  const T *getData() const { return myData; }
37 
38  const char *className() const override { return "GT_DAValues"; }
39  bool getPointerAliasing(const void *data) const override
40  { return myData == data; }
41 
42  /// @{
43  /// Methods defined on GT_DataArray
44  GT_Storage getStorage() const override
45  { return GTstorage<T>(); }
46  GT_Size getTupleSize() const override
47  { return myTupleSize; }
48  int64 getMemoryUsage() const override
49  { return sizeof(*this); }
50  GT_Size entries() const override
51  { return mySize; }
52  GT_Type getTypeInfo() const override
53  { return myType; }
54 
55  uint8 getU8(GT_Offset offset, int index=0) const override
56  {
57  offset = offset * myTupleSize + index;
58  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
59  return myData[offset];
60  }
61  int32 getI32(GT_Offset offset, int index=0) const override
62  {
63  offset = offset * myTupleSize + index;
64  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
65  return myData[offset];
66  }
67  int64 getI64(GT_Offset offset, int index=0) const override
68  {
69  offset = offset * myTupleSize + index;
70  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
71  return myData[offset];
72  }
73  fpreal16 getF16(GT_Offset offset, int index=0) const override
74  {
75  offset = offset * myTupleSize + index;
76  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
77  return myData[offset];
78  }
79  fpreal32 getF32(GT_Offset offset, int index=0) const override
80  {
81  offset = offset * myTupleSize + index;
82  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
83  return myData[offset];
84  }
85  fpreal64 getF64(GT_Offset offset, int index=0) const override
86  {
87  offset = offset * myTupleSize + index;
88  UT_ASSERT_P(offset>=0 && offset<mySize*myTupleSize);
89  return myData[offset];
90  }
91  GT_String getS(GT_Offset, int) const override
93  GT_Size getStringIndexCount() const override
94  { return -1; }
95  GT_Offset getStringIndex(GT_Offset, int) const override
96  { return -1; }
98  UT_IntArray &) const override {}
99  GT_Size getDictIndexCount() const override
100  { return -1; }
101  GT_Offset getDictIndex(GT_Offset, int) const override
102  { return -1; }
104  UT_IntArray &) const override {}
105  /// @}
106 
107  template<typename U>
108  const U *getT(GT_Offset offset, SYS_MAYBE_UNUSED U *buf, int size) const
109  {
110  const T *data = myData + offset*myTupleSize;
111  UT_ASSERT_P(offset < mySize && size <= myTupleSize);
112  if constexpr (SYSisSame<T, U>())
113  {
114  return data;
115  }
116  else
117  {
118  for (int i = 0; i < size; i++)
119  buf[i] = data[i];
120  return buf;
121  }
122  }
123 
124  const uint8 *get(GT_Offset offset,
125  uint8 *buf, int size) const override
126  {
127  return getT(offset, buf, size);
128  }
129 
130  const int8 *get(GT_Offset offset,
131  int8 *buf, int size) const override
132  {
133  return getT(offset, buf, size);
134  }
135 
136  const int16 *get(GT_Offset offset,
137  int16 *buf, int size) const override
138  {
139  return getT(offset, buf, size);
140  }
141 
142  const int32 *get(GT_Offset offset,
143  int32 *buf, int size) const override
144  {
145  return getT(offset, buf, size);
146  }
147  const int64 *get(GT_Offset offset,
148  int64 *buf, int size) const override
149  {
150  return getT(offset, buf, size);
151  }
153  fpreal16 *buf, int size) const override
154  {
155  return getT(offset, buf, size);
156  }
158  fpreal32 *buf, int size) const override
159  {
160  return getT(offset, buf, size);
161  }
163  fpreal64 *buf, int size) const override
164  {
165  return getT(offset, buf, size);
166  }
167 private:
168  const T *myData;
169  GT_Size myTupleSize;
170  GT_Size mySize;
171  GT_Type myType;
172 };
173 
179 
180 #endif
GT_Storage
Definition: GT_Types.h:19
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:2540
int int32
Definition: SYS_Types.h:39
fpreal32 getF32(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:79
bool getPointerAliasing(const void *data) const override
Return "true" if there's pointer aliasing.
Definition: GT_DAValues.h:39
GT_Offset getDictIndex(GT_Offset, int) const override
Definition: GT_DAValues.h:101
GLboolean * data
Definition: glcorearb.h:131
GT_DAValues< int64 > GT_I64Values
Definition: GT_DAValues.h:175
#define SYS_MAYBE_UNUSED
Definition: SYS_Compiler.h:71
GT_Size entries() const override
Definition: GT_DAValues.h:50
GT_Type
Definition: GT_Types.h:36
int64 getI64(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:67
GT_Size getStringIndexCount() const override
Definition: GT_DAValues.h:93
float fpreal32
Definition: SYS_Types.h:200
GT_DAValues< fpreal16 > GT_F16Values
Definition: GT_DAValues.h:176
GT_DAValues(const T *values, GT_Size array_size, int tuple_size, GT_Type type=GT_TYPE_NONE)
Definition: GT_DAValues.h:26
GT_DAValues< fpreal64 > GT_F64Values
Definition: GT_DAValues.h:178
double fpreal64
Definition: SYS_Types.h:201
unsigned char uint8
Definition: SYS_Types.h:36
const T * getData() const
Definition: GT_DAValues.h:36
const char * className() const override
Definition: GT_DAValues.h:38
GLint GLint GLsizei GLint GLenum GLenum type
Definition: glcorearb.h:108
GLintptr offset
Definition: glcorearb.h:665
Abstract data class for an array of float, int or string data.
Definition: GT_DataArray.h:40
const U * getT(GT_Offset offset, SYS_MAYBE_UNUSED U *buf, int size) const
Definition: GT_DAValues.h:108
GT_Offset getStringIndex(GT_Offset, int) const override
Definition: GT_DAValues.h:95
#define UT_ASSERT_P(ZZ)
Definition: UT_Assert.h:155
static const UT_StringHolder theEmptyString
GT_DAValues< int32 > GT_I32Values
Definition: GT_DAValues.h:174
GT_DAValues< fpreal32 > GT_F32Values
Definition: GT_DAValues.h:177
GT_Type getTypeInfo() const override
Definition: GT_DAValues.h:52
int64 GT_Offset
Definition: GT_Types.h:129
long long int64
Definition: SYS_Types.h:116
GT_Storage getStorage() const override
Definition: GT_DAValues.h:44
signed char int8
Definition: SYS_Types.h:35
fpreal16 getF16(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:73
fpreal64 getF64(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:85
uint8 getU8(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:55
int64 GT_Size
Definition: GT_Types.h:128
GLsizeiptr size
Definition: glcorearb.h:664
GLenum GLsizei GLsizei GLint * values
Definition: glcorearb.h:1602
short int16
Definition: SYS_Types.h:37
GLuint index
Definition: glcorearb.h:786
~GT_DAValues() override
Definition: GT_DAValues.h:34
int64 getMemoryUsage() const override
Definition: GT_DAValues.h:48
GT_Size getDictIndexCount() const override
Definition: GT_DAValues.h:99
GT_String getS(GT_Offset, int) const override
Definition: GT_DAValues.h:91
void getIndexedStrings(UT_StringArray &, UT_IntArray &) const override
Definition: GT_DAValues.h:97
void getIndexedDicts(UT_Array< UT_OptionsHolder > &, UT_IntArray &) const override
Definition: GT_DAValues.h:103
An array of const values.
Definition: GT_DAValues.h:23
int32 getI32(GT_Offset offset, int index=0) const override
Definition: GT_DAValues.h:61
GT_Size getTupleSize() const override
Definition: GT_DAValues.h:46
Definition: format.h:1821