summaryrefslogtreecommitdiff
path: root/metadata.cpp
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2017-07-12 16:04:28 -0400
committerPeter LaFosse <peter@vector35.com>2017-07-12 16:04:42 -0400
commit3d3b803d18f0d61b5e36367c9eb660b234cdc66e (patch)
tree1d64b9c63997d6514bc86b12f26c5891a07287c9 /metadata.cpp
parent00961d39ab43a1476b449b858d00f8e43f0928cd (diff)
Metadata enhancements. Metadata objects are now serialized to the DB
Diffstat (limited to 'metadata.cpp')
-rw-r--r--metadata.cpp158
1 files changed, 63 insertions, 95 deletions
diff --git a/metadata.cpp b/metadata.cpp
index 3f01f4bb..18d3500b 100644
--- a/metadata.cpp
+++ b/metadata.cpp
@@ -33,67 +33,66 @@ Metadata::Metadata(double data)
m_object = BNCreateMetadataDoubleData(data);
}
-Metadata::Metadata(const vector<bool>& data)
+Metadata::Metadata(MetadataType type)
{
- auto input = new bool[data.size()];
- for (size_t i = 0; i < data.size(); i++)
- input[i] = data[i];
-
- m_object = BNCreateMetadataBooleanListData(input, data.size());
- delete[] input;
+ m_object = BNCreateMetadataOfType(type);
}
-Metadata::Metadata(const vector<string>& data)
+Metadata::Metadata(const vector<uint8_t>& data)
{
- char** input = new char*[data.size()];
+ auto input = new uint8_t[data.size()];
for (size_t i = 0; i < data.size(); i++)
- input[i] = BNAllocString(data[i].c_str());
-
- m_object = BNCreateMetadataStringListData((const char**)input, data.size());
+ input[i] = data[i];
- for (size_t i = 0; i < data.size(); i++)
- BNFreeString(input[i]);
+ m_object = BNCreateMetadataRawData(input, data.size());
delete[] input;
}
-Metadata::Metadata(const vector<uint64_t>& data)
+Metadata::Metadata(const std::vector<Ref<Metadata>>& data)
{
- auto input = new uint64_t[data.size()];
+ BNMetadata** dataList = new BNMetadata*[data.size()];
for (size_t i = 0; i < data.size(); i++)
- input[i] = data[i];
+ dataList[i] = data[i]->m_object;
- m_object = BNCreateMetadataUnsignedIntegerListData(input, data.size());
- delete[] input;
+ m_object = BNCreateMetadataArray(dataList, data.size());
}
-Metadata::Metadata(const vector<int64_t>& data)
+Metadata::Metadata(const std::map<std::string, Ref<Metadata>>& data)
{
- auto input = new int64_t[data.size()];
- for (size_t i = 0; i < data.size(); i++)
- input[i] = data[i];
+ char** keys = new char*[data.size()];
+ BNMetadata** values = new BNMetadata*[data.size()];
- m_object = BNCreateMetadataSignedIntegerListData(input, data.size());
- delete[] input;
+ size_t i = 0;
+ for (auto &elm : data)
+ {
+ keys[i] = BNAllocString(elm.first.c_str());
+ values[i++] = elm.second->m_object;
+ }
+ m_object = BNCreateMetadataValueStore((const char**)keys, values, data.size());
+ for (size_t j = 0; j < data.size(); j++)
+ BNFreeString(keys[j]);
+ delete[] keys;
+ delete[] values;
}
-Metadata::Metadata(const vector<double>& data)
+bool Metadata::operator==(const Metadata& rhs)
{
- auto input = new double[data.size()];
- for (size_t i = 0; i < data.size(); i++)
- input[i] = data[i];
+ return BNMetadataIsEqual(m_object, rhs.m_object);
+}
- m_object = BNCreateMetadataDoubleListData(input, data.size());
- delete[] input;
+Ref<Metadata> Metadata::operator[](const std::string& key)
+{
+ return new Metadata(BNMetadataGetForKey(m_object, key.c_str()));
}
-Metadata::Metadata(const vector<uint8_t>& data)
+Ref<Metadata> Metadata::operator[](size_t idx)
{
- auto input = new uint8_t[data.size()];
- for (size_t i = 0; i < data.size(); i++)
- input[i] = data[i];
+ return new Metadata(BNMetadataGetForIdx(m_object, idx));
+}
- m_object = BNCreateMetadataRawData(input, data.size());
- delete[] input;
+bool Metadata::SetValueForKey(const string& key, Ref<Metadata> data)
+{
+ return BNMetadataSetValueForKey(m_object, key.c_str(), data->m_object);
}
MetadataType Metadata::GetType() const
@@ -126,60 +125,44 @@ double Metadata::GetDouble() const
return BNMetadataGetDouble(m_object);
}
-vector<bool> Metadata::GetBooleanList() const
-{
- size_t outSize;
- bool* outList = BNMetadataGetBooleanList(m_object, &outSize);
- vector<bool> result(outList, outList + outSize);
- BNFreeMetadataBooleanList(outList);
- return result;
-}
-
-vector<string> Metadata::GetStringList() const
+vector<uint8_t> Metadata::GetRaw() const
{
size_t outSize;
- char** outList = BNMetadataGetStringList(m_object, &outSize);
- vector<string> result;
- for (size_t i = 0; i < outSize; i++)
- result.push_back(string(outList[i]));
- BNFreeMetadataStringList(outList, outSize);
+ uint8_t* outList = BNMetadataGetRaw(m_object, &outSize);
+ vector<uint8_t> result(outList, outList + outSize);
+ BNFreeMetadataRaw(outList);
return result;
}
-vector<uint64_t> Metadata::GetUnsignedIntegerList() const
+vector<Ref<Metadata>> Metadata::GetArray()
{
- size_t outSize;
- uint64_t* outList = BNMetadataGetUnsignedIntegerList(m_object, &outSize);
- vector<uint64_t> result(outList, outList + outSize);
- BNFreeMetadataUnsignedIntegerList(outList);
+ size_t size = 0;
+ BNMetadata** data = BNMetadataGetArray(m_object, &size);
+ vector<Ref<Metadata>> result;
+ for (size_t i = 0; i < size; i++)
+ result.push_back(new Metadata(data[i]));
return result;
}
-vector<int64_t> Metadata::GetSignedIntegerList() const
+map<string, Ref<Metadata>> Metadata::GetKeyValueStore()
{
- size_t outSize;
- int64_t* outList = BNMetadataGetSignedIntegerList(m_object, &outSize);
- vector<int64_t> result(outList, outList + outSize);
- BNFreeMetadataSignedIntegerList(outList);
+ BNMetadataValueStore* data = BNMetadataGetValueStore(m_object);
+ map<string, Ref<Metadata>> result;
+ for (size_t i = 0; i < data->size; i++)
+ {
+ result[data->keys[i]] = new Metadata(data->values[i]);
+ }
return result;
}
-vector<double> Metadata::GetDoubleList() const
+bool Metadata::Append(Ref<Metadata> data)
{
- size_t outSize;
- double* outList = BNMetadataGetDoubleList(m_object, &outSize);
- vector<double> result(outList, outList + outSize);
- BNFreeMetadataDoubleList(outList);
- return result;
+ return BNMetadataArrayAppend(m_object, data->m_object);
}
-vector<uint8_t> Metadata::GetRaw() const
+size_t Metadata::Size() const
{
- size_t outSize;
- uint8_t* outList = BNMetadataGetRaw(m_object, &outSize);
- vector<uint8_t> result(outList, outList + outSize);
- BNFreeMetadataRaw(outList);
- return result;
+ return BNMetadataSize(m_object);
}
bool Metadata::IsBoolean() const
@@ -207,32 +190,17 @@ bool Metadata::IsDouble() const
return BNMetadataIsDouble(m_object);
}
-bool Metadata::IsBooleanList() const
-{
- return BNMetadataIsBooleanList(m_object);
-}
-
-bool Metadata::IsStringList() const
-{
- return BNMetadataIsStringList(m_object);
-}
-
-bool Metadata::IsUnsignedIntegerList() const
-{
- return BNMetadataIsUnsignedIntegerList(m_object);
-}
-
-bool Metadata::IsSignedIntegerList() const
+bool Metadata::IsRaw() const
{
- return BNMetadataIsSignedIntegerList(m_object);
+ return BNMetadataIsRaw(m_object);
}
-bool Metadata::IsDoubleList() const
+bool Metadata::IsArray() const
{
- return BNMetadataIsDoubleList(m_object);
+ return BNMetadataIsArray(m_object);
}
-bool Metadata::IsRaw() const
+bool Metadata::IsKeyValueStore() const
{
- return BNMetadataIsRaw(m_object);
+ return BNMetadataIsKeyValueStore(m_object);
}