-
Notifications
You must be signed in to change notification settings - Fork 9
Description
The NDPluginCodec supports scalar arrays of all numeric types: int8,uint8,...,int64,uint64.
In all cases the compresed array will have type byte (which is the same as int8)
For all except int8 and uint8, if client and server have different byte order, then byte order must be switched by either client or server.
Lets assume the server compresses and client decompresses.
Then it should be the client that switches byte order after decompression.
In order to do this the NTNDArray.codec.attribute structure most have fields like:
bool serverByteOrderBigEndian
bool clientByteOrderBigEndian
If these differ than the client must switch byte order
In the C code for blosc there are methods:
int blosc_compress(int clevel, int doshuffle, size_t typesize,
size_t nbytes, const void *src, void *dest,
size_t destsize);
and
BLOSC_EXPORT int blosc_decompress(const void *src, void *dest, size_t destsize);
The doshuffle argument can be one of
#define BLOSC_NOSHUFFLE 0 /* no shuffle */
#define BLOSC_SHUFFLE 1 /* byte-wise shuffle */
#define BLOSC_BITSHUFFLE 2 /* bit-wise shuffle */
I think that BLOSC_SHUFFLE just means switch byte order.
Only compress has an argument to switch byte order.
But we want client to switch the byte order.
There is also a method:
void
shuffle(const size_t bytesoftype, const size_t blocksize,
const uint8_t* _src, const uint8_t* _dest);
The client can call this if byte order needs to be changed.
BUT The Java blosc code does not provide this method.
Thus fir