24 #define GCC_PACKED_STRUCT 27 #define GCC_PACKED_STRUCT __attribute__((packed)) 49 #if !defined( MATLAB_MEX_FILE ) 74 typedef size_t mwSize;
77 #define mxGetClassID(x) mxUINT8_CLASS 88 #define TBH_MAGIC_MAXLEN 14 89 #define TBH_PLATFORM_MAXLEN 11 90 #define TBH_COMPRID_MAXLEN 12 91 #define TBH_ENDIAN_MAXLEN 2 123 mxArray *plhs[3] = {0};
127 #if defined( MATLAB_MEX_FILE) 128 if( 0 == mexCallMATLAB( 3, plhs, 0, NULL,
"computer" ) )
130 mxGetString( plhs[0],
TBH_platform, TBH_PLATFORM_MAXLEN );
131 mxGetString( plhs[2],
TBH_endian, TBH_ENDIAN_MAXLEN );
154 const char TBH_MAGIC[TBH_MAGIC_MAXLEN] =
"mkSQLite.tbh\0";
167 char m_magic[TBH_MAGIC_MAXLEN];
170 char m_platform[TBH_PLATFORM_MAXLEN];
180 m_ver = (int16_t)
sizeof( *
this );
181 m_clsid = (int32_t)clsid;
188 return 0 == _strnicmp( m_magic,
TBH_MAGIC, TBH_MAGIC_MAXLEN );
198 case mxLOGICAL_CLASS:
222 return pItem && validClsid( mxGetClassID( pItem ) );
229 return validClsid( (mxClassID)m_clsid );
240 #if defined( MATLAB_MEX_FILE ) 245 size_t data_size = 0;
249 size_t szElement = mxGetElementSize( pItem );
250 size_t cntElements = mxGetNumberOfElements( pItem );
252 data_size = szElement * cntElements;
272 char m_compression[12];
284 strncpy( m_compression, strCompressorType,
sizeof( m_compression ) );
290 return m_compression;
313 template<
typename HeaderBaseType >
314 struct GCC_PACKED_STRUCT
TBHData :
public HeaderBaseType
326 void init( mxClassID clsid, mwSize nDims,
const mwSize* pSize )
328 HeaderBaseType::init( clsid );
329 HeaderBaseType::m_ver =
sizeof( *this );
331 assert( nDims >= 0 );
332 assert( !nDims || pSize );
335 for(
int i = 0; i < (int)nDims; i++ )
337 m_nDims[i+1] = (int32_t)pSize[i];
343 void init(
const mxArray* pItem )
346 mxClassID clsid = mxGetClassID( pItem );
347 mwSize nDims = mxGetNumberOfDimensions( pItem );
348 const mwSize* dimensions = mxGetDimensions( pItem );
350 init( clsid, nDims, dimensions );
362 return sizeof(*this) == (size_t)HeaderBaseType::m_ver;
374 return (
void*)&m_nDims[ nDims + 1 ];
381 return getData( m_nDims[0] );
396 return (
char*)&p->
m_nDims[nDims+1] - (
char*)p;
403 return dataOffset( m_nDims[0] );
423 mwSize nDims = m_nDims[0];
424 mwSize* dimensions =
new mwSize[nDims];
425 mxArray* pItem = NULL;
426 mxClassID clsid = (mxClassID)HeaderBaseType::m_clsid;
428 for(
int i = 0; i < (int)nDims; i++ )
430 dimensions[i] = (mwSize)m_nDims[i+1];
433 pItem = mxCreateNumericArray( nDims, dimensions, clsid, mxREAL );
437 if( pItem && doCopyData )
500 #define TBH_DATA(tbh) ((void*)&tbh->sizeDims[tbh->sizeDims[0]+1]) 501 #define TBH_DATA_OFFSET(nDims) ((ptrdiff_t)&((TypedBLOBHeader*) 0)->sizeDims[nDims+1]) 510 if( (
void*)&tbh1->m_ver == (
void*)&old_struct->
ver 511 && (
void*)&tbh1->m_clsid == (
void*)&old_struct->
clsid 512 && (
void*)&tbh1->m_platform[0] == (
void*)&old_struct->
platform[0]
513 && (
void*)&tbh1->m_endian == (
void*)&old_struct->
endian 526 #undef TBH_DATA_OFFSET const char TBH_MAGIC[]
identify string
int check_compatibility(void)
Checks for valid header size, platform name, endian type and magic (deprecated)
mxArray * createNumericArray(bool doCopyData)
#define TBH_DATA_OFFSET(nDims)
Get offset from header start to hosted data (deprecated)
static char TBH_platform[11]
platform name (i.e. "PCWIN") (deprecated)
int32_t m_nDims[1]
Number of dimensions, followed by sizes of each dimension (BLOB data follows after last dimension siz...
int32_t clsid
Matlab ClassID of variable (see mxClassID)
static const char TBH_MAGIC[]
identifying string (magic) (deprecated)
size_t getDataSize()
Get data size in bytes, returns 0 on error.
TBHData< TypedBLOBHeaderCompressed > TypedBLOBHeaderV2
typed blob header for MATLAB arrays with compression feature
Utilities used in all files.
size_t utils_elbytes(mxClassID classID)
Get the size of one element in bytes.
bool validVer()
Header version checking.
static char TBH_endian[2]
endian used ('L'ittle or 'B'ig) (deprecated)
void init(mxClassID clsid, mwSize nDims, const mwSize *pSize)
Initialization (hides base class init() function)
void typed_blobs_mode_set(int mode)
Set mode of typed blob usage.
char TBH_endian[]
endian (little or big)
size_t dataOffset()
Get header offset to begin of array data (initialized)
char platform[11]
Computer architecture: PCWIN, PCWIN64, GLNX86, GLNXA64, MACI, MACI64, SOL64.
void utils_destroy_array(mxArray *&pmxarr)
Freeing memory allocated by mxCreateNumericMatrix() or mxCreateNumericArray().
char TBH_platform[]
platform name
Template class extending base class uniquely.
int typed_blobs_mode_on()
Get mode of typed blob usage.
void * getData()
get a pointer to array data (initialized)
void init(const mxArray *pItem)
Set class ID and dimension information of an array item.
int16_t ver
Struct size as kind of header version number for later backwards compatibility (may increase only!) ...
char endian
Byte order: 'L'ittle endian or 'B'ig endian.
TBHData< TypedBLOBHeaderBase > TypedBLOBHeaderV1
typed blob header for MATLAB arrays
void * getData(mwSize nDims)
Get pointer to array data (while initializing)
static int typed_blobs_mode
typed blobs are off by default
static size_t dataOffset(mwSize nDims)
Get header offset to begin of array data (while initializing)
void typed_blobs_init()
Initialization.