HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GT_DASubArray.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_DASubArray.h ( GT Library, C++)
7  *
8  * COMMENTS:
9  */
10 
11 #ifndef __GT_DASubArray__
12 #define __GT_DASubArray__
13 
14 #include "GT_API.h"
15 #include "GT_DAInherit.h"
16 
17 #include <UT/UT_StringArray.h> // required by GT_IMPL_INHERIT_ARRAY()
18 #include <UT/UT_ValArray.h>
19 
20 /// @brief A slice of a different data array
22 {
23 public:
24  /// Default constructor
26  : mySize(0)
27  , myStart(0)
28  , GT_DAInherit()
29  {
30  }
31  /// Useful constructor
33  : mySize(size)
34  , myStart(start)
35  , GT_DAInherit(data)
36  {
37  }
38  /// Copy constructor
40  : mySize(src.mySize)
41  , myStart(src.myStart)
42  , GT_DAInherit(src)
43  {
44  }
45  /// Destructor
46  ~GT_DASubArray() override;
47 
48  const char *className() const override { return "GT_DASubArray"; }
49 
50  /// Initialize with given data
53  {
54  GT_DAInherit::init(data);
55  myStart = start;
56  mySize = size;
57  }
58 
59  GT_Size itemSize(GT_Offset offset) const override
60  { return myData->itemSize(this->getIndirect(offset)); }
61  GT_Size getTotalArrayEntries() const override
62  {
63  GT_Size sum = 0;
64  for (GT_Size off = myStart; off < myStart; ++off)
65  sum += myData->itemSize(off);
66  return sum;
67  }
68 
69  bool isSameIndirection(const GT_DataArray &base) const override
70  {
71  const GT_DASubArray *other = dynamic_cast<const GT_DASubArray *>(&base);
72  return other
73  && other->myStart == myStart
74  && other->mySize == mySize
75  && myData->isSameIndirection(*other->myData);
76  }
77 
78  /// If the base data supports backing data, we can get the backing data too
79  const void *getBackingData() const override;
80 
81  GT_IMPL_INHERIT_ARRAY(getIndirect, mySize)
82 
83 #define GT_IMPL_FILL_ARRAY(TYPE) \
84  void doFillArray(TYPE *data, GT_Offset start, GT_Size length, \
85  int tuple_size, int stride) const override \
86  { \
87  myData->fillArray( \
88  data, getIndirect(start), length, tuple_size, stride); \
89  } \
90  void doFillArrayAttr(UT_Array<TYPE> &data, UT_Array<int> &sizes, \
91  GT_Offset start, GT_Size length) const override \
92  { \
93  myData->fillArray(data, sizes, getIndirect(start), length); \
94  }
103 #undef GT_IMPL_FILL_ARRAY
104 
107  int tuple_size, int nrepeats, int stride,
108  fpreal black, fpreal white) const override
109  {
110  myData->extendedFillArray(data, getIndirect(start), length,
111  tuple_size, nrepeats, stride, black, white);
112 
113  }
114 
115 private:
116  /// Map the requested offset to the offset in my data
117  inline GT_Offset getIndirect(GT_Offset offset) const
118  { return myStart + offset; }
119 
120  GT_Offset myStart;
121  GT_Size mySize;
122 };
123 
124 #endif
int int32
Definition: SYS_Types.h:39
GT_DASubArray(const GT_DataArrayHandle &data, GT_Offset start, GT_Size size)
Useful constructor.
Definition: GT_DASubArray.h:32
GT_DataArrayHandle myData
Definition: GT_DAInherit.h:200
GLuint start
Definition: glcorearb.h:475
void init(const GT_DataArrayHandle &data, GT_Offset start, GT_Size size)
Initialize with given data.
Definition: GT_DASubArray.h:51
virtual const void * getBackingData() const
Definition: GT_DataArray.h:92
#define GT_API
Definition: GT_API.h:13
GLuint GLsizei GLsizei * length
Definition: glcorearb.h:795
GT_Size itemSize(GT_Offset offset) const override
Definition: GT_DASubArray.h:59
float fpreal32
Definition: SYS_Types.h:200
GT_DASubArray(const GT_DASubArray &src)
Copy constructor.
Definition: GT_DASubArray.h:39
void doExtendedQuantizedFill(uint8 *data, GT_Offset start, GT_Size length, int tuple_size, int nrepeats, int stride, fpreal black, fpreal white) 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
GLint GLenum GLboolean GLsizei stride
Definition: glcorearb.h:872
int64 GT_Offset
Definition: GT_Types.h:129
long long int64
Definition: SYS_Types.h:116
GT_DASubArray()
Default constructor.
Definition: GT_DASubArray.h:25
signed char int8
Definition: SYS_Types.h:35
GT_Size getTotalArrayEntries() const override
Definition: GT_DASubArray.h:61
bool isSameIndirection(const GT_DataArray &base) const override
Definition: GT_DASubArray.h:69
int64 GT_Size
Definition: GT_Types.h:128
GLsizeiptr size
Definition: glcorearb.h:664
A slice of a different data array.
Definition: GT_DASubArray.h:21
Base class for a data array which references another data array.
Definition: GT_DAInherit.h:18
short int16
Definition: SYS_Types.h:37
fpreal64 fpreal
Definition: SYS_Types.h:283
#define GT_IMPL_INHERIT_ARRAY(MAP_INDEX, SIZE)
Definition: GT_DAInherit.h:84
void init(const GT_DataArrayHandle &data)
Definition: GT_DAInherit.h:33
#define GT_IMPL_FILL_ARRAY(TYPE)
Definition: GT_DASubArray.h:83
Definition: format.h:1821
const char * className() const override
Definition: GT_DASubArray.h:48
GLenum src
Definition: glcorearb.h:1793