11 #ifndef __GT_DataArray__
12 #define __GT_DataArray__
49 virtual const char *className()
const = 0;
58 virtual GT_Size entries()
const = 0;
67 virtual GT_Size getTupleSize()
const = 0;
71 virtual int64 getMemoryUsage()
const = 0;
74 virtual GT_Type getTypeInfo()
const;
84 virtual bool isValid()
const {
return true; }
105 {
return getI32(offset, idx); }
107 {
return getI32(offset, idx); }
110 {
return getI32(offset, idx); }
113 {
return getF32(offset, idx); }
116 {
return getF32(offset, idx); }
165 template <
typename T>
171 virtual GT_Size getStringIndexCount()
const = 0;
217 virtual GT_Size getDictIndexCount()
const = 0;
283 { doImportArray(idx,
data); }
285 { doImportArray(idx,
data); }
287 { doImportArray(idx,
data); }
289 { doImportArray(idx,
data); }
291 { doImportArray(idx,
data); }
293 { doImportArray(idx,
data); }
295 { doImportArray(idx,
data); }
297 { doImportArray(idx,
data); }
299 { getSA(
data, idx); }
301 { getDictA(
data, idx); }
305 if (GTisFloat(getStorage()))
306 doImportQuantized(idx,
data,
size, black, white);
336 int tsize,
int stride=-1)
const
337 { doFillArray(data, start, length, tsize,
stride); }
339 int tsize,
int stride=-1)
const
340 { doFillArray(data, start, length, tsize,
stride); }
342 int tsize,
int stride=-1)
const
343 { doFillArray(data, start, length, tsize,
stride); }
345 int tsize,
int stride=-1)
const
346 { doFillArray(data, start, length, tsize,
stride); }
348 int tsize,
int stride=-1)
const
349 { doFillArray(data, start, length, tsize,
stride); }
351 int tsize,
int stride=-1)
const
352 { doFillArray(data, start, length, tsize,
stride); }
354 int tsize,
int stride=-1)
const
355 { doFillArray(data, start, length, tsize,
stride); }
361 if(GTisFloat(getStorage()))
362 doFillQuantizedArray(data, start, length, tsize,
365 doFillArray(data, start, length, tsize,
stride);
372 doFillVec3BBox(dest, start, length, bbox,
379 doFillVec3BBox(dest, start, length, bbox,
390 { doFillArrayAttr(data, sizes, start, length); }
393 { doFillArrayAttr(data, sizes, start, length); }
396 { doFillArrayAttr(data, sizes, start, length); }
399 { doFillArrayAttr(data, sizes, start, length); }
402 { doFillArrayAttr(data, sizes, start, length); }
405 { doFillArrayAttr(data, sizes, start, length); }
408 { doFillArrayAttr(data, sizes, start, length); }
411 { doFillArrayAttr(data, sizes, start, length); }
416 int tsize,
int nrepeats,
420 doExtendedQuantizedFill(data, start, length, tsize,
421 nrepeats,
stride, black, white);
433 int tsize,
int nrepeats,
int stride=-1)
const
435 t_extendedFill(data, start, length, tsize,
439 int tsize,
int nrepeats,
int stride=-1)
const
441 t_extendedFill(data, start, length, tsize,
445 int tsize,
int nrepeats,
int stride=-1)
const
447 t_extendedFill(data, start, length, tsize,
451 int tsize,
int nrepeats,
int stride=-1)
const
453 t_extendedFill(data, start, length, tsize,
457 int tsize,
int nrepeats,
int stride=-1)
const
459 t_extendedFill(data, start, length, tsize,
463 int tsize,
int nrepeats,
int stride=-1)
const
465 t_extendedFill(data, start, length, tsize,
469 int tsize,
int nrepeats,
int stride=-1)
const
471 t_extendedFill(data, start, length, tsize,
475 int tsize,
int nrepeats,
int stride=-1)
const
477 t_extendedFill(data, start, length, tsize,
498 virtual void getRange(
exint &lo,
exint &hi,
int tuple_idx=0)
const;
499 virtual void getRange(
fpreal &lo,
fpreal &hi,
int tidx=0)
const;
532 for (
int i = 0,
n = getTupleSize(); i <
n; ++i)
541 return computeMinMax(min, max);
545 int tsize = getTupleSize();
548 if (
min[0] <= max[0] &&
min[1] <= max[1] &&
min[2] <= max[2])
561 {
return size >= (((
int64)1) << 31); }
564 void dumpValues(
const char *msg=NULL)
const;
574 static void *
operator new(
size_t size);
575 static void *
operator new(
size_t size,
void *p);
576 static void operator delete(
void *p,
size_t size);
592 const char *attrib_name,
594 const int expected_size) {}
608 {
return !isIndirect() && !other.
isIndirect(); }
623 return size == 0 ? tuple_size :
SYSmin(size, tuple_size);
652 int tuple_size,
int stride)
const
653 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
656 int tuple_size,
int stride)
const
657 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
659 int tuple_size,
int stride)
const
660 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
662 int tuple_size,
int stride)
const
663 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
665 int tuple_size,
int stride)
const
666 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
668 int tuple_size,
int stride)
const
669 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
671 int tuple_size,
int stride)
const
672 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
674 int tuple_size,
int stride)
const
675 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
678 { t_extendedFillArray(data, sizes, start, length); }
681 { t_extendedFillArray(data, sizes, start, length); }
684 { t_extendedFillArray(data, sizes, start, length); }
687 { t_extendedFillArray(data, sizes, start, length); }
690 { t_extendedFillArray(data, sizes, start, length); }
693 { t_extendedFillArray(data, sizes, start, length); }
696 { t_extendedFillArray(data, sizes, start, length); }
699 { t_extendedFillArray(data, sizes, start, length); }
703 int tuple_size,
int stride,
706 doExtendedQuantizedFill(data, start, length, tuple_size,
707 1, stride, black, white);
709 virtual void doExtendedQuantizedFill(
uint8 *
data,
711 int tuple_size,
int nrepeats,
int stride,
715 template <
typename T_POD>
729 : myArray(src.myArray)
732 , myStart(src.myStart)
733 , myStride(src.myStride)
738 exint i = range.begin();
739 T_POD *dest = myData + i*myStride;
740 for (; i != range.end(); ++i, dest += myStride)
742 myArray.import(i+myStart, dest, 3);
743 myBox.enlargeBounds(dest[0], dest[1], dest[2]);
748 myBox.enlargeBounds(src.myBox);
762 stride =
SYSmax(stride, 3);
770 stride =
SYSmax(stride, 3);
778 template <
typename T_POD>
void
780 int tsize,
int nrepeats,
int stride)
const;
783 template <
typename T_POD>
void
791 template <
typename T,
int tuplesize>
class VectorPODAccessor
798 array.
get(offset, result.data(), tuplesize);
837 template <
typename T,
int FAKE>
class TypeInfo {};
843 template <
int FAKE>
class TypeInfo<
int32, FAKE>
844 {
public:
typedef I32Accessor Accessors; };
845 template <
int FAKE>
class TypeInfo<
int64, FAKE>
846 {
public:
typedef I64Accessor Accessors; };
847 template <
int FAKE>
class TypeInfo<
fpreal16, FAKE>
848 {
public:
typedef F16Accessor Accessors; };
849 template <
int FAKE>
class TypeInfo<
fpreal32, FAKE>
850 {
public:
typedef F32Accessor Accessors; };
851 template <
int FAKE>
class TypeInfo<
fpreal64, FAKE>
852 {
public:
typedef F64Accessor Accessors; };
854 template <
int FAKE>
class TypeInfo<
UT_Vector2F, FAKE>
855 {
public:
typedef VectorPODAccessor<UT_Vector2F, 2> Accessors; };
856 template <
int FAKE>
class TypeInfo<
UT_Vector2D, FAKE>
857 {
public:
typedef VectorPODAccessor<UT_Vector2D, 2> Accessors; };
858 template <
int FAKE>
class TypeInfo<
UT_Vector3H, FAKE>
859 {
public:
typedef VectorPODAccessor<UT_Vector3H, 3> Accessors; };
860 template <
int FAKE>
class TypeInfo<
UT_Vector3F, FAKE>
861 {
public:
typedef VectorPODAccessor<UT_Vector3F, 3> Accessors; };
862 template <
int FAKE>
class TypeInfo<
UT_Vector3D, FAKE>
863 {
public:
typedef VectorPODAccessor<UT_Vector3D, 3> Accessors; };
864 template <
int FAKE>
class TypeInfo<
UT_Vector4H, FAKE>
865 {
public:
typedef VectorPODAccessor<UT_Vector4H, 4> Accessors; };
866 template <
int FAKE>
class TypeInfo<
UT_Vector4F, FAKE>
867 {
public:
typedef VectorPODAccessor<UT_Vector4F, 4> Accessors; };
868 template <
int FAKE>
class TypeInfo<
UT_Vector4D, FAKE>
869 {
public:
typedef VectorPODAccessor<UT_Vector4D, 4> Accessors; };
870 template <
int FAKE>
class TypeInfo<
UT_Matrix3F, FAKE>
871 {
public:
typedef VectorPODAccessor<UT_Matrix3F, 9> Accessors; };
872 template <
int FAKE>
class TypeInfo<
UT_Matrix3D, FAKE>
873 {
public:
typedef VectorPODAccessor<UT_Matrix3D, 9> Accessors; };
874 template <
int FAKE>
class TypeInfo<
UT_Matrix4F, FAKE>
875 {
public:
typedef VectorPODAccessor<UT_Matrix4F, 16> Accessors; };
876 template <
int FAKE>
class TypeInfo<
UT_Matrix4D, FAKE>
877 {
public:
typedef VectorPODAccessor<UT_Matrix4D, 16> Accessors; };
881 template <
typename T>
T
885 template <
typename T>
T
888 return (1-t)*getValue<T>(i0) + t*getValue<T>(i1);
891 template <
typename T>
T
895 T l = (1-
v)*getValue<T>(u0v0) + v*getValue<T>(u0v1);
896 T r = (1-
v)*getValue<T>(u1v0) + v*getValue<T>(u1v1);
897 return (1-u)*l + u*
r;
virtual exint getDataIndex(GT_Offset i) const
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
SYS_HashType hash() const
virtual void updateGeoDetail(const GU_ConstDetailHandle &dtl, const char *attrib_name, GT_Owner attrib_owner, const int expected_size)
Update cached data, in case the underlying attribute changed.
virtual void extendedFill(int16 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
Definition of a geometry attribute.
virtual bool getIA32(UT_ValArray< int32 > &a, GT_Offset offset) const
virtual void doFillQuantizedArray(uint8 *data, GT_Offset start, GT_Size length, int tuple_size, int stride, fpreal black, fpreal white) const
virtual bool isValid() const
Data array is valid; can be sampled from.
GLsizei GLenum const void * indices
void fillArray(UT_Array< fpreal64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual bool getDictIndices(UT_Array< GT_Offset > &indices, GT_Offset offset) const
virtual fpreal16 getF16(GT_Offset offset, int idx=0) const
virtual void extendedFill(int32 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
void fillArray(fpreal64 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
Nested class to perform filling for a POD array.
virtual bool getFA64(UT_ValArray< fpreal64 > &a, GT_Offset offset) const
virtual fpreal64 getF64(GT_Offset offset, int idx=0) const
T lerpValue(GT_Offset i0, GT_Offset i1, fpreal t) const
virtual void fillStringArray(UT_StringArray &data, UT_ValArray< int > &sizes, GT_Offset start, GT_Size length) const
void join(const fillV3BoxTask< T_POD > &src)
void fillArray(UT_Array< fpreal32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArray(int16 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
bool enlargeBounds(UT_BoundingBox &b) const
GLdouble GLdouble GLdouble z
virtual fpreal32 getF32(GT_Offset offset, int idx=0) const =0
virtual const void * getBackingData() const
const UT_BoundingBox & box() const
virtual int64 getI64(GT_Offset offset, int idx=0) const
GLboolean GLboolean GLboolean GLboolean a
std::size_t SYS_HashType
Define the type for hash values.
static bool isBigInteger(GT_Size size)
Quick & dirty test to see if a size is bigger than a 32 bit int.
GLuint GLsizei GLsizei * length
virtual bool getUA8(UT_ValArray< uint8 > &a, GT_Offset offset) const
void fillArray(int16 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
virtual void extendedFill(fpreal16 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
Class which writes ASCII or binary JSON streams.
**But if you need a result
virtual void extendedFill(int64 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
A reference counter base class for use with UT_IntrusivePtr.
void fillArray(UT_Array< int16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArray(int64 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
virtual GT_Size itemSize(GT_Offset) const
Return the number of elements in the array for the given item.
virtual void doFillVec3BBox(fpreal64 *dest, GT_Offset start, GT_Size length, UT_BoundingBoxD &bbox, int, int stride)
virtual void extendedFill(fpreal32 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
virtual void doFillVec3BBox(fpreal32 *dest, GT_Offset start, GT_Size length, UT_BoundingBoxF &bbox, int, int stride)
void fillArray(fpreal32 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
virtual bool getIA64(UT_ValArray< int64 > &a, GT_Offset offset) const
__hostdev__ float getValue(uint32_t i) const
virtual bool getIA16(UT_ValArray< int16 > &a, GT_Offset offset) const
virtual void extendedFill(int8 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
virtual void doFillArrayAttr(UT_Array< fpreal16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArrayAttr(UT_Array< int32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
Abstract data class for an array of float, int or string data.
virtual const uint8 * get(GT_Offset i, uint8 *store, int sz) const
virtual void extendedFill(uint8 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
virtual bool isIndirect() const
Whether there is some indirection from the GT_Offset to the data index.
UT_IntrusivePtr< GT_DataArray > GT_DataArrayHandle
virtual void extendedFill(fpreal64 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
virtual int64 getDataId() const
fillV3BoxTask(const GT_DataArray &array, T_POD *data, GT_Offset start, int stride)
void fillArray(UT_Array< int8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArray(int8 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
virtual bool getFA32(UT_ValArray< fpreal32 > &a, GT_Offset offset) const
virtual bool getIA8(UT_ValArray< int8 > &a, GT_Offset offset) const
virtual bool getPointerAliasing(const void *data) const
Return "true" if there's pointer aliasing.
static const UT_OptionsHolder theEmptyOptions
GLint GLenum GLboolean GLsizei stride
virtual void doFillArrayAttr(UT_Array< int8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArrayAttr(UT_Array< int16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArray(uint8 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
virtual void extendedFillArray(uint8 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1, fpreal black=0, fpreal white=1) const
virtual bool getSA(UT_StringArray &a, GT_Offset offset) const
#define SYS_STATIC_FORCE_INLINE
T getValue(GT_Offset index) const
Public accessor for POD types.
virtual void getIndexPairObjects(GT_AttributeListHandle &properties, int s=0) const
GLsizei const GLchar *const * strings
GLboolean GLboolean GLboolean b
void enlargeBounds(const UT_Vector3T< T > &min, const UT_Vector3T< T > &max)
void fillArray(fpreal16 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
fillV3BoxTask(fillV3BoxTask &src, UT_Split)
virtual void doFillArrayAttr(UT_Array< fpreal64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
void copyDataId(const GT_DataArray &src)
virtual bool isSameIndirection(const GT_DataArray &other) const
void fillArray(int8 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
virtual bool getFA16(UT_ValArray< fpreal16 > &a, GT_Offset offset) const
virtual void doFillArray(fpreal16 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
void fillVec3BBox(fpreal64 *dest, GT_Offset start, GT_Size length, UT_BoundingBoxD &bbox, int tsize, int stride=-1)
virtual void doFillArray(fpreal32 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
virtual void doFillArrayAttr(UT_Array< fpreal32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
bool getMinMax(fpreal64 *min, fpreal64 *max) const
Enlarge a bounding box with values of this 3-tuple array.
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.
virtual int16 getI16(GT_Offset offset, int idx=0) const
void operator()(const UT_BlockedRange< exint > &range)
void fillVec3BBox(fpreal32 *dest, GT_Offset start, GT_Size length, UT_BoundingBoxF &bbox, int tsize, int stride=-1)
virtual bool hasArrayEntries() const
Returns "true" if each entry is an array.
virtual int getIndexPairObjectSetCount() const
virtual const GA_Attribute * getBufferAttribute() const
The underlying GA_Attribute, if one exists.
void fillArray(UT_Array< int64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArray(fpreal64 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
void fillArray(UT_Array< fpreal16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
void fillArray(uint8 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1, fpreal black=0, fpreal white=1) const
virtual GT_Dict getDict(GT_Offset offset, int idx=0) const
virtual void doFillArrayAttr(UT_Array< int64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
T bilerpValue(GT_Offset u0v0, GT_Offset u1v0, GT_Offset u0v1, GT_Offset u1v1, fpreal u, fpreal v)
void fillArray(int32 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
GLubyte GLubyte GLubyte GLubyte w
virtual void fillDictionaryArray(UT_Array< UT_OptionsHolder > &data, UT_ValArray< int > &sizes, GT_Offset start, GT_Size length) const
void fillArray(int64 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
virtual bool getStringIndices(UT_Array< GT_Offset > &indices, GT_Offset offset) const
virtual void doFillArray(int32 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
virtual int32 getI32(GT_Offset offset, int idx=0) const =0
SYS_STATIC_FORCE_INLINE GT_Size fixImportTupleSize(GT_Size size, GT_Size tuple_size)
virtual int8 getI8(GT_Offset offset, int idx=0) const
virtual GT_Size getTupleSize() const =0
Number of elements for each array element.
void fillArray(UT_Array< uint8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual void doFillArrayAttr(UT_Array< uint8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
virtual bool getDictA(UT_Array< UT_OptionsHolder > &a, GT_Offset offset) const
virtual GT_Size getTotalArrayEntries() const
void UTparallelReduceLightItems(const Range &range, Body &body)
void fillArray(UT_Array< int32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const