Full structural access, at the parser / writer level. Sees disabled members.
| Member | Behaviour |
|---|---|
memberCount() → std::size_t | including disabled members |
getMember(index) → Member& | throws std::out_of_range (const overload → Member const&) |
appendMember(Member) → Member& | returns the stored member |
eraseMember(index) | |
getDanglingComments() → CommentList& | comments before } |
This is how you iterate (there is no indexed active-member accessor in the query API):
for( std::size_t k = 0; k < obj.memberCount(); ++k )
{
Member const& m = obj.getMember( k );
if( m.isDisabled() ) continue;
use( m.getKey(), m.getValue() );
}
See Member for its accessors (getKey / getValue / isDisabled / trivia / provenance).
Include API — %include directives
Directives are structural nodes kept in source order alongside members (fson/Include.hh). Include carries getPath(), hasAlias() / getAlias(), isDisabled() / setDisabled(), leading / trailing comments, and clone().
| Member | Behaviour |
|---|---|
includeCount() → std::size_t | %include directives in this object |
getInclude(index) → Include& | throws std::out_of_range |
appendInclude(Include) → Include& | returns the stored directive |
eraseInclude(index) |
Entry order
entryCount() / getEntry(pos) → Entry const& expose the object body as one ordered list of Entry{ EntryKind kind, std::size_t index } — kind is Member or Include, index points into the respective list. The writer uses this to round-trip members and directives in their original interleaved order.

