Comments (3)
You'll have to give a more concrete example of how what you're trying to serialize does not fit with the schema structure, and what kind of code we could generate to fix that.
I would think that most tree-shaped FlatBuffers are constructed from internal data that is similarly tree-shaped, so a pre-order traversal of it would allow it to be serialized without any additional bookkeeping.
Do note that the FlatBuffers API has been designed for maximum efficiency first. The goals is to construct buffers with zero additional copying and allocation. It's not hard to make a friendlier API, for example, Protocol Buffers API gives you more flexibility in the order of serialization. But it also constructs an entire tree of objects.
from flatbuffers.
Ideally, you could specify the root object and flatbuffers would do the rest.
But to be more concrete...
Table A has String B. So we need to create B, store its offset, start A and add the string offset to A. This is always the same pattern and it should be easy to automate this step.
Storing vectors of tables are worse, because you need to maintain a list of offsets before you can add it the vector to another table. So, we need to allocate a list of offsets somewhere anyway.
from flatbuffers.
On Mon, Aug 25, 2014 at 2:21 PM, greenrobot [email protected]
wrote:
Ideally, you could specify the root object and flatbuffers would do the
rest.How would this work? Would FlatBuffers generate object definitions for you?
Or would it magically map any supplied objects to the schema?But to be more concrete...
Table A has String B. So we need to create B, store its offset, start A
and add the string offset to A. This is always the same pattern and it
should be easy to automate this step.In the case of a table with strings and scalars, I could generate a
CreateA() function that takes all those elements, and hides the
CreateString step. This is definitely on the todo list.
But in the general case, i.e. a table A that owns a B that owns a C this is
not possible, unless you put B and C in temporary objects (incurring
allocation and copying).
Storing vectors of tables are worse, because you need to maintain a list
of offsets before you can add it the vector to another table. So, we need
to allocate a list of offsets somewhere anyway.This is indeed clumsy. But there's no cheap way to pass all that object
data to a function in such a way that we can abstract the vector
construction in its entirety. What there should be though, is functions
that take an array, so that at least you don't have to write your own loop.
from flatbuffers.
Related Issues (20)
- [swift] distinguish unknown from absent enum value for scheme evolution HOT 5
- undocumented breaking change GenerateText->GenText
- [Java, FlatBuffers 23.5.26, Mac OS 14.3] getByKey returns null while accessing using vector index works
- `get_root_as_*` functions not generated [Rust, 23.5.26, Linux] HOT 1
- Generating schemas with language adapters (as optional add-ons)?
- Streaming flatbuffers in java HOT 1
- [TS] optional escalar not set in the binary when it holds value 0 HOT 13
- Release a new version, please HOT 1
- Default value of 0 for field is not part of [optional] enum (java)
- Buffer generated in python gets rejected by flatcc [Python / C, Flatbuffer 23.5.26]
- Invalid Code generation if Property has same name as Struct [Windows/C#/24.3.7]
- v24.3.7 of Rust crate not released to crates.io HOT 4
- [v24.3.7] Rust: push_u8_u64_alignment test fails on i686 target (Ubuntu 22.04, CentOS 9)
- How to print nested table using FlatBufferToString?
- [Python] Flatc stub compatibility with gRPC asyncio Interface
- [Rust] Add better support for "crate-per-schema" HOT 2
- [Bazel CI] Swift toolchain analysis failed due to missing 'swift' configuration fragment HOT 1
- [C#][Feature Request] Unity Game Development needs mutate fixed size string value HOT 2
- Generated CreateXDirect with std::span<T> or "T* + size" payloads
- newbie's question.. use in c# / vector struct / adding int64...
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flatbuffers.