aboutsummaryrefslogtreecommitdiff
path: root/src/cppbor_parse.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/cppbor_parse.cpp')
-rw-r--r--src/cppbor_parse.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/cppbor_parse.cpp b/src/cppbor_parse.cpp
index 488f8c7..2736b71 100644
--- a/src/cppbor_parse.cpp
+++ b/src/cppbor_parse.cpp
@@ -114,7 +114,7 @@ class IncompleteItem {
class IncompleteArray : public Array, public IncompleteItem {
public:
- IncompleteArray(size_t size) : mSize(size) {}
+ explicit IncompleteArray(size_t size) : mSize(size) {}
// We return the "complete" size, rather than the actual size.
size_t size() const override { return mSize; }
@@ -130,23 +130,28 @@ class IncompleteArray : public Array, public IncompleteItem {
class IncompleteMap : public Map, public IncompleteItem {
public:
- IncompleteMap(size_t size) : mSize(size) {}
+ explicit IncompleteMap(size_t size) : mSize(size) {}
// We return the "complete" size, rather than the actual size.
size_t size() const override { return mSize; }
void add(std::unique_ptr<Item> item) override {
- mEntries.reserve(mSize * 2);
- mEntries.push_back(std::move(item));
+ if (mKeyHeldForAdding) {
+ mEntries.reserve(mSize);
+ mEntries.push_back({std::move(mKeyHeldForAdding), std::move(item)});
+ } else {
+ mKeyHeldForAdding = std::move(item);
+ }
}
private:
+ std::unique_ptr<Item> mKeyHeldForAdding;
size_t mSize;
};
class IncompleteSemantic : public Semantic, public IncompleteItem {
public:
- IncompleteSemantic(uint64_t value) : Semantic(value) {}
+ explicit IncompleteSemantic(uint64_t value) : Semantic(value) {}
// We return the "complete" size, rather than the actual size.
size_t size() const override { return 1; }