Beispiel #1
0
void *
EbRecord::GetField(EbUint32 fid)
{
    // check fid
    EB_ASSERT(fid < NumberOfFields());

    DecodeField(fid);
    return _lField[fid]._decodedData;
}
Beispiel #2
0
EbUint32
EbRecord::FieldSize(EbUint32 fid, EbUint32 option)
{
    // check fid
    if (fid >= NumberOfFields()) {
        EB_ASSERT (0 == "EBE_INVALID_FIELD");
    }

    DataDriver *pDriver = _pEbase->_lpDataDriver[fid];
    DecodeField(fid);
    return pDriver->DecodedDataSize(_lField[fid]._decodedData);
}
static uint8_t* DeserializeRec(DecodeState& ds, TxtNode *firstNode, TxtNode *defaultFirstNode, StructMetadata *def)
{
    bool ok = true;
    if (!firstNode)
        return NULL;

    uint8_t *res = AllocArray<uint8_t>(def->size);
    for (int i = 0; i < def->nFields; i++) {
        ok = DecodeField(ds, firstNode, defaultFirstNode, def->fields + i, res);
        if (!ok)
            goto Error;
    }
    return res;
Error:
    FreeStruct(res, def);
    return NULL;
}
static uint8_t* DeserializeRec(DecodeState& ds, TxtNode *firstNode, const StructMetadata *def)
{
    bool ok = true;
    if (!firstNode)
        return NULL;

    uint8_t *res = AllocArray<uint8_t>(def->size);
    const StructMetadata **defPtr = (const StructMetadata**)res;
    *defPtr = def;
    const char *fieldName = def->fieldNames;
    for (int i = 0; i < def->nFields; i++) {
        ok = DecodeField(ds, firstNode, fieldName, def->fields + i, res);
        if (!ok)
            goto Error;
        seqstrings::SkipStr(fieldName);
    }
    return res;
Error:
    FreeStruct(res, def);
    return NULL;
}
Beispiel #5
0
void *
EbRecord::GetFieldAlloc(EbUint32 fid)
{
    // check fid
    EB_ASSERT(fid < NumberOfFields());

    void * newData;
    DataDriver *pDriver = _pEbase->_lpDataDriver[fid];
    if (_lField[fid]._changed == EB_TRUE) {
	// this field is modified, we need to clone the decoded data
	newData = pDriver->CloneDecodedData(_lField[fid]._decodedData);
    } else {
	DecodeField(fid);
	EB_ASSERT(_lField[fid]._decoded == EB_TRUE);

	// this field is now decoded, we simple "steal" the  data.
	newData = _lField[fid]._decodedData;
	_lField[fid]._decodedData = NULL;
	_lField[fid]._decoded = EB_FALSE;
    }

    return newData;
}