in cppcache/src/PdxInstanceImpl.cpp [97:253]
void PdxInstanceImpl::writeField(PdxWriter& writer, const std::string& name,
PdxFieldTypes typeId,
std::shared_ptr<Cacheable> value) {
switch (typeId) {
case PdxFieldTypes::INT: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt32>(value)) {
writer.writeInt(name, val->value());
}
break;
}
case PdxFieldTypes::STRING: {
if (auto&& val = std::dynamic_pointer_cast<CacheableString>(value)) {
writer.writeString(name, val->value());
}
break;
}
case PdxFieldTypes::BOOLEAN: {
if (auto&& val = std::dynamic_pointer_cast<CacheableBoolean>(value)) {
writer.writeBoolean(name, val->value());
}
break;
}
case PdxFieldTypes::FLOAT: {
if (auto&& val = std::dynamic_pointer_cast<CacheableFloat>(value)) {
writer.writeFloat(name, val->value());
}
break;
}
case PdxFieldTypes::DOUBLE: {
if (auto&& val = std::dynamic_pointer_cast<CacheableDouble>(value)) {
writer.writeDouble(name, val->value());
}
break;
}
case PdxFieldTypes::CHAR: {
if (auto&& val = std::dynamic_pointer_cast<CacheableCharacter>(value)) {
writer.writeChar(name, val->value());
}
break;
}
case PdxFieldTypes::BYTE: {
if (auto&& val = std::dynamic_pointer_cast<CacheableByte>(value)) {
writer.writeByte(name, val->value());
}
break;
}
case PdxFieldTypes::SHORT: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt16>(value)) {
writer.writeShort(name, val->value());
}
break;
}
case PdxFieldTypes::LONG: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt64>(value)) {
writer.writeLong(name, val->value());
}
break;
}
case PdxFieldTypes::BYTE_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableBytes>(value)) {
writer.writeByteArray(name, val->value());
}
break;
}
case PdxFieldTypes::DOUBLE_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableDoubleArray>(value)) {
writer.writeDoubleArray(name, val->value());
}
break;
}
case PdxFieldTypes::FLOAT_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableFloatArray>(value)) {
writer.writeFloatArray(name, val->value());
}
break;
}
case PdxFieldTypes::SHORT_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt16Array>(value)) {
writer.writeShortArray(name, val->value());
}
break;
}
case PdxFieldTypes::INT_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt32Array>(value)) {
writer.writeIntArray(name, val->value());
}
break;
}
case PdxFieldTypes::LONG_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableInt64Array>(value)) {
writer.writeLongArray(name, val->value());
}
break;
}
case PdxFieldTypes::BOOLEAN_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<BooleanArray>(value)) {
writer.writeBooleanArray(name, val->value());
}
break;
}
case PdxFieldTypes::CHAR_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CharArray>(value)) {
writer.writeCharArray(name, val->value());
}
break;
}
case PdxFieldTypes::STRING_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableStringArray>(value)) {
auto size = val->length();
std::vector<std::string> strings;
strings.reserve(size);
for (int item = 0; item < size; item++) {
strings.push_back((*val)[item]->value());
}
writer.writeStringArray(name, strings);
}
break;
}
case PdxFieldTypes::DATE: {
if (auto&& date = std::dynamic_pointer_cast<CacheableDate>(value)) {
writer.writeDate(name, date);
}
break;
}
case PdxFieldTypes::ARRAY_OF_BYTE_ARRAYS: {
if (auto&& vector = std::dynamic_pointer_cast<CacheableVector>(value)) {
const auto size = vector->size();
int8_t** values = new int8_t*[size];
auto lengths = new int[size];
size_t i = 0;
for (auto&& entry : *vector) {
if (auto&& val = std::dynamic_pointer_cast<CacheableBytes>(entry)) {
values[i] = const_cast<int8_t*>(
reinterpret_cast<const int8_t*>(val->value().data()));
lengths[i] = val->length();
}
i++;
}
writer.writeArrayOfByteArrays(name, values, static_cast<int>(size),
lengths);
delete[] values;
delete[] lengths;
}
break;
}
case PdxFieldTypes::OBJECT_ARRAY: {
if (auto&& val = std::dynamic_pointer_cast<CacheableObjectArray>(value)) {
writer.writeObjectArray(name, val);
}
break;
}
case PdxFieldTypes::UNKNOWN:
case PdxFieldTypes::OBJECT: {
writer.writeObject(name, value);
}
}
}