11 #ifndef __GT_DataArray__
12 #define __GT_DataArray__
48 virtual const char *className()
const = 0;
57 virtual GT_Size entries()
const = 0;
64 virtual GT_Size getTupleSize()
const = 0;
68 virtual int64 getMemoryUsage()
const = 0;
71 virtual GT_Type getTypeInfo()
const;
81 virtual bool isValid()
const {
return true; }
102 {
return getI32(offset, idx); }
104 {
return getI32(offset, idx); }
107 {
return getI32(offset, idx); }
110 {
return getF32(offset, idx); }
113 {
return getF32(offset, idx); }
157 template <
typename T>
163 virtual GT_Size getStringIndexCount()
const = 0;
190 int tuple_idx=0)
const;
224 { doImportArray(idx,
data); }
226 { doImportArray(idx,
data); }
228 { doImportArray(idx,
data); }
230 { doImportArray(idx,
data); }
232 { doImportArray(idx,
data); }
234 { doImportArray(idx,
data); }
236 { doImportArray(idx,
data); }
238 { doImportArray(idx,
data); }
240 { getSA(
data, idx); }
244 if (GTisFloat(getStorage()))
245 doImportQuantized(idx,
data,
size, black, white);
275 int tsize,
int stride=-1)
const
276 { doFillArray(data, start, length, tsize,
stride); }
278 int tsize,
int stride=-1)
const
279 { doFillArray(data, start, length, tsize,
stride); }
281 int tsize,
int stride=-1)
const
282 { doFillArray(data, start, length, tsize,
stride); }
284 int tsize,
int stride=-1)
const
285 { doFillArray(data, start, length, tsize,
stride); }
287 int tsize,
int stride=-1)
const
288 { doFillArray(data, start, length, tsize,
stride); }
290 int tsize,
int stride=-1)
const
291 { doFillArray(data, start, length, tsize,
stride); }
293 int tsize,
int stride=-1)
const
294 { doFillArray(data, start, length, tsize,
stride); }
300 if(GTisFloat(getStorage()))
301 doFillQuantizedArray(data, start, length, tsize,
304 doFillArray(data, start, length, tsize,
stride);
311 doFillVec3BBox(dest, start, length, bbox,
318 doFillVec3BBox(dest, start, length, bbox,
329 { doFillArrayAttr(data, sizes, start, length); }
332 { doFillArrayAttr(data, sizes, start, length); }
335 { doFillArrayAttr(data, sizes, start, length); }
338 { doFillArrayAttr(data, sizes, start, length); }
341 { doFillArrayAttr(data, sizes, start, length); }
344 { doFillArrayAttr(data, sizes, start, length); }
347 { doFillArrayAttr(data, sizes, start, length); }
350 { doFillArrayAttr(data, sizes, start, length); }
355 int tsize,
int nrepeats,
359 doExtendedQuantizedFill(data, start, length, tsize,
360 nrepeats,
stride, black, white);
372 int tsize,
int nrepeats,
int stride=-1)
const
374 t_extendedFill(data, start, length, tsize,
378 int tsize,
int nrepeats,
int stride=-1)
const
380 t_extendedFill(data, start, length, tsize,
384 int tsize,
int nrepeats,
int stride=-1)
const
386 t_extendedFill(data, start, length, tsize,
390 int tsize,
int nrepeats,
int stride=-1)
const
392 t_extendedFill(data, start, length, tsize,
396 int tsize,
int nrepeats,
int stride=-1)
const
398 t_extendedFill(data, start, length, tsize,
402 int tsize,
int nrepeats,
int stride=-1)
const
404 t_extendedFill(data, start, length, tsize,
408 int tsize,
int nrepeats,
int stride=-1)
const
410 t_extendedFill(data, start, length, tsize,
414 int tsize,
int nrepeats,
int stride=-1)
const
416 t_extendedFill(data, start, length, tsize,
437 virtual void getRange(
exint &lo,
exint &hi,
int tuple_idx=0)
const;
438 virtual void getRange(
fpreal &lo,
fpreal &hi,
int tidx=0)
const;
471 for (
int i = 0,
n = getTupleSize(); i <
n; ++i)
480 return computeMinMax(min, max);
484 int tsize = getTupleSize();
497 {
return size >= (((
int64)1) << 31); }
500 void dumpValues(
const char *msg=NULL)
const;
510 static void *
operator new(
size_t size);
511 static void *
operator new(
size_t size,
void *
p);
512 static void operator delete(
void *
p,
size_t size);
528 const char *attrib_name,
530 const int expected_size) {}
539 , myTupleSize(array.getTupleSize())
542 for (
int j = 0; j < myTupleSize; ++j)
549 : myArray(src.myArray)
550 , myTupleSize(src.myTupleSize)
553 std::copy(src.myMin, src.myMin+myTupleSize, myMin);
554 std::copy(src.myMax, src.myMax+myTupleSize, myMax);
558 if (myMin != myMinBuffer)
567 for (
GT_Size i = range.begin(),
n = range.end(); i <
n; ++i)
569 myArray.import(i, myPos, myTupleSize);
570 for (
int j = 0; j < myTupleSize; ++j)
572 myMin[j] =
SYSmin(myMin[j], myPos[j]);
573 myMax[j] =
SYSmax(myMax[j], myPos[j]);
579 for (
int j = 0; j < myTupleSize; ++j)
581 min[j] =
SYSmin(min[j], myMin[j]);
582 max[j] =
SYSmax(max[j], myMax[j]);
587 for (
int j = 0; j < myTupleSize; ++j)
589 myMin[j] =
SYSmin(myMin[j], src.myMin[j]);
590 myMax[j] =
SYSmax(myMax[j], src.myMax[j]);
596 if (myTupleSize > 16)
631 return size == 0 ? tuple_size :
SYSmin(size, tuple_size);
658 int tuple_size,
int stride)
const
659 { 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); }
677 int tuple_size,
int stride)
const
678 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
680 int tuple_size,
int stride)
const
681 { t_extendedFill(data, start, length, tuple_size, 1, stride); }
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); }
702 { t_extendedFillArray(data, sizes, start, length); }
705 { t_extendedFillArray(data, sizes, start, length); }
709 int tuple_size,
int stride,
712 doExtendedQuantizedFill(data, start, length, tuple_size,
713 1, stride, black, white);
715 virtual void doExtendedQuantizedFill(
uint8 *
data,
717 int tuple_size,
int nrepeats,
int stride,
721 template <
typename T_POD>
735 : myArray(src.myArray)
738 , myStart(src.myStart)
739 , myStride(src.myStride)
744 exint i = range.begin();
745 T_POD *dest = myData + i*myStride;
746 for (; i != range.end(); ++i, dest += myStride)
748 myArray.import(i+myStart, dest, 3);
749 myBox.enlargeBounds(dest[0], dest[1], dest[2]);
754 myBox.enlargeBounds(src.myBox);
768 stride =
SYSmax(stride, 3);
776 stride =
SYSmax(stride, 3);
784 template <
typename T_POD>
void
786 int tsize,
int nrepeats,
int stride)
const;
789 template <
typename T_POD>
void
797 template <
typename T,
int tuplesize>
class VectorPODAccessor
804 array.
get(offset, result.data(), tuplesize);
838 template <
typename T,
int FAKE>
class TypeInfo {};
844 template <
int FAKE>
class TypeInfo<
int32, FAKE>
845 {
public:
typedef I32Accessor Accessors; };
846 template <
int FAKE>
class TypeInfo<
int64, FAKE>
847 {
public:
typedef I64Accessor Accessors; };
848 template <
int FAKE>
class TypeInfo<
fpreal16, FAKE>
849 {
public:
typedef F16Accessor Accessors; };
850 template <
int FAKE>
class TypeInfo<
fpreal32, FAKE>
851 {
public:
typedef F32Accessor Accessors; };
852 template <
int FAKE>
class TypeInfo<
fpreal64, FAKE>
853 {
public:
typedef F64Accessor Accessors; };
855 template <
int FAKE>
class TypeInfo<
UT_Vector3F, FAKE>
856 {
public:
typedef VectorPODAccessor<UT_Vector3F, 3> Accessors; };
857 template <
int FAKE>
class TypeInfo<
UT_Vector3D, FAKE>
858 {
public:
typedef VectorPODAccessor<UT_Vector3D, 3> Accessors; };
859 template <
int FAKE>
class TypeInfo<
UT_Vector4F, FAKE>
860 {
public:
typedef VectorPODAccessor<UT_Vector4F, 4> Accessors; };
861 template <
int FAKE>
class TypeInfo<
UT_Vector4D, FAKE>
862 {
public:
typedef VectorPODAccessor<UT_Vector4D, 4> Accessors; };
863 template <
int FAKE>
class TypeInfo<
UT_Matrix3F, FAKE>
864 {
public:
typedef VectorPODAccessor<UT_Matrix3F, 9> Accessors; };
865 template <
int FAKE>
class TypeInfo<
UT_Matrix3D, FAKE>
866 {
public:
typedef VectorPODAccessor<UT_Matrix3D, 9> Accessors; };
867 template <
int FAKE>
class TypeInfo<
UT_Matrix4F, FAKE>
868 {
public:
typedef VectorPODAccessor<UT_Matrix4F, 16> Accessors; };
869 template <
int FAKE>
class TypeInfo<
UT_Matrix4D, FAKE>
870 {
public:
typedef VectorPODAccessor<UT_Matrix4D, 16> Accessors; };
874 template <
typename T>
T
876 {
return TypeInfo<T, 0>::Accessors::getValue(*
this, index); }
878 template <
typename T>
T
881 return (1-t)*getValue<T>(i0) + t*getValue<T>(i1);
884 template <
typename T>
T
888 T l = (1-
v)*getValue<T>(u0v0) + v*getValue<T>(u0v1);
889 T r = (1-
v)*getValue<T>(u1v0) + v*getValue<T>(u1v1);
890 return (1-u)*l + u*
r;
SYS_HashType hash() const
void fillArray(UT_Array< int32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
vint4 max(const vint4 &a, const vint4 &b)
void fillArray(UT_Array< fpreal16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
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
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.
virtual fpreal16 getF16(GT_Offset offset, int idx=0) const
void fillArray(UT_Array< fpreal32 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
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
FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin())
virtual void fillStringArray(UT_StringArray &data, UT_ValArray< int > &sizes, GT_Offset start, GT_Size length) const
void join(const fillV3BoxTask< T_POD > &src)
GLboolean GLboolean GLboolean GLboolean a
virtual void doFillArray(int16 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
bool enlargeBounds(UT_BoundingBox &b) const
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
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.
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
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.
minMaxTask(const GT_DataArray &array)
virtual void extendedFill(int64 *data, GT_Offset start, GT_Size length, int tsize, int nrepeats, int stride=-1) const
void fillArray(UT_Array< fpreal64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
A reference counter base class for use with UT_IntrusivePtr.
virtual void doFillArray(int64 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
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
virtual bool computeMinMax(fpreal64 *min, fpreal64 *max) 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
void getResult(fpreal64 *min, fpreal64 *max) 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
GLuint GLsizei const GLuint const GLintptr const GLsizeiptr * sizes
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
GLint GLenum GLsizei GLint GLsizei const void * data
fillV3BoxTask(const GT_DataArray &array, T_POD *data, GT_Offset start, int stride)
GLuint GLuint GLsizei GLenum const void * indices
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
GLubyte GLubyte GLubyte GLubyte w
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.
GLuint GLsizei GLsizei * length
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
GLsizei const GLchar *const * strings
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.
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)
void operator()(const UT_BlockedRange< GT_Size > &range)
GLdouble GLdouble GLdouble b
minMaxTask(minMaxTask &src, UT_Split)
void fillArray(int8 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
GLsizei const GLchar *const * string
virtual bool getFA16(UT_ValArray< fpreal16 > &a, GT_Offset offset) const
void fillArray(UT_Array< int8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
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
void fillArray(UT_Array< int16 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
bool getMinMax(fpreal64 *min, fpreal64 *max) const
Enlarge a bounding box with values of this 3-tuple array.
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 void doFillArray(fpreal64 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
GLdouble GLdouble GLdouble r
OIIO_API bool copy(string_view from, string_view to, std::string &err)
void fillArray(uint8 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1, fpreal black=0, fpreal white=1) 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
void fillArray(UT_Array< int64 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length)
vint4 min(const vint4 &a, const vint4 &b)
void fillArray(int64 *data, GT_Offset start, GT_Size length, int tsize, int stride=-1) const
virtual void doFillArray(int32 *data, GT_Offset start, GT_Size length, int tuple_size, int stride) const
void join(const minMaxTask &src)
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)
virtual void doFillArrayAttr(UT_Array< uint8 > &data, UT_Array< int > &sizes, GT_Offset start, GT_Size length) const
Compute the min & max values for an array. This fails for strings.
virtual GT_Size getTotalArrayEntries() const
void UTparallelReduceLightItems(const Range &range, Body &body)