Cleanup: Rename ObjectValue to DictionaryValue (Serialization).
ObjectValue was to confusing as it is the term from JSON.
This commit is contained in:
parent
180b66ae8a
commit
ea8d749587
Notes:
blender-bot
2023-02-14 05:52:32 +01:00
Referenced by issue #94615, Blender 3.0 consistently crashes when RSS nears 5GiB on Linux (easy to trigger with video playback) Referenced by issue #94585, Asset Browser - Mark Asset as collection crashes Blender. Referenced by issue #75844, Blend modes are broken
|
@ -36,7 +36,7 @@
|
|||
* - DoubleValue: for double precision floating point numbers
|
||||
* - BooleanValue: for boolean values
|
||||
* - ArrayValue: An array of any supported value.
|
||||
* - ObjectValue: A key value pair where keys are std::string.
|
||||
* - DictionaryValue: A key value pair where keys are std::string.
|
||||
* - NullValue: for null values.
|
||||
*
|
||||
* # Basic usage
|
||||
|
@ -97,7 +97,7 @@ enum class eValueType {
|
|||
|
||||
class Value;
|
||||
class StringValue;
|
||||
class ObjectValue;
|
||||
class DictionaryValue;
|
||||
template<typename T, eValueType V> class PrimitiveValue;
|
||||
using IntValue = PrimitiveValue<int64_t, eValueType::Int>;
|
||||
using DoubleValue = PrimitiveValue<double, eValueType::Double>;
|
||||
|
@ -122,7 +122,7 @@ using ArrayValue = ContainerValue<Vector<std::shared_ptr<Value>>, eValueType::Ar
|
|||
* - `NullValue`: represents nothing (null pointer or optional).
|
||||
* - `BooleanValue`: contains a boolean (true/false).
|
||||
* - `DoubleValue`: contains a double precision floating point number.
|
||||
* - `ObjectValue`: represents an object (key value pairs where keys are strings and values can be
|
||||
* - `DictionaryValue`: represents an object (key value pairs where keys are strings and values can be
|
||||
* of different types.
|
||||
*
|
||||
*/
|
||||
|
@ -174,10 +174,10 @@ class Value {
|
|||
const ArrayValue *as_array_value() const;
|
||||
|
||||
/**
|
||||
* Casts to an ObjectValue.
|
||||
* Casts to an DictionaryValue.
|
||||
* Will return nullptr when it is a different type.
|
||||
*/
|
||||
const ObjectValue *as_object_value() const;
|
||||
const DictionaryValue *as_object_value() const;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -228,7 +228,7 @@ class StringValue : public Value {
|
|||
/**
|
||||
* Template for arrays and objects.
|
||||
*
|
||||
* Both ArrayValue and ObjectValue store their values in an array.
|
||||
* Both ArrayValue and DictionaryValue store their values in an array.
|
||||
*/
|
||||
template<
|
||||
/** The container type where the elements are stored in. */
|
||||
|
@ -264,10 +264,10 @@ class ContainerValue : public Value {
|
|||
};
|
||||
|
||||
/**
|
||||
* Internal storage type for ObjectValue.
|
||||
* Internal storage type for DictionaryValue.
|
||||
*
|
||||
* The elements are stored as an key value pair. The value is a shared pointer so it can be shared
|
||||
* when using `ObjectValue::create_lookup`.
|
||||
* when using `DictionaryValue::create_lookup`.
|
||||
*/
|
||||
using ObjectElementType = std::pair<std::string, std::shared_ptr<Value>>;
|
||||
|
||||
|
@ -275,7 +275,7 @@ using ObjectElementType = std::pair<std::string, std::shared_ptr<Value>>;
|
|||
* Object is a key-value container where the key must be a std::string.
|
||||
* Internally it is stored in a blender::Vector to ensure the order of keys.
|
||||
*/
|
||||
class ObjectValue : public ContainerValue<Vector<ObjectElementType>, eValueType::Object> {
|
||||
class DictionaryValue : public ContainerValue<Vector<ObjectElementType>, eValueType::Object> {
|
||||
public:
|
||||
using LookupValue = std::shared_ptr<Value>;
|
||||
using Lookup = Map<std::string, LookupValue>;
|
||||
|
|
|
@ -44,12 +44,12 @@ const ArrayValue *Value::as_array_value() const
|
|||
return static_cast<const ArrayValue *>(this);
|
||||
}
|
||||
|
||||
const ObjectValue *Value::as_object_value() const
|
||||
const DictionaryValue *Value::as_object_value() const
|
||||
{
|
||||
if (type_ != eValueType::Object) {
|
||||
return nullptr;
|
||||
}
|
||||
return static_cast<const ObjectValue *>(this);
|
||||
return static_cast<const DictionaryValue *>(this);
|
||||
}
|
||||
|
||||
static void convert_to_json(nlohmann::ordered_json &j, const Value &value);
|
||||
|
@ -66,13 +66,13 @@ static void convert_to_json(nlohmann::ordered_json &j, const ArrayValue &value)
|
|||
}
|
||||
}
|
||||
|
||||
static void convert_to_json(nlohmann::ordered_json &j, const ObjectValue &value)
|
||||
static void convert_to_json(nlohmann::ordered_json &j, const DictionaryValue &value)
|
||||
{
|
||||
const ObjectValue::Items &attributes = value.elements();
|
||||
const DictionaryValue::Items &attributes = value.elements();
|
||||
/* Create a json object to store the attributes. If this isn't done and attributes is empty it
|
||||
* would return use a null value, in stead of an empty object. */
|
||||
j = "{}"_json;
|
||||
for (const ObjectValue::Item &attribute : attributes) {
|
||||
for (const DictionaryValue::Item &attribute : attributes) {
|
||||
nlohmann::ordered_json json_item;
|
||||
convert_to_json(json_item, *attribute.second);
|
||||
j[attribute.first] = json_item;
|
||||
|
@ -99,7 +99,7 @@ static void convert_to_json(nlohmann::ordered_json &j, const Value &value)
|
|||
}
|
||||
|
||||
case eValueType::Object: {
|
||||
const ObjectValue &object = *value.as_object_value();
|
||||
const DictionaryValue &object = *value.as_object_value();
|
||||
convert_to_json(j, object);
|
||||
break;
|
||||
}
|
||||
|
@ -133,10 +133,10 @@ static std::unique_ptr<ArrayValue> convert_from_json_to_array(const nlohmann::or
|
|||
return array;
|
||||
}
|
||||
|
||||
static std::unique_ptr<ObjectValue> convert_from_json_to_object(const nlohmann::ordered_json &j)
|
||||
static std::unique_ptr<DictionaryValue> convert_from_json_to_object(const nlohmann::ordered_json &j)
|
||||
{
|
||||
std::unique_ptr<ObjectValue> object = std::make_unique<ObjectValue>();
|
||||
ObjectValue::Items &elements = object->elements();
|
||||
std::unique_ptr<DictionaryValue> object = std::make_unique<DictionaryValue>();
|
||||
DictionaryValue::Items &elements = object->elements();
|
||||
for (auto element : j.items()) {
|
||||
std::string key = element.key();
|
||||
nlohmann::ordered_json element_json = element.value();
|
||||
|
|
|
@ -93,8 +93,8 @@ TEST(serialize, object_to_json)
|
|||
{
|
||||
JsonFormatter json;
|
||||
std::stringstream out;
|
||||
ObjectValue value_object;
|
||||
ObjectValue::Items &attributes = value_object.elements();
|
||||
DictionaryValue value_object;
|
||||
DictionaryValue::Items &attributes = value_object.elements();
|
||||
attributes.append_as(std::pair(std::string("best_number"), new IntValue(42)));
|
||||
|
||||
json.serialize(out, value_object);
|
||||
|
|
|
@ -145,7 +145,7 @@ struct AssetEntryReader {
|
|||
/**
|
||||
* \brief Lookup table containing the elements of the entry.
|
||||
*/
|
||||
ObjectValue::Lookup lookup;
|
||||
DictionaryValue::Lookup lookup;
|
||||
|
||||
StringRefNull get_name_with_idcode() const
|
||||
{
|
||||
|
@ -153,7 +153,7 @@ struct AssetEntryReader {
|
|||
}
|
||||
|
||||
public:
|
||||
AssetEntryReader(const ObjectValue &entry) : lookup(entry.create_lookup())
|
||||
AssetEntryReader(const DictionaryValue &entry) : lookup(entry.create_lookup())
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -204,7 +204,7 @@ struct AssetEntryReader {
|
|||
|
||||
void add_tags_to_meta_data(AssetMetaData *asset_data) const
|
||||
{
|
||||
const ObjectValue::LookupValue *value_ptr = lookup.lookup_ptr(ATTRIBUTE_ENTRIES_TAGS);
|
||||
const DictionaryValue::LookupValue *value_ptr = lookup.lookup_ptr(ATTRIBUTE_ENTRIES_TAGS);
|
||||
if (value_ptr == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
@ -220,10 +220,10 @@ struct AssetEntryReader {
|
|||
|
||||
struct AssetEntryWriter {
|
||||
private:
|
||||
ObjectValue::Items &attributes;
|
||||
DictionaryValue::Items &attributes;
|
||||
|
||||
public:
|
||||
AssetEntryWriter(ObjectValue &entry) : attributes(entry.elements())
|
||||
AssetEntryWriter(DictionaryValue &entry) : attributes(entry.elements())
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -301,7 +301,7 @@ static void init_value_from_file_indexer_entry(AssetEntryWriter &result,
|
|||
/* TODO: asset_data.IDProperties */
|
||||
}
|
||||
|
||||
static void init_value_from_file_indexer_entries(ObjectValue &result,
|
||||
static void init_value_from_file_indexer_entries(DictionaryValue &result,
|
||||
const FileIndexerEntries &indexer_entries)
|
||||
{
|
||||
ArrayValue *entries = new ArrayValue();
|
||||
|
@ -313,7 +313,7 @@ static void init_value_from_file_indexer_entries(ObjectValue &result,
|
|||
if (indexer_entry->datablock_info.asset_data == nullptr) {
|
||||
continue;
|
||||
}
|
||||
ObjectValue *entry_value = new ObjectValue();
|
||||
DictionaryValue *entry_value = new DictionaryValue();
|
||||
AssetEntryWriter entry(*entry_value);
|
||||
init_value_from_file_indexer_entry(entry, indexer_entry);
|
||||
items.append_as(entry_value);
|
||||
|
@ -326,7 +326,7 @@ static void init_value_from_file_indexer_entries(ObjectValue &result,
|
|||
return;
|
||||
}
|
||||
|
||||
ObjectValue::Items &attributes = result.elements();
|
||||
DictionaryValue::Items &attributes = result.elements();
|
||||
attributes.append_as(std::pair(ATTRIBUTE_ENTRIES, entries));
|
||||
}
|
||||
|
||||
|
@ -366,10 +366,10 @@ static void init_indexer_entry_from_value(FileIndexerEntry &indexer_entry,
|
|||
}
|
||||
|
||||
static int init_indexer_entries_from_value(FileIndexerEntries &indexer_entries,
|
||||
const ObjectValue &value)
|
||||
const DictionaryValue &value)
|
||||
{
|
||||
const ObjectValue::Lookup attributes = value.create_lookup();
|
||||
const ObjectValue::LookupValue *entries_value = attributes.lookup_ptr(ATTRIBUTE_ENTRIES);
|
||||
const DictionaryValue::Lookup attributes = value.create_lookup();
|
||||
const DictionaryValue::LookupValue *entries_value = attributes.lookup_ptr(ATTRIBUTE_ENTRIES);
|
||||
BLI_assert(entries_value != nullptr);
|
||||
|
||||
if (entries_value == nullptr) {
|
||||
|
@ -534,7 +534,7 @@ struct AssetIndex {
|
|||
/**
|
||||
* `blender::io::serialize::Value` representing the contents of an index file.
|
||||
*
|
||||
* Value is used over #ObjectValue as the contents of the index could be corrupted and doesn't
|
||||
* Value is used over #DictionaryValue as the contents of the index could be corrupted and doesn't
|
||||
* represent an object. In case corrupted files are detected the `get_version` would return
|
||||
* `UNKNOWN_VERSION`.
|
||||
*/
|
||||
|
@ -546,8 +546,8 @@ struct AssetIndex {
|
|||
*/
|
||||
AssetIndex(const FileIndexerEntries &indexer_entries)
|
||||
{
|
||||
std::unique_ptr<ObjectValue> root = std::make_unique<ObjectValue>();
|
||||
ObjectValue::Items &root_attributes = root->elements();
|
||||
std::unique_ptr<DictionaryValue> root = std::make_unique<DictionaryValue>();
|
||||
DictionaryValue::Items &root_attributes = root->elements();
|
||||
root_attributes.append_as(std::pair(ATTRIBUTE_VERSION, new IntValue(CURRENT_VERSION)));
|
||||
init_value_from_file_indexer_entries(*root, indexer_entries);
|
||||
|
||||
|
@ -564,12 +564,12 @@ struct AssetIndex {
|
|||
|
||||
int get_version() const
|
||||
{
|
||||
const ObjectValue *root = contents->as_object_value();
|
||||
const DictionaryValue *root = contents->as_object_value();
|
||||
if (root == nullptr) {
|
||||
return UNKNOWN_VERSION;
|
||||
}
|
||||
const ObjectValue::Lookup attributes = root->create_lookup();
|
||||
const ObjectValue::LookupValue *version_value = attributes.lookup_ptr(ATTRIBUTE_VERSION);
|
||||
const DictionaryValue::Lookup attributes = root->create_lookup();
|
||||
const DictionaryValue::LookupValue *version_value = attributes.lookup_ptr(ATTRIBUTE_VERSION);
|
||||
if (version_value == nullptr) {
|
||||
return UNKNOWN_VERSION;
|
||||
}
|
||||
|
@ -588,7 +588,7 @@ struct AssetIndex {
|
|||
*/
|
||||
int extract_into(FileIndexerEntries &indexer_entries) const
|
||||
{
|
||||
const ObjectValue *root = contents->as_object_value();
|
||||
const DictionaryValue *root = contents->as_object_value();
|
||||
const int num_entries_read = init_indexer_entries_from_value(indexer_entries, *root);
|
||||
return num_entries_read;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue