void fromAttribute(AttributePtr attribute, char** name, int* nameLen, ValuePtr* vp) { std::string* n = attribute->mutable_name(); *name = (char*) n->data(); *nameLen = n->size(); ValuePtr value = new Value(); value->set_type(attribute->type()); if (attribute->has_scalar()) *value->mutable_scalar() = *attribute->mutable_scalar(); if (attribute->has_ranges()) *value->mutable_ranges() = *attribute->mutable_ranges(); if (attribute->has_set()) *value->mutable_set() = *attribute->mutable_set(); if (attribute->has_text()) *value->mutable_text() = *attribute->mutable_text(); *vp = value; }
ValuePtr toValue(int type, double scalar, ValueRangePtr* ranges, int rangeLen, StdStringPtr* strings, int stringsLen, char* text, int textLen) { ValuePtr value = new Value(); value->set_type((Value_Type) type); if (type == Value_Type_SCALAR) { Value_Scalar s; s.set_value(scalar); *value->mutable_scalar() = s; } else if (type == Value_Type_RANGES) { Value_RangesPtr rs = value->mutable_ranges(); for (int i = 0; i < rangeLen; ++i) *rs->add_range() = *ranges[i]; } else if (type == Value_Type_SET) { Value_SetPtr set = value->mutable_set(); for (int i = 0; i < stringsLen; ++i) set->add_item(*strings[i]); } else if (type == Value_Type_TEXT) { Value_Text t; t.set_value(text, textLen); *value->mutable_text() = t; } return value; }