mama_status mamaFieldCache_updateCacheFromMsgField(mamaFieldCache fieldCache, const mamaMsgField messageField) { mama_status ret; mama_fid_t fid; mamaFieldType type = MAMA_FIELD_TYPE_UNKNOWN; const char* name = NULL; mamaFieldDescriptor descriptor = NULL; mamaFieldCacheField field = NULL; ret = mamaMsgField_getFid(messageField, &fid); if (ret != MAMA_STATUS_OK) { return ret; } if (MAMA_STATUS_OK != mamaFieldCacheMap_find(fieldCache->mMap, fid, type, name, &field)) { ret = mamaMsgField_getType(messageField, &type); if (ret != MAMA_STATUS_OK) { return ret; } if (fieldCache->mUseFieldNames) { mamaMsgField_getName(messageField, &name); } mamaFieldCacheField_create(&field, fid, type, name); ret = mamaFieldCacheMap_add(fieldCache->mMap, field); if (ret != MAMA_STATUS_OK) { return ret; } fieldCache->mSize++; mamaMsgField_getDescriptor(messageField, &descriptor); if (descriptor) { mamaFieldCacheField_setDescriptor(field, descriptor); } } else { type = field->mType; } if (fieldCache->mTrackModified && field->mPublish && !field->mIsModified) { field->mIsModified = 1; mamaFieldCacheList_add(fieldCache->mModifiedFields, (void*)field); } switch (type) { case MAMA_FIELD_TYPE_BOOL: { mama_bool_t result; mamaMsgField_getBool(messageField, &result); mamaFieldCacheField_setBool(field, result); break; } case MAMA_FIELD_TYPE_CHAR: { char value; mamaMsgField_getChar(messageField, &value); mamaFieldCacheField_setChar(field, value); break; } case MAMA_FIELD_TYPE_I8: { mama_i8_t value; mamaMsgField_getI8(messageField, &value); mamaFieldCacheField_setI8(field, value); break; } case MAMA_FIELD_TYPE_U8: { mama_u8_t value; mamaMsgField_getU8(messageField, &value); mamaFieldCacheField_setU8(field, value); break; } case MAMA_FIELD_TYPE_I16: { mama_i16_t value; mamaMsgField_getI16(messageField, &value); mamaFieldCacheField_setI16(field, value); break; } case MAMA_FIELD_TYPE_U16: { mama_u16_t value; mamaMsgField_getU16(messageField, &value); mamaFieldCacheField_setU16(field, value); break; } case MAMA_FIELD_TYPE_I32: { mama_i32_t value; mamaMsgField_getI32(messageField, &value); mamaFieldCacheField_setI32(field, value); break; } case MAMA_FIELD_TYPE_U32: { mama_u32_t value; mamaMsgField_getU32(messageField, &value); mamaFieldCacheField_setU32(field, value); break; } case MAMA_FIELD_TYPE_I64: { mama_i64_t value; mamaMsgField_getI64(messageField, &value); mamaFieldCacheField_setI64(field, value); break; } case MAMA_FIELD_TYPE_U64: { mama_u64_t value; mamaMsgField_getU64(messageField, &value); mamaFieldCacheField_setU64(field, value); break; } case MAMA_FIELD_TYPE_F32: { mama_f32_t value; mamaMsgField_getF32(messageField, &value); mamaFieldCacheField_setF32(field, value); break; } case MAMA_FIELD_TYPE_QUANTITY: case MAMA_FIELD_TYPE_F64: { mama_f64_t value; mamaMsgField_getF64(messageField, &value); mamaFieldCacheField_setF64(field, value); break; } case MAMA_FIELD_TYPE_STRING: { const char* value = NULL; mamaMsgField_getString(messageField, &value); mamaFieldCacheField_setString(field, value, 0); break; } case MAMA_FIELD_TYPE_PRICE: { mamaMsgField_getPrice(messageField, fieldCache->mReusablePrice); mamaFieldCacheField_setPrice(field, fieldCache->mReusablePrice); break; } case MAMA_FIELD_TYPE_TIME: { mamaMsgField_getDateTime(messageField, fieldCache->mReusableDateTime); mamaFieldCacheField_setDateTime(field, fieldCache->mReusableDateTime); break; } case MAMA_FIELD_TYPE_VECTOR_I8: { const mama_i8_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorI8(messageField, &values, &size); mamaFieldCacheField_setI8Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_U8: { const mama_u8_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorU8(messageField, &values, &size); mamaFieldCacheField_setU8Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_I16: { const mama_i16_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorI16(messageField, &values, &size); mamaFieldCacheField_setI16Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_U16: { const mama_u16_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorU16(messageField, &values, &size); mamaFieldCacheField_setU16Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_I32: { const mama_i32_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorI32(messageField, &values, &size); mamaFieldCacheField_setI32Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_U32: { const mama_u32_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorU32(messageField, &values, &size); mamaFieldCacheField_setU32Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_I64: { const mama_i64_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorI64(messageField, &values, &size); mamaFieldCacheField_setI64Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_U64: { const mama_u64_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorU64(messageField, &values, &size); mamaFieldCacheField_setU64Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_F32: { const mama_f32_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorF32(messageField, &values, &size); mamaFieldCacheField_setF32Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_F64: { const mama_f64_t* values = NULL; mama_size_t size = 0; mamaMsgField_getVectorF64(messageField, &values, &size); mamaFieldCacheField_setF64Vector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_STRING: { const char** values = NULL; mama_size_t size = 0; mamaMsgField_getVectorString(messageField, &values, &size); mamaFieldCacheField_setStringVector(field, values, size); break; } case MAMA_FIELD_TYPE_VECTOR_PRICE: { /* TODO: mamaMsgField does not provide methods to get price vector const mamaPrice* values = NULL; mama_size_t size; mamaMsgField_getVectorPrice(messageField, &values, &size); mamaFieldCacheField_setPriceVector(field, values, size); */ break; } case MAMA_FIELD_TYPE_VECTOR_TIME: { /* TODO: mamaMsgField does not provide methods to get time vector const mamaDateTime* values = NULL; mama_size_t size; mamaMsgField_getVectorDateTime(messageField, &values, &size); mamaFieldCacheField_setDateTimeVector(field, values, size); */ break; } default: break; } return ret; }
int main (int argc, const char **argv) { mamaPlaybackFileParser fileParser = NULL; mamaPlaybackCapture fileCapture = NULL; char* headerString = NULL; mamaMsg sourceMsg = NULL; mamaMsg targetMsg = NULL; mamaMsgField aField = NULL; mamaBridge gMamaBridge = NULL; mamaMsgIterator iterator = NULL; mamaFieldType fieldType = MAMA_FIELD_TYPE_UNKNOWN; parseCommandLine (argc, argv); mama_loadBridge (&gMamaBridge, "wmw"); mama_loadBridge (&gMamaBridge, "avis"); mama_open (); mamaPlaybackFileParser_allocate (&fileParser); mamaPlaybackFileParser_openFile(fileParser, (char*)gInputFilename); mamaCapture_allocate(&fileCapture); mamaCapture_openFile (&fileCapture, gOutputFilename); mamaMsgIterator_create(&iterator, NULL); mamaMsg_createForPayload(&targetMsg, 'A'); while (mamaPlaybackFileParser_getNextHeader(fileParser, &headerString)) { if (mamaPlaybackFileParser_getNextMsg (fileParser, &sourceMsg)) { char temp[64]; char* start = headerString; char* end = strchr (headerString,':'); strncpy (temp,start, end-start); temp[end-start]='\0'; mamaCapture_setFeedSource (&fileCapture, temp); end++; start=end; end = strchr (start,':'); strncpy (temp,start, end-start);temp[end-start]='\0'; mamaCapture_setTransportName (&fileCapture, temp); end++; start=end; end = strchr (start,'\0'); strncpy (temp,start, end-start);temp[end-start]='\0'; mamaCapture_setSymbol (&fileCapture, temp); mamaMsgIterator_associate(iterator, sourceMsg); mamaMsg_clear(targetMsg); while ((aField = mamaMsgIterator_next(iterator)) != NULL) { uint16_t fid = 0; mamaMsgField_getFid(aField, &fid); mamaMsgField_getType(aField, &fieldType); switch (fieldType) { case MAMA_FIELD_TYPE_BOOL: { mama_bool_t result; mamaMsgField_getBool (aField, &result); mamaMsg_addBool(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_CHAR: {char result; mamaMsgField_getChar (aField, &result); mamaMsg_addChar(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_I8: {mama_i8_t result; mamaMsgField_getI8 (aField, &result); mamaMsg_addI8(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_U8: {mama_u8_t result; mamaMsgField_getU8 (aField, &result); mamaMsg_addU8(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_I16: {mama_i16_t result; mamaMsgField_getI16 (aField, &result); mamaMsg_addI16(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_U16: {mama_u16_t result; mamaMsgField_getU16 (aField, &result); mamaMsg_addU16(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_I32: {mama_i32_t result; mamaMsgField_getI32 (aField, &result); mamaMsg_addI32(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_U32: {mama_u32_t result; mamaMsgField_getU32 (aField, &result); mamaMsg_addU32(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_I64: {mama_i64_t result; mamaMsgField_getI64 (aField, &result); mamaMsg_addI64(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_U64: {mama_u64_t result; mamaMsgField_getU64 (aField, &result); mamaMsg_addU64(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_F32: {mama_f32_t result; mamaMsgField_getF32 (aField, &result); mamaMsg_addF32(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_F64: {mama_f64_t result; mamaMsgField_getF64 (aField, &result); mamaMsg_addF64(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_STRING: {const char* result; mamaMsgField_getString (aField, &result); mamaMsg_addString(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_TIME: { mamaDateTime result; mamaMsgField_getDateTime (aField, result); mamaMsg_addDateTime(targetMsg, NULL, fid, result); }break; case MAMA_FIELD_TYPE_PRICE: { mamaPrice result; mamaMsgField_getPrice(aField, result); mamaMsg_addPrice(targetMsg, NULL, fid, result); }break; default: case MAMA_FIELD_TYPE_VECTOR_I8: case MAMA_FIELD_TYPE_VECTOR_U8: case MAMA_FIELD_TYPE_VECTOR_I16: case MAMA_FIELD_TYPE_VECTOR_U16: case MAMA_FIELD_TYPE_VECTOR_I32: case MAMA_FIELD_TYPE_VECTOR_U32: case MAMA_FIELD_TYPE_VECTOR_I64: case MAMA_FIELD_TYPE_VECTOR_U64: case MAMA_FIELD_TYPE_VECTOR_F32: case MAMA_FIELD_TYPE_VECTOR_F64: case MAMA_FIELD_TYPE_VECTOR_STRING: case MAMA_FIELD_TYPE_VECTOR_MSG: case MAMA_FIELD_TYPE_VECTOR_TIME: case MAMA_FIELD_TYPE_VECTOR_PRICE: case MAMA_FIELD_TYPE_QUANTITY: case MAMA_FIELD_TYPE_COLLECTION : case MAMA_FIELD_TYPE_UNKNOWN: case MAMA_FIELD_TYPE_OPAQUE: case MAMA_FIELD_TYPE_MSG: break; } } mamaCapture_saveMamaMsg (&fileCapture, &targetMsg); } } mamaMsgIterator_destroy(iterator); mamaCapture_closeFile(fileCapture); mamaCapture_deallocate (fileCapture); mamaPlaybackFileParser_closeFile(fileParser); mamaPlaybackFileParser_deallocate (fileParser); return (0); }