    /*
     * call-seq: new(opts = {})
     *
     * Instantiates a new State object, configured by _opts_.
     *
     * _opts_ can have the following keys:
     *
     * * *indent*: a string used to indent levels (default: ''),
     * * *space*: a string that is put after, a : or , delimiter (default: ''),
     * * *space_before*: a string that is put before a : pair delimiter (default: ''),
     * * *object_nl*: a string that is put at the end of a JSON object (default: ''),
     * * *array_nl*: a string that is put at the end of a JSON array (default: ''),
     * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
     *   generated, otherwise an exception is thrown, if these values are
     *   encountered. This options defaults to false.
     * * *quirks_mode*: Enables quirks_mode for parser, that is for example
     *   generating single JSON values instead of documents is possible.
     * * *buffer_initial_length*: sets the initial length of the generator's
     *   internal buffer.
     */
    static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
    {
        VALUE opts;
        GET_STATE(self);
        state->max_nesting = 19;
        state->buffer_initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT;
        rb_scan_args(argc, argv, "01", &opts);
        if (!NIL_P(opts)) cState_configure(self, opts);
        return self;
    }