23 namespace SOP_RawImportEnums
34 using namespace UT::Literal;
53 using namespace UT::Literal;
74 using namespace UT::Literal;
93 using namespace UT::Literal;
112 using namespace UT::Literal;
113 switch (enum_value) {
131 using namespace UT::Literal;
132 switch (enum_value) {
177 if (tuplesize != src.
tuplesize)
return false;
180 if (bfloat != src.
bfloat)
return false;
181 if (collate != src.
collate)
return false;
182 if (volres != src.
volres)
return false;
183 if (volorder != src.
volorder)
return false;
199 for (
int i = 0; i < list.
entries(); i++)
215 buf.
appendSprintf(
"%s", (list(i).bfloat) ?
"true" :
"false");
217 buf.
appendSprintf(
"%s", (list(i).collate) ?
"true" :
"false");
233 myFile =
"default.raw"_UTsh;
234 raw_myFile =
"default.raw"_UTsh;
236 myPointCountType = 0;
238 myPointCountAttrib =
"pointcount"_UTsh;
252 if (myFile != src.myFile)
return false;
253 if (raw_myFile != src.raw_myFile)
return false;
254 if (myEndian != src.myEndian)
return false;
255 if (myPointCountType != src.myPointCountType)
return false;
256 if (myPointCount != src.myPointCount)
return false;
257 if (myPointCountAttrib != src.myPointCountAttrib)
return false;
258 if (myBlocks != src.myBlocks)
return false;
277 myFile =
"default.raw"_UTsh;
279 graph->
evalOpParm(myFile, nodeidx,
"file", time, 0);
280 raw_myFile =
"default.raw"_UTsh;
285 graph->
evalOpParm(myEndian, nodeidx,
"endian", time, 0);
286 myPointCountType = 0;
288 graph->
evalOpParm(myPointCountType, nodeidx,
"pointcounttype", time, 0);
290 if (
true && ( (
true&&!(((
int64(getPointCountType())!=1)))) ) )
291 graph->
evalOpParm(myPointCount, nodeidx,
"pointcount", time, 0);
292 myPointCountAttrib =
"pointcount"_UTsh;
293 if (
true && ( (
true&&!(((
int64(getPointCountType())!=2)))) ) )
294 graph->
evalOpParm(myPointCountAttrib, nodeidx,
"pointcountattrib", time, 0);
298 graph->
evalOpParm(length, nodeidx,
"blocks", time, 0);
299 if (length < 0) length = 0;
300 myBlocks.setSize(length);
307 auto && _curentry = myBlocks(i);
309 _curentry.name =
""_UTsh;
311 graph->
evalOpParmInst(_curentry.name, nodeidx,
"name#", parmidx, offsets, time, 0, 2-1);
312 _curentry.target = 1;
314 graph->
evalOpParmInst(_curentry.target, nodeidx,
"target#", parmidx, offsets, time, 0, 2-1);
315 _curentry.tuplesize = 1;
317 graph->
evalOpParmInst(_curentry.tuplesize, nodeidx,
"tuplesize#", parmidx, offsets, time, 0, 2-1);
320 graph->
evalOpParmInst(_curentry.type, nodeidx,
"type#", parmidx, offsets, time, 0, 2-1);
321 _curentry.precision = 2;
323 graph->
evalOpParmInst(_curentry.precision, nodeidx,
"precision#", parmidx, offsets, time, 0, 2-1);
324 _curentry.bfloat =
false;
325 if (
true && ( (
true&&!(((_curentry.type!=0))||((_curentry.precision!=1)))) ) )
326 graph->
evalOpParmInst(_curentry.bfloat, nodeidx,
"bfloat#", parmidx, offsets, time, 0, 2-1);
327 _curentry.collate =
false;
329 graph->
evalOpParmInst(_curentry.collate, nodeidx,
"collate#", parmidx, offsets, time, 0, 2-1);
331 if (
true && ( (
true&&!(((_curentry.target!=3))||((_curentry.collate==1)))) ) )
332 graph->
evalOpParmInst(_curentry.volres, nodeidx,
"volres#", parmidx, offsets, time, 0, 2-1);
333 _curentry.volorder = 0;
334 if (
true && ( (
true&&!(((_curentry.target!=3))||((_curentry.collate==1)))) ) )
335 graph->
evalOpParmInst(_curentry.volorder, nodeidx,
"volorder#", parmidx, offsets, time, 0, 2-1);
356 template <
typename T>
363 if (idx.
size() != instance.
size()+1)
368 coerceValue(value, myFile);
371 coerceValue(value, myEndian);
374 coerceValue(value, myPointCountType);
377 coerceValue(value, myPointCount);
380 coerceValue(value, myPointCountAttrib);
384 coerceValue(value, myBlocks.entries());
385 else if (instance[0] < myBlocks.entries())
387 auto && _data = myBlocks(instance[0]);
391 coerceValue(value, _data.name);
394 coerceValue(value, _data.target);
397 coerceValue(value, _data.tuplesize);
400 coerceValue(value, _data.type);
403 coerceValue(value, _data.precision);
406 coerceValue(value, _data.bfloat);
409 coerceValue(value, _data.collate);
412 coerceValue(value, _data.volres);
415 coerceValue(value, _data.volorder);
435 { doGetParmValue(idx, instance, value); }
437 { doGetParmValue(idx, instance, value); }
439 { doGetParmValue(idx, instance, value); }
441 { doGetParmValue(idx, instance, value); }
443 { doGetParmValue(idx, instance, value); }
445 { doGetParmValue(idx, instance, value); }
447 { doGetParmValue(idx, instance, value); }
449 { doGetParmValue(idx, instance, value); }
451 { doGetParmValue(idx, instance, value); }
453 { doGetParmValue(idx, instance, value); }
455 { doGetParmValue(idx, instance, value); }
457 template <
typename T>
464 if (idx.
size() != instance.
size()+1)
469 coerceValue(myFile, ( ( value ) ));
472 coerceValue(myEndian, clampMinValue(0, clampMaxValue(1, value ) ));
475 coerceValue(myPointCountType, clampMinValue(0, clampMaxValue(3, value ) ));
478 coerceValue(myPointCount, clampMinValue(0, ( value ) ));
481 coerceValue(myPointCountAttrib, ( ( value ) ));
487 coerceValue(newsize, value);
488 if (newsize < 0) newsize = 0;
489 myBlocks.setSize(newsize);
495 myBlocks.setSizeIfNeeded(instance[0]+1);
496 auto && _data = myBlocks(instance[0]);
500 coerceValue(_data.name, value);
503 coerceValue(_data.target, value);
506 coerceValue(_data.tuplesize, value);
509 coerceValue(_data.type, value);
512 coerceValue(_data.precision, value);
515 coerceValue(_data.bfloat, value);
518 coerceValue(_data.collate, value);
521 coerceValue(_data.volres, value);
524 coerceValue(_data.volorder, value);
535 { doSetParmValue(idx, instance, value); }
537 { doSetParmValue(idx, instance, value); }
539 { doSetParmValue(idx, instance, value); }
541 { doSetParmValue(idx, instance, value); }
543 { doSetParmValue(idx, instance, value); }
545 { doSetParmValue(idx, instance, value); }
547 { doSetParmValue(idx, instance, value); }
549 { doSetParmValue(idx, instance, value); }
551 { doSetParmValue(idx, instance, value); }
553 { doSetParmValue(idx, instance, value); }
555 { doSetParmValue(idx, instance, value); }
573 if (fieldnum.
size() < 1)
582 return "pointcounttype";
586 return "pointcountattrib";
588 if (fieldnum.
size() == 1)
620 if (fieldnum.
size() < 1)
621 return PARM_UNSUPPORTED;
635 if (fieldnum.
size() == 1)
636 return PARM_MULTIPARM;
659 return PARM_UNSUPPORTED;
662 return PARM_UNSUPPORTED;
698 loadData(is, rampdata);
716 int typelen = colon - data.
buffer();
730 {
int64 iv =
v; UTwrite(os, &iv); }
732 { UTwrite<fpreal64>(os, &
v); }
734 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y()); }
736 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y());
737 UTwrite<fpreal64>(os, &v.
z()); }
739 { UTwrite<fpreal64>(os, &v.
x()); UTwrite<fpreal64>(os, &v.
y());
740 UTwrite<fpreal64>(os, &v.
z()); UTwrite<fpreal64>(os, &v.
w()); }
752 if (s) s->save(ostr);
754 saveData(os, result);
761 ostr << s->getDataTypeToken();
766 saveData(os, result);
770 void save(std::ostream &os)
const
774 saveData(os, myFile);
775 saveData(os, raw_myFile);
776 saveData(os, myEndian);
777 saveData(os, myPointCountType);
778 saveData(os, myPointCount);
779 saveData(os, myPointCountAttrib);
782 UTwrite(os, &length);
785 auto && _curentry = myBlocks(i);
787 saveData(os, _curentry.name);
788 saveData(os, _curentry.target);
789 saveData(os, _curentry.tuplesize);
790 saveData(os, _curentry.type);
791 saveData(os, _curentry.precision);
792 saveData(os, _curentry.bfloat);
793 saveData(os, _curentry.collate);
794 saveData(os, _curentry.volres);
795 saveData(os, _curentry.volorder);
811 loadData(is, myFile);
812 loadData(is, raw_myFile);
813 loadData(is, myEndian);
814 loadData(is, myPointCountType);
815 loadData(is, myPointCount);
816 loadData(is, myPointCountAttrib);
820 myBlocks.setSize(length);
823 auto && _curentry = myBlocks(i);
825 loadData(is, _curentry.name);
826 loadData(is, _curentry.target);
827 loadData(is, _curentry.tuplesize);
828 loadData(is, _curentry.type);
829 loadData(is, _curentry.precision);
830 loadData(is, _curentry.bfloat);
831 loadData(is, _curentry.collate);
832 loadData(is, _curentry.volres);
833 loadData(is, _curentry.volorder);
846 if (!thissop)
return getFile();
848 OP_Utils::evalOpParm(result, thissop,
"file", cookparms.
getCookTime(), 0);
856 if (!thissop)
return raw_getFile();
858 OP_Utils::evalOpParmRaw(result, thissop,
"file", cookparms.
getCookTime(), 0);
866 if (!thissop)
return getEndian();
868 OP_Utils::evalOpParm(result, thissop,
"endian", cookparms.
getCookTime(), 0);
876 if (!thissop)
return getPointCountType();
878 OP_Utils::evalOpParm(result, thissop,
"pointcounttype", cookparms.
getCookTime(), 0);
886 if (!thissop)
return getPointCount();
888 OP_Utils::evalOpParm(result, thissop,
"pointcount", cookparms.
getCookTime(), 0);
896 if (!thissop)
return getPointCountAttrib();
898 OP_Utils::evalOpParm(result, thissop,
"pointcountattrib", cookparms.
getCookTime(), 0);
906 if (!thissop)
return getBlocks().entries();
908 OP_Utils::evalOpParm(result, thissop,
"blocks", cookparms.
getCookTime(), 0);
912 {
return opinstBlocks_name(cookparms, &_idx); }
916 if (!thissop)
return (myBlocks(_idx[0]).
name);
918 _parmidx[1-1] = _idx[1-1] + 1;
921 OP_Utils::evalOpParmInst(result, thissop,
"name#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
925 {
return opinstBlocks_target(cookparms, &_idx); }
929 if (!thissop)
return (myBlocks(_idx[0]).
target);
931 _parmidx[1-1] = _idx[1-1] + 1;
934 OP_Utils::evalOpParmInst(result, thissop,
"target#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
938 {
return opinstBlocks_tuplesize(cookparms, &_idx); }
942 if (!thissop)
return (myBlocks(_idx[0]).tuplesize);
944 _parmidx[1-1] = _idx[1-1] + 1;
947 OP_Utils::evalOpParmInst(result, thissop,
"tuplesize#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
951 {
return opinstBlocks_type(cookparms, &_idx); }
955 if (!thissop)
return (myBlocks(_idx[0]).
type);
957 _parmidx[1-1] = _idx[1-1] + 1;
960 OP_Utils::evalOpParmInst(result, thissop,
"type#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
964 {
return opinstBlocks_precision(cookparms, &_idx); }
968 if (!thissop)
return (myBlocks(_idx[0]).
precision);
970 _parmidx[1-1] = _idx[1-1] + 1;
973 OP_Utils::evalOpParmInst(result, thissop,
"precision#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
977 {
return opinstBlocks_bfloat(cookparms, &_idx); }
981 if (!thissop)
return (myBlocks(_idx[0]).bfloat);
983 _parmidx[1-1] = _idx[1-1] + 1;
986 OP_Utils::evalOpParmInst(result, thissop,
"bfloat#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
990 {
return opinstBlocks_collate(cookparms, &_idx); }
994 if (!thissop)
return (myBlocks(_idx[0]).collate);
996 _parmidx[1-1] = _idx[1-1] + 1;
999 OP_Utils::evalOpParmInst(result, thissop,
"collate#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
1003 {
return opinstBlocks_volres(cookparms, &_idx); }
1007 if (!thissop)
return (myBlocks(_idx[0]).volres);
1009 _parmidx[1-1] = _idx[1-1] + 1;
1012 OP_Utils::evalOpParmInst(result, thissop,
"volres#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
1016 {
return opinstBlocks_volorder(cookparms, &_idx); }
1020 if (!thissop)
return (myBlocks(_idx[0]).volorder);
1022 _parmidx[1-1] = _idx[1-1] + 1;
1025 OP_Utils::evalOpParmInst(result, thissop,
"volorder#", _parmidx, cookparms.
getCookTime(), 0, 2-1);
1034 int64 myPointCountType;
void doGetParmValue(TempIndex idx, TempIndex instance, T &value) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector4D &value) const override
int64 opBlocks_tuplesize(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void saveData(std::ostream &os, PRM_DataItemHandle s)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix4D &value) override
static void saveData(std::ostream &os, int64 v)
bool operator!=(const Blocks &src) const
GLenum GLuint GLenum GLsizei const GLchar * buf
bool operator!=(const SOP_RawImportParms &src) const
static void saveData(std::ostream &os, UT_Matrix2D v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector4D &value) override
static void loadData(UT_IStream &is, UT_Vector3I &v)
SOP_Node * getNode() const
void loadFromOpSubclass(const LoadParms &loadparms) override
PointCountType getPointCountType() const
void copyFrom(const OP_NodeParms *src) override
exint bread(int32 *buffer, exint asize=1)
GT_API const UT_StringHolder time
constexpr SYS_FORCE_INLINE T & y() noexcept
static void loadData(UT_IStream &is, UT_Vector2D &v)
void setPointCount(int64 val)
UT_StringHolder opPointCountAttrib(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector2D &value) const override
const UT_Array< Blocks > & getBlocks() const
UT_String makeQuotedString(char delimiter='\'', bool escape_nonprinting=false) const
const OP_Context & context() const
virtual void evalOpParmRaw(UT_StringHolder &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
constexpr SYS_FORCE_INLINE T & z() noexcept
void getNestParmValue(TempIndex idx, TempIndex instance, exint &value) const override
SYS_FORCE_INLINE const char * buffer() const
GLuint GLsizei GLsizei * length
static void saveData(std::ostream &os, UT_Matrix3D v)
An output stream object that owns its own string buffer storage.
int64 opinstBlocks_type(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
static void loadData(UT_IStream &is, UT_Vector4D &v)
bool operator==(const SOP_RawImportParms &src) const
static void loadData(UT_IStream &is, int64 &v)
**But if you need a result
UT_Vector3T< int64 > UT_Vector3I
void buildFromOp(const OP_GraphProxy *graph, exint nodeidx, fpreal time, DEP_MicroNode *depnode)
static void loadData(UT_IStream &is, UT_Matrix2D &v)
UT_Vector3I opinstBlocks_volres(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
int64 opinstBlocks_target(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
exint getNestNumParms(TempIndex idx) const override
static PRM_DataItemHandle parseBinary(const char *type, UT_IStream &is)
bool isParmColorRamp(exint idx) const override
const UT_WorkBuffer & str()
Returns a read-only reference to the underlying UT_WorkBuffer.
PointCountType opPointCountType(const SOP_NodeVerb::CookParms &cookparms) const
int64 opinstBlocks_tuplesize(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
void setFile(const UT_StringHolder &val)
constexpr SYS_FORCE_INLINE T & x() noexcept
void setPointCountType(PointCountType val)
static void loadData(UT_IStream &is, UT_Vector2I &v)
static void loadData(UT_IStream &is, UT_Vector4I &v)
GLuint GLsizei const GLuint const GLintptr * offsets
constexpr SYS_FORCE_INLINE T & x() noexcept
const char * getNestParmName(TempIndex fieldnum) const override
bool operator==(const BaseDimensions< T > &a, const BaseDimensions< Y > &b)
UT_StringHolder opFile(const SOP_NodeVerb::CookParms &cookparms) const
static void loadData(UT_IStream &is, bool &v)
int64 opinstBlocks_precision(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opinstBlocks_bfloat(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
UT_StringHolder createString(const UT_Array< Blocks > &list) const
void setNestParmValue(TempIndex idx, TempIndex instance, const exint &value) override
void setBlocks(const UT_Array< Blocks > &val)
void setEndian(Endian val)
static void loadData(UT_IStream &is, UT_StringHolder &v)
const UT_StringHolder & getFile() const
void setPointCountAttrib(const UT_StringHolder &val)
bool opBlocks_collate(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
SYS_FORCE_INLINE const char * buffer() const
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
bool opinstBlocks_collate(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
constexpr SYS_FORCE_INLINE T & z() noexcept
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_SharedPtr< UT_Ramp > &value) override
exint read(bool *array, exint sz=1)
const OP_GraphProxy * graph() const
void doSetParmValue(TempIndex idx, TempIndex instance, const T &value)
ParmType getNestParmType(TempIndex fieldnum) const override
int64 opBlocks_volorder(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
static void loadData(UT_IStream &is, UT_Vector3D &v)
int64 opPointCount(const SOP_NodeVerb::CookParms &cookparms) const
const UT_StringHolder & getPointCountAttrib() const
UT_StringHolder opinstBlocks_name(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
bool opBlocks_bfloat(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
virtual void evalOpParmInst(int64 &v, NodeIdx node, const char *parmname, const int *inst, const int *offsets, fpreal time, DEP_MicroNode *depnode, int nestlevel=1) const =0
void getNestParmValue(TempIndex idx, TempIndex instance, UT_SharedPtr< UT_Ramp > &value) const override
exint opBlocks(const SOP_NodeVerb::CookParms &cookparms) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix4D &value) const override
static void loadData(UT_IStream &is, UT_SharedPtr< UT_Ramp > &v)
int64 opBlocks_type(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
GLuint const GLchar * name
static void loadData(UT_IStream &is, UT_Matrix3D &v)
void getNestParmValue(TempIndex idx, TempIndex instance, PRM_DataItemHandle &value) const override
virtual void evalOpParm(int64 &v, NodeIdx node, const char *parmname, fpreal time, DEP_MicroNode *depnode) const =0
UT_Vector3I opBlocks_volres(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void raw_setFile(const UT_StringHolder &val)
SYS_FORCE_INLINE void strcat(const char *src)
static void saveData(std::ostream &os, bool v)
UT_StringHolder opBlocks_name(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void saveBinary(std::ostream &os) const
Save string to binary stream.
bool operator==(const Blocks &src) const
GT_API const UT_StringHolder version
GLenum GLint GLint * precision
exint entries() const
Alias of size(). size() is preferred.
int64 opBlocks_target(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
int int appendSprintf(const char *fmt,...) SYS_PRINTF_CHECK_ATTRIBUTE(2
int64 opBlocks_precision(const SOP_NodeVerb::CookParms &cookparms, int _idx) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Vector3D &value) const override
bool load(UT_IStream &is)
DEP_MicroNode * depnode() const
static void saveData(std::ostream &os, UT_Matrix4D v)
LeafData & operator=(const LeafData &)=delete
Utility class for containing a color ramp.
void getNestParmValue(TempIndex idx, TempIndex instance, UT_StringHolder &value) const override
SYS_FORCE_INLINE UT_StringHolder getToken(Endian enum_value)
int64 getPointCount() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector3D &value) override
static void saveData(std::ostream &os, UT_Vector3D v)
constexpr SYS_FORCE_INLINE T & w() noexcept
SYS_FORCE_INLINE void append(char character)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix2D &value) override
int64 opinstBlocks_volorder(const SOP_NodeVerb::CookParms &cookparms, const int *_idx) const
fpreal getCookTime() const
static void loadData(UT_IStream &is, fpreal64 &v)
const UT_StringHolder & raw_getFile() const
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Vector2D &value) override
static void saveData(std::ostream &os, UT_Vector4D v)
const char * findChar(int c) const
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix3D &value) const override
void getNestParmValue(TempIndex idx, TempIndex instance, UT_Matrix2D &value) const override
constexpr SYS_FORCE_INLINE T & y() noexcept
void getNestParmValue(TempIndex idx, TempIndex instance, fpreal &value) const override
static void saveData(std::ostream &os, UT_SharedPtr< UT_Ramp > s)
static void loadData(UT_IStream &is, UT_Matrix4D &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_Matrix3D &value) override
static void loadData(UT_IStream &is, PRM_DataItemHandle &v)
void setNestParmValue(TempIndex idx, TempIndex instance, const fpreal &value) override
UT_SharedPtr< const PRM_DataItem > PRM_DataItemHandle
void setNestParmValue(TempIndex idx, TempIndex instance, const UT_StringHolder &value) override
constexpr SYS_FORCE_INLINE T & y() noexcept
void save(std::ostream &os) const
void setNestParmValue(TempIndex idx, TempIndex instance, const PRM_DataItemHandle &value) override
SYS_FORCE_INLINE bool isstring() const
static void saveData(std::ostream &os, UT_StringHolder s)
UT_StringHolder raw_opFile(const SOP_NodeVerb::CookParms &cookparms) const
Endian opEndian(const SOP_NodeVerb::CookParms &cookparms) const
SYS_FORCE_INLINE void strncpy(const char *src, exint maxlen)
static void saveData(std::ostream &os, fpreal64 v)
static void saveData(std::ostream &os, UT_Vector2D v)
constexpr SYS_FORCE_INLINE T & x() noexcept