2424#include < sstream>
2525#include < string>
2626#include < vector>
27+ #include < any>
2728
2829#include < numpy/arrayobject.h>
2930#include < numpy/arrayscalars.h>
@@ -70,16 +71,12 @@ Status Append(PyObject* context, PyObject* elem, SequenceBuilder* builder,
7071// can be obtained via the Finish method.
7172class DictBuilder {
7273 public:
73- explicit DictBuilder (MemoryPool* pool = nullptr ) : keys_(pool), vals_(pool) {
74- builder_.reset (new StructBuilder (struct_ ({field (" keys" , dense_union (FieldVector{})),
75- field (" vals" , dense_union (FieldVector{}))}),
76- pool, {keys_.builder (), vals_.builder ()}));
77- }
74+ explicit DictBuilder (MemoryPool* pool = nullptr );
7875
7976 // Builder for the keys of the dictionary
80- SequenceBuilder& keys () { return (SequenceBuilder) keys_; }
77+ SequenceBuilder& keys () { return * keys_; }
8178 // Builder for the values of the dictionary
82- SequenceBuilder& vals () { return (SequenceBuilder) vals_; }
79+ SequenceBuilder& vals () { return * vals_; }
8380
8481 // Construct an Arrow StructArray representing the dictionary.
8582 // Contains a field "keys" for the keys and "vals" for the values.
@@ -88,8 +85,8 @@ class DictBuilder {
8885 std::shared_ptr<StructBuilder> builder () { return builder_; }
8986
9087 private:
91- std::any keys_;
92- std::any vals_;
88+ std::unique_ptr<SequenceBuilder> keys_;
89+ std::unique_ptr<SequenceBuilder> vals_;
9390 std::shared_ptr<StructBuilder> builder_;
9491};
9592
@@ -327,6 +324,12 @@ class SequenceBuilder {
327324 std::shared_ptr<DenseUnionBuilder> builder_;
328325};
329326
327+ DictBuilder::DictBuilder (MemoryPool* pool) : keys_(std::make_unique<SequenceBuilder>(SequenceBuilder(pool))), vals_(std::make_unique<SequenceBuilder>(SequenceBuilder(pool))) {
328+ builder_.reset (new StructBuilder (struct_ ({field (" keys" , dense_union (FieldVector{})),
329+ field (" vals" , dense_union (FieldVector{}))}),
330+ pool, {keys_->builder (), vals_->builder ()}));
331+ }
332+
330333Status SequenceBuilder::AppendDict (PyObject* context, PyObject* dict,
331334 int32_t recursion_depth,
332335 SerializedPyObject* blobs_out) {
0 commit comments