123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- #ifndef cmDspValue_h
- #define cmDspValue_h
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- typedef unsigned cmDsvRC_t;
-
- enum
- {
- kOkDsvRC = cmOkRC,
- kNotMtxDsvRC,
- kRetTooSmallDsvRC,
- kUnknownTypeDsvRC,
- kJsonDeserialFailDsvRC,
- kConstViolationDsvRC
- };
-
- enum
- {
- kNullDsvFl = 0x00000000,
- kBoolDsvFl = 0x00000001,
- kCharDsvFl = 0x00000002,
- kUCharDsvFl = 0x00000004,
- kShortDsvFl = 0x00000008,
- kUShortDsvFl = 0x00000010,
- kLongDsvFl = 0x00000020,
- kULongDsvFl = 0x00000040,
- kIntDsvFl = 0x00000080,
- kUIntDsvFl = 0x00000100,
- kFloatDsvFl = 0x00000200,
- kDoubleDsvFl = 0x00000400,
- kSampleDsvFl = 0x00000800,
- kRealDsvFl = 0x00001000,
- kPtrDsvFl = 0x00002000,
- kStrzDsvFl = 0x00004000,
- kSymDsvFl = 0x00008000,
- kJsonDsvFl = 0x00010000,
- kMtxDsvFl = 0x00020000,
- kTypeDsvMask = 0x0003ffff,
- kProxyDsvFl = 0x00040000,
-
- // Auxilliary Flags
- kInDsvFl = 0x00100000, // parameter which is input to the instance (represented by an input port)
- kOutDsvFl = 0x00200000, // output value (represented by an output port)
- kReqArgDsvFl = 0x00400000, // marks DSP variables which are must be given initial values in cmDspInstAllocate() va_list argument.
- kOptArgDsvFl = 0x00800000, // marks DSP variables which may optionally be given initial values
- kNoArgDsvFl = 0x01000000, // marks DSP variable which may NOT be initialized from in cmDspInstAllocate() va_list argument.
- kAudioBufDsvFl = 0x02000000, // marks DSP variables which represent audio input or outputs
- kUiDsvFl = 0x04000000, // marks DSP variables whose values should be echoed to the UI
- kDynDsvFl = 0x08000000, // Set if the value was dynamically allocated
- kConstDsvFl = 0x10000000, // Set if this value is const.
- kDfltSetDsvFl = 0x20000000, // Set if the default variable in a DSP instance variable has a valid value.
- kSendDfltDsvFl = 0x40000000 // By default default values are not transmitted - setting this flag causes the default values to be sent.
- };
-
- typedef struct
- {
- unsigned rn;
- unsigned cn;
-
- union
- {
- bool* bp;
- char* cp;
- unsigned char* ucp;
- short* sp;
- unsigned short* usp;
- long* lp;
- unsigned long* ulp;
- int* ip;
- unsigned* up;
- float* fp;
- double* dp;
- cmSample_t* ap;
- cmReal_t* rp;
- cmJsonNode_t** jp;
- cmChar_t** zp;
- const cmChar_t** czp;
- void* vp;
- } u;
-
- } cmDspMtx_t;
-
- typedef struct cmDspValue_str
- {
- unsigned flags;
-
- union
- {
- bool b;
- char c;
- unsigned char uc;
- short s;
- unsigned short us;
- long l;
- unsigned long ul;
- int i;
- unsigned u;
- float f;
- double d;
- cmSample_t a;
- cmReal_t r;
- cmJsonNode_t* j;
- cmChar_t* z;
- const cmChar_t* cz;
- cmDspMtx_t m;
- struct cmDspValue_str* vp;
- } u;
-
- } cmDspValue_t;
-
- extern cmDspValue_t cmDspNullValue;
-
- bool cmDsvIsNull( const cmDspValue_t* vp );
- bool cmDsvIsBool( const cmDspValue_t* vp );
- bool cmDsvIsChar( const cmDspValue_t* vp );
- bool cmDsvIsUChar( const cmDspValue_t* vp );
- bool cmDsvIsShort( const cmDspValue_t* vp );
- bool cmDsvIsUShort( const cmDspValue_t* vp );
- bool cmDsvIsLong( const cmDspValue_t* vp );
- bool cmDsvIsULong( const cmDspValue_t* vp );
- bool cmDsvIsInt( const cmDspValue_t* vp );
- bool cmDsvIsUInt( const cmDspValue_t* vp );
- bool cmDsvIsFloat( const cmDspValue_t* vp );
- bool cmDsvIsDouble( const cmDspValue_t* vp );
- bool cmDsvIsSample( const cmDspValue_t* vp );
- bool cmDsvIsReal( const cmDspValue_t* vp );
- bool cmDsvIsStrz( const cmDspValue_t* vp );
- bool cmDsvIsSymbol( const cmDspValue_t* vp );
- bool cmDsvIsJson( const cmDspValue_t* vp );
- bool cmDsvIsBoolMtx( const cmDspValue_t* vp );
- bool cmDsvIsCharMtx( const cmDspValue_t* vp );
- bool cmDsvIsUCharMtx( const cmDspValue_t* vp );
- bool cmDsvIsShortMtx( const cmDspValue_t* vp );
- bool cmDsvIsUShortMtx( const cmDspValue_t* vp );
- bool cmDsvIsLongMtx( const cmDspValue_t* vp );
- bool cmDsvIsULongMtx( const cmDspValue_t* vp );
- bool cmDsvIsIntMtx( const cmDspValue_t* vp );
- bool cmDsvIsUIntMtx( const cmDspValue_t* vp );
- bool cmDsvIsFloatMtx( const cmDspValue_t* vp );
- bool cmDsvIsDoubleMtx( const cmDspValue_t* vp );
- bool cmDsvIsSampleMtx( const cmDspValue_t* vp );
- bool cmDsvIsRealMtx( const cmDspValue_t* vp );
- bool cmDsvIsJsonMtx( const cmDspValue_t* vp );
- bool cmDsvIsStrzMtx( const cmDspValue_t* vp );
-
- // Set scalar types from a va_list. Returns false if 'flags' does not
- // identify a scalar type. Note that this function cannot convert
- // scalar JSON nodes but can accept scalar Strz's.
- bool cmDsvSetFromValist( cmDspValue_t* vp, unsigned flags, va_list vl );
-
- // Return true if the source type can be converted to the dest type.
- bool cmDsvCanConvertFlags( unsigned destFlags, unsigned srcFlags );
-
- // Return true if svp can be assigned to dvp.
- bool cmDsvCanConvert( const cmDspValue_t* dvp, const cmDspValue_t* svp );
-
- // WARNING: All of the setter functions clear all existing flags
- // in the target cmDspValue_t object and then set the type flags
- // associated with the RHS value. This means that any auxilliary
- // flags will be cleared and therefore must be reset by the calling
- // function if they are to be preserved past the call to the setter.
-
- // Assign a scalar value to the cmDspValue_t and setup the type information.
- void cmDsvSetNull( cmDspValue_t* vp );
- void cmDsvSetBool( cmDspValue_t* vp, bool v );
- void cmDsvSetChar( cmDspValue_t* vp, char v );
- void cmDsvSetUChar( cmDspValue_t* vp, unsigned char v );
- void cmDsvSetShort( cmDspValue_t* vp, short v );
- void cmDsvSetUShort( cmDspValue_t* vp, unsigned short v );
- void cmDsvSetLong( cmDspValue_t* vp, long v );
- void cmDsvSetULong( cmDspValue_t* vp, unsigned long v );
- void cmDsvSetInt( cmDspValue_t* vp, int v );
- void cmDsvSetUInt( cmDspValue_t* vp, unsigned int v );
- void cmDsvSetFloat( cmDspValue_t* vp, float v );
- void cmDsvSetDouble( cmDspValue_t* vp, double v );
- void cmDsvSetSample( cmDspValue_t* vp, cmSample_t v );
- void cmDsvSetReal( cmDspValue_t* vp, cmReal_t v );
- void cmDsvSetPtr( cmDspValue_t* vp, void* v );
- void cmDsvSetSymbol( cmDspValue_t* vp, unsigned int v );
- void cmDsvSetStrz( cmDspValue_t* vp, cmChar_t* v );
- void cmDsvSetStrcz( cmDspValue_t* vp, const cmChar_t* v );
- void cmDsvSetJson( cmDspValue_t* vp, cmJsonNode_t* v);
-
-
- // Assign a matrix to the cmDspValue_t.
- void cmDsvSetBoolMtx( cmDspValue_t* vp, bool* v, unsigned rn, unsigned cn );
- void cmDsvSetCharMtx( cmDspValue_t* vp, char* v, unsigned rn, unsigned cn );
- void cmDsvSetUCharMtx( cmDspValue_t* vp, unsigned char* v, unsigned rn, unsigned cn );
- void cmDsvSetShortMtx( cmDspValue_t* vp, short* v, unsigned rn, unsigned cn );
- void cmDsvSetUShortMtx( cmDspValue_t* vp, unsigned short* v, unsigned rn, unsigned cn );
- void cmDsvSetLongMtx( cmDspValue_t* vp, long* v, unsigned rn, unsigned cn );
- void cmDsvSetULongMtx( cmDspValue_t* vp, unsigned long* v, unsigned rn, unsigned cn );
- void cmDsvSetIntMtx( cmDspValue_t* vp, int* v, unsigned rn, unsigned cn );
- void cmDsvSetUIntMtx( cmDspValue_t* vp, unsigned int* v, unsigned rn, unsigned cn );
- void cmDsvSetFloatMtx( cmDspValue_t* vp, float* v, unsigned rn, unsigned cn );
- void cmDsvSetDoubleMtx( cmDspValue_t* vp, double* v, unsigned rn, unsigned cn );
- void cmDsvSetSampleMtx( cmDspValue_t* vp, cmSample_t* v, unsigned rn, unsigned cn );
- void cmDsvSetRealMtx( cmDspValue_t* vp, cmReal_t* v, unsigned rn, unsigned cn );
- void cmDsvSetJsonMtx( cmDspValue_t* vp, cmJsonNode_t** v, unsigned rn, unsigned cn );
- void cmDsvSetStrzMtx( cmDspValue_t* vp, cmChar_t** v, unsigned rn, unsigned cn );
- void cmDsvSetStrczMtx( cmDspValue_t* vp, const cmChar_t** v, unsigned rn, unsigned cn );
- void cmDsvSetMtx( cmDspValue_t* vp, unsigned flags, void* v, unsigned rn, unsigned cn );
- void cmDsvSetProxy( cmDspValue_t* vp, cmDspValue_t* pp );
-
- // Get the value of a char cmDspValue_t.
- // Returns 0 if the cmDspValue_t does not exactly match the return type.
- bool cmDsvBool( const cmDspValue_t* vp );
- char cmDsvChar( const cmDspValue_t* vp );
- unsigned char cmDsvUChar( const cmDspValue_t* vp );
- short cmDsvShort( const cmDspValue_t* vp );
- unsigned short cmDsvUShort( const cmDspValue_t* vp );
- long cmDsvLong( const cmDspValue_t* vp );
- unsigned long cmDsvULong( const cmDspValue_t* vp );
- int cmDsvInt( const cmDspValue_t* vp );
- unsigned int cmDsvUInt( const cmDspValue_t* vp );
- float cmDsvFloat( const cmDspValue_t* vp );
- double cmDsvDouble( const cmDspValue_t* vp );
- cmSample_t cmDsvSample( const cmDspValue_t* vp );
- cmReal_t cmDsvReal( const cmDspValue_t* vp );
- void* cmDsvPtr( const cmDspValue_t* vp );
- unsigned int cmDsvSymbol( const cmDspValue_t* vp );
- cmChar_t* cmDsvStrz( const cmDspValue_t* vp );
- const cmChar_t*cmDsvStrcz( const cmDspValue_t* vp );
- cmJsonNode_t* cmDsvJson( const cmDspValue_t* vp );
-
- const cmDspValue_t* cmDsvValueCPtr( const cmDspValue_t* vp );
- cmDspValue_t* cmDsvValuePtr( cmDspValue_t* vp );
-
- // Return a pointer to the base of a matrix.
- // Returns NULL if the cmDspValue_t is does not exactly match the return type.
- const bool* cmDsvBoolCMtx( const cmDspValue_t* vp );
- const char* cmDsvCharCMtx( const cmDspValue_t* vp );
- const unsigned char* cmDsvUCharCMtx( const cmDspValue_t* vp );
- const short* cmDsvShortCMtx( const cmDspValue_t* vp );
- const unsigned short* cmDsvUShortCMtx( const cmDspValue_t* vp );
- const long* cmDsvLongCMtx( const cmDspValue_t* vp );
- const unsigned long* cmDsvULongCMtx( const cmDspValue_t* vp );
- const int* cmDsvIntCMtx( const cmDspValue_t* vp );
- const unsigned int* cmDsvUIntCMtx( const cmDspValue_t* vp );
- const float* cmDsvFloatCMtx( const cmDspValue_t* vp );
- const double* cmDsvDoubleCMtx( const cmDspValue_t* vp );
- const cmSample_t* cmDsvSampleCMtx( const cmDspValue_t* vp );
- const cmReal_t* cmDsvRealCMtx( const cmDspValue_t* vp );
- const cmChar_t** cmDsvStrzCMtx( const cmDspValue_t* vp );
- const cmChar_t** cmDsvStrczCMtx( const cmDspValue_t* vp );
-
-
- bool* cmDsvBoolMtx( cmDspValue_t* vp );
- char* cmDsvCharMtx( cmDspValue_t* vp );
- unsigned char* cmDsvUCharMtx( cmDspValue_t* vp );
- short* cmDsvShortMtx( cmDspValue_t* vp );
- unsigned short* cmDsvUShortMtx( cmDspValue_t* vp );
- long* cmDsvLongMtx( cmDspValue_t* vp );
- unsigned long* cmDsvULongMtx( cmDspValue_t* vp );
- int* cmDsvIntMtx( cmDspValue_t* vp );
- unsigned int* cmDsvUIntMtx( cmDspValue_t* vp );
- float* cmDsvFloatMtx( cmDspValue_t* vp );
- double* cmDsvDoubleMtx( cmDspValue_t* vp );
- cmSample_t* cmDsvSampleMtx( cmDspValue_t* vp );
- cmReal_t* cmDsvRealMtx( cmDspValue_t* vp );
- cmJsonNode_t** cmDsvJsonMtx( cmDspValue_t* vp );
- cmChar_t** cmDsvStrzMtx( cmDspValue_t* vp );
- const cmChar_t**cmDsvStrczMtx( cmDspValue_t* vp );
-
- // Get the value of a cmDspValue_t.
- // Conversion is performed if the return type does not exactly match the cmDspValue_t type.
- bool cmDsvGetBool( const cmDspValue_t* vp );
- char cmDsvGetChar( const cmDspValue_t* vp );
- unsigned char cmDsvGetUChar( const cmDspValue_t* vp );
- short cmDsvGetShort( const cmDspValue_t* vp );
- unsigned short cmDsvGetUShort( const cmDspValue_t* vp );
- long cmDsvGetLong( const cmDspValue_t* vp );
- unsigned long cmDsvGetULong( const cmDspValue_t* vp );
- int cmDsvGetInt( const cmDspValue_t* vp );
- unsigned int cmDsvGetUInt( const cmDspValue_t* vp );
- float cmDsvGetFloat( const cmDspValue_t* vp );
- double cmDsvGetDouble( const cmDspValue_t* vp );
- cmSample_t cmDsvGetSample( const cmDspValue_t* vp );
- cmReal_t cmDsvGetReal( const cmDspValue_t* vp );
- void* cmDsvGetPtr( const cmDspValue_t* vp );
- unsigned cmDsvGetSymbol( const cmDspValue_t* vp );
- cmChar_t* cmDsvGetStrz( const cmDspValue_t* vp );
- const cmChar_t*cmDsvGetStrcz( const cmDspValue_t* vp );
- cmJsonNode_t* cmDsvGetJson( const cmDspValue_t* vp );
-
- cmDsvRC_t cmDsvGetBoolMtx( cmDspValue_t* vp, bool* v, unsigned vn );
- cmDsvRC_t cmDsvGetCharMtx( cmDspValue_t* vp, char* v, unsigned vn );
- cmDsvRC_t cmDsvGetUCharMtx( cmDspValue_t* vp, unsigned char* v, unsigned vn );
- cmDsvRC_t cmDsvGetShortMtx( cmDspValue_t* vp, short* v, unsigned vn );
- cmDsvRC_t cmDsvGetUShortMtx( cmDspValue_t* vp, unsigned short* v, unsigned vn );
- cmDsvRC_t cmDsvGetLongMtx( cmDspValue_t* vp, long* v, unsigned vn );
- cmDsvRC_t cmDsvGetULongMtx( cmDspValue_t* vp, unsigned long* v, unsigned vn );
- cmDsvRC_t cmDsvGetIntMtx( cmDspValue_t* vp, int* v, unsigned vn );
- cmDsvRC_t cmDsvGetUIntMtx( cmDspValue_t* vp, unsigned int* v, unsigned vn );
- cmDsvRC_t cmDsvGetFloatMtx( cmDspValue_t* vp, float* v, unsigned vn );
- cmDsvRC_t cmDsvGetDoubleMtx( cmDspValue_t* vp, double* v, unsigned vn );
- cmDsvRC_t cmDsvGetSampleMtx( cmDspValue_t* vp, cmSample_t* v, unsigned vn );
- cmDsvRC_t cmDsvGetRealMtx( cmDspValue_t* vp, cmReal_t* v, unsigned vn );
- cmDsvRC_t cmDsvGetStrzMtx( cmDspValue_t* vp, cmChar_t* v, unsigned vn );
-
- bool cmDsvIsType( const cmDspValue_t* vp, unsigned flags );
- bool cmDsvIsMtx( const cmDspValue_t* vp );
- unsigned cmDsvEleCount( const cmDspValue_t* vp );
- unsigned cmDsvRows( const cmDspValue_t* vp );
- unsigned cmDsvCols( const cmDspValue_t* vp );
-
- // Basic type flag with kMtxDsvFl and any other flags cleared.
- unsigned cmDsvBasicType( const cmDspValue_t* vp );
-
- // Size of each data element in bytes.
- unsigned cmDsvEleByteCount( const cmDspValue_t* vp );
-
- // Count of data bytes given a matrix size. Note that 'rn' and 'cn' are
- // not used if the kMtxDsvFl is not set in flags.
- unsigned cmDsvByteCount( unsigned flags, unsigned rn, unsigned cn );
-
- // Return the number of bytes required to serialize the value.
- unsigned cmDsvSerialByteCount( const cmDspValue_t* vp );
-
- // Returns the number of bytes required to serialize the data alone not including
- // the cmDspValue_t record. This is just cmDsvSerialByteCount(vp) - sizeof(cmDspValue_t)
- unsigned cmDsvSerialDataByteCount( const cmDspValue_t* vp );
-
- cmDsvRC_t cmDsvSerialize( const cmDspValue_t* vp, void* buf, unsigned bufByteCnt );
- cmDsvRC_t cmDsvDeserializeInPlace( cmDspValue_t* vp, unsigned dataBufByteCnt );
- cmDsvRC_t cmDsvDeserializeJson( cmDspValue_t* vp, cmJsonH_t jsH );
-
- void cmDsvPrint( const cmDspValue_t* vp, const cmChar_t* label, cmRpt_t* rpt );
-
- #define cmDsvCopy( d, s ) (*(d)) = (*(s))
-
- #ifdef __cplusplus
- }
- #endif
-
-
- #endif
|