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  /// If the base data supports backing data, we can get the backing data too
70  const void *getBackingData() const override;
71 
72  GT_IMPL_INHERIT_ARRAY(getIndirect, mySize)
73 
74 private:
75  /// Map the requested offset to the offset in my data
76  inline GT_Offset getIndirect(GT_Offset offset) const
77  { return myStart + offset; }
78 
79  GT_Offset myStart;
80  GT_Size mySize;
81 };
82 
83 #endif
GT_DASubArray(const GT_DataArrayHandle &data, GT_Offset start, GT_Size size)
Useful constructor.
Definition: GT_DASubArray.h:32
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:91
#define GT_API
Definition: GT_API.h:13
GT_Size itemSize(GT_Offset offset) const override
Definition: GT_DASubArray.h:59
GT_DASubArray(const GT_DASubArray &src)
Copy constructor.
Definition: GT_DASubArray.h:39
GLintptr offset
Definition: glcorearb.h:665
int64 GT_Offset
Definition: GT_Types.h:129
GT_DASubArray()
Default constructor.
Definition: GT_DASubArray.h:25
GT_Size getTotalArrayEntries() const override
Definition: GT_DASubArray.h:61
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
#define GT_IMPL_INHERIT_ARRAY(MAP_INDEX, SIZE)
Definition: GT_DAInherit.h:84
void init(const GT_DataArrayHandle &data)
Definition: GT_DAInherit.h:33
Definition: format.h:1821
const char * className() const override
Definition: GT_DASubArray.h:48
GLenum src
Definition: glcorearb.h:1793