class jnc.DynamicLayout

class DynamicLayout {
    // fields

    jnc.DynamicLayoutSink* readonly m_sink;
    jnc.Promise const* readonly m_promise;
    void const* readonly m_p;
    typedef unsigned long size_t readonly m_size;
    typedef unsigned long size_t readonly m_bufferSize;
    typedef unsigned long size_t m_sizeLimit;
    jnc.DynamicLayoutMode readonly m_mode;
    jnc.DynamicLayoutAwaitKind readonly m_awaitKind;
    char readonly m_awaitChar;

    // properties

    bool const property m_isIncomplete;
    void const* const property m_end;

    // construction

    construct();

    construct(
        jnc.DynamicLayoutMode mode,
        jnc.DynamicLayoutSink* sink,
        void const* p,
        size_t size
    );

    construct(
        jnc.DynamicLayoutSink* sink,
        void const* p,
        size_t size
    );
    destruct();

    // methods

    void clear();

    void reset(
        jnc.DynamicLayoutMode mode,
        jnc.DynamicLayoutSink* sink,
        void const* p,
        size_t size
    );

    void reset(
        jnc.DynamicLayoutSink* sink,
        void const* p,
        size_t size
    );

    void closeAllGroups();

    size_t resume(
        void const* p,
        size_t size
    );

    size_t async asyncScanTo(char c);
    size_t async asyncStrlen();
};