diff options
Diffstat (limited to 'matlab/src/IceMatlab/InputStream.cpp')
-rw-r--r-- | matlab/src/IceMatlab/InputStream.cpp | 224 |
1 files changed, 13 insertions, 211 deletions
diff --git a/matlab/src/IceMatlab/InputStream.cpp b/matlab/src/IceMatlab/InputStream.cpp index 83c7173bcc5..afbc2d147a4 100644 --- a/matlab/src/IceMatlab/InputStream.cpp +++ b/matlab/src/IceMatlab/InputStream.cpp @@ -15,7 +15,7 @@ #include "InputStream.h" #include "Util.h" -#define SELF (reinterpret_cast<IceMatlab::InputStreamData*>(self)) +#define SELF (reinterpret_cast<InputStreamData*>(self)) using namespace std; using namespace IceMatlab; @@ -23,6 +23,12 @@ using namespace IceMatlab; namespace { +struct InputStreamData +{ + std::vector<Ice::Byte> data; + Ice::InputStream* in; +}; + template<typename T> mxArray* readSeq(Ice::InputStream* in, mxClassID cls) @@ -46,51 +52,6 @@ readSeq(Ice::InputStream* in, mxClassID cls) return 0; } -template<typename T> -mxArray* -readOpt(Ice::InputStream* in, int tag, mxClassID cls) -{ - try - { - Ice::optional<T> opt; - in->read(tag, opt); - if(opt.has_value()) - { - mxArray* r = mxCreateUninitNumericMatrix(1, 1, cls, mxREAL); - *(reinterpret_cast<T*>(mxGetData(r))) = opt.value(); - return createResultValue(r); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - -template<typename T> -mxArray* -readSeqOpt(Ice::InputStream* in, int tag, mxClassID cls) -{ - try - { - Ice::optional<pair<const T*, const T*>> opt; - in->read(tag, opt); - const size_t sz = opt.value().second - opt.value().first; - if(opt.has_value() && sz > 0) - { - mxArray* r = mxCreateUninitNumericMatrix(1, sz / sizeof(T), cls, mxREAL); - memcpy(reinterpret_cast<T*>(mxGetData(r)), opt.value().first, sz); - return createResultValue(r); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - } void* @@ -153,47 +114,6 @@ Ice_InputStream_readBoolSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readBoolOpt(void* self, int tag) -{ - try - { - Ice::optional<bool> opt; - SELF->in->read(tag, opt); - if(opt.has_value()) - { - return createResultValue(mxCreateLogicalScalar(opt.value())); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readBoolSeqOpt(void* self, int tag) -{ - try - { - Ice::optional<pair<const bool*, const bool*>> opt; - SELF->in->read(tag, opt); - const size_t sz = opt.value().second - opt.value().first; - if(opt.has_value() && sz > 0) - { - mxArray* r = mxCreateLogicalMatrix(1, sz); - memcpy(mxGetLogicals(r), opt.value().first, sz); - return createResultValue(r); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readByte(void* self, unsigned char* v) { try @@ -216,18 +136,6 @@ Ice_InputStream_readByteSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readByteOpt(void* self, int tag) -{ - return readOpt<Ice::Byte>(SELF->in, tag, mxUINT8_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readByteSeqOpt(void* self, int tag) -{ - return readSeqOpt<Ice::Byte>(SELF->in, tag, mxUINT8_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readShort(void* self, short* v) { try @@ -248,18 +156,6 @@ Ice_InputStream_readShortSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readShortOpt(void* self, int tag) -{ - return readOpt<short>(SELF->in, tag, mxINT16_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readShortSeqOpt(void* self, int tag) -{ - return readSeqOpt<short>(SELF->in, tag, mxINT16_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readInt(void* self, int* v) { try @@ -280,18 +176,6 @@ Ice_InputStream_readIntSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readIntOpt(void* self, int tag) -{ - return readOpt<int>(SELF->in, tag, mxINT32_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readIntSeqOpt(void* self, int tag) -{ - return readSeqOpt<int>(SELF->in, tag, mxINT32_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readLong(void* self, long long* v) { try @@ -312,18 +196,6 @@ Ice_InputStream_readLongSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readLongOpt(void* self, int tag) -{ - return readOpt<long long>(SELF->in, tag, mxINT64_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readLongSeqOpt(void* self, int tag) -{ - return readSeqOpt<long long>(SELF->in, tag, mxINT64_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readFloat(void* self, float* v) { try @@ -344,18 +216,6 @@ Ice_InputStream_readFloatSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readFloatOpt(void* self, int tag) -{ - return readOpt<float>(SELF->in, tag, mxSINGLE_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readFloatSeqOpt(void* self, int tag) -{ - return readSeqOpt<float>(SELF->in, tag, mxSINGLE_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readDouble(void* self, double* v) { try @@ -376,18 +236,6 @@ Ice_InputStream_readDoubleSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readDoubleOpt(void* self, int tag) -{ - return readOpt<double>(SELF->in, tag, mxDOUBLE_CLASS); -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readDoubleSeqOpt(void* self, int tag) -{ - return readSeqOpt<double>(SELF->in, tag, mxDOUBLE_CLASS); -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_readString(void* self) { string s; @@ -419,43 +267,6 @@ Ice_InputStream_readStringSeq(void* self) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readStringOpt(void* self, int tag) -{ - try - { - Ice::optional<string> opt; - SELF->in->read(tag, opt); - if(opt.has_value()) - { - return createResultValue(createStringFromUTF8(opt.value())); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - -EXPORTED_FUNCTION mxArray* -Ice_InputStream_readStringSeqOpt(void* self, int tag) -{ - try - { - if(SELF->in->readOptional(tag, Ice::OptionalFormat::FSize)) - { - SELF->in->skip(4); - return Ice_InputStream_readStringSeq(self); - } - } - catch(const std::exception& ex) - { - return createResultException(convertException(ex)); - } - return 0; -} - -EXPORTED_FUNCTION mxArray* Ice_InputStream_skip(void* self, int n) { try @@ -535,20 +346,11 @@ Ice_InputStream_readProxy(void* self, void** r) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readProxyOpt(void* self, int tag, void** r) +Ice_InputStream_readEnum(void* self, int maxValue, int* r) { try { - Ice::optional<shared_ptr<Ice::ObjectPrx>> opt; - SELF->in->readAll({tag}, opt); - if(opt.has_value()) - { - *r = new shared_ptr<Ice::ObjectPrx>(opt.value()); - } - else - { - *r = 0; - } + *r = SELF->in->readEnum(maxValue); } catch(const std::exception& ex) { @@ -558,11 +360,11 @@ Ice_InputStream_readProxyOpt(void* self, int tag, void** r) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_readEnum(void* self, int maxValue, int* r) +Ice_InputStream_pos(void* self, unsigned int* pos) { try { - *r = SELF->in->readEnum(maxValue); + *pos = SELF->in->pos(); } catch(const std::exception& ex) { @@ -572,11 +374,11 @@ Ice_InputStream_readEnum(void* self, int maxValue, int* r) } EXPORTED_FUNCTION mxArray* -Ice_InputStream_pos(void* self, unsigned int* pos) +Ice_InputStream_setPos(void* self, unsigned int pos) { try { - *pos = SELF->in->pos(); + SELF->in->pos(pos); } catch(const std::exception& ex) { |