// File: jo-qzy[P]MyJson/example.cpp
// Function: main
int main() {
    string json_source = "{\
                            \"encoding\" : \"UTF-8\",\
                            \"plug-ins\" : [\
                                \"python\",\
                                \"c++\",\
                                \"ruby\"\
                            ],\
                            \"indent\" : {\
                                \"length\" : 3,\
                                \"use_space\": true\
                            }\
                          }";

    // reader test
    JSON::Reader reader;
    JSON::Value root;
    reader.parse(json_source, root);
    
    // fast writet test
    JSON::FastWriter fw;
    cout << fw.write(root) << endl << endl;
    
    // style writer test
    JSON::StyleWriter sw;
    cout << sw.write(root) << endl << endl;

    // remove test
    root.removeMember("indent");
    cout << fw.write(root) << endl << endl;

    // append test
    JSON::Value item;
    item["array_key"] = "test_key";
    root.append(item);
    cout << fw.write(root) << endl << endl;

    // get member names
    vector<string> names = root.getMemberNames();
    for (auto vt : names)
        cout << vt << " , ";
    cout << endl << endl;

    // as string test

    // resize test
    root.resize(1);
    cout << fw.write(root) << endl << endl;

    // clear test
    root.clear();
    cout << fw.write(root) << endl << endl;
    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x470, %rsp            # imm = 0x470
movl $0x0, -0x4(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0x2300
movq -0x3d8(%rbp), %rdx
leaq 0xab80(%rip), %rsi      # 0xd1d0
leaq -0x28(%rbp), %rdi
callq 0x22a0
jmp 0x265b
leaq -0x29(%rbp), %rdi
callq 0x2240
leaq -0xe8(%rbp), %rdi
callq 0x2de0
jmp 0x2672
leaq -0x108(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x20b0
jmp 0x2684
leaq -0x108(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x2e30
jmp 0x2699
leaq -0x108(%rbp), %rdi
callq 0x2120
leaq -0x110(%rbp), %rdi
movq %rdi, -0x3e0(%rbp)
callq 0x2e70
movq -0x3e0(%rbp), %rsi
leaq -0x130(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x2eb0
jmp 0x26d4
movq 0x118fd(%rip), %rdi     # 0x13fd8
leaq -0x130(%rbp), %rsi
callq 0x21c0
movq %rax, -0x3e8(%rbp)
jmp 0x26f0
movq -0x3e8(%rbp), %rdi
movq 0x118ca(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x3f0(%rbp)
jmp 0x270c
movq -0x3f0(%rbp), %rdi
movq 0x118ae(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x2721
leaq -0x130(%rbp), %rdi
callq 0x2120
leaq -0x140(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x2ef0
movq -0x3f8(%rbp), %rsi
leaq -0x160(%rbp), %rdi
leaq -0xe8(%rbp), %rdx
callq 0x2f30
jmp 0x275c
movq 0x11875(%rip), %rdi     # 0x13fd8
leaq -0x160(%rbp), %rsi
callq 0x21c0
movq %rax, -0x400(%rbp)
jmp 0x2778
movq -0x400(%rbp), %rdi
movq 0x11842(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x408(%rbp)
jmp 0x2794
movq -0x408(%rbp), %rdi
movq 0x11826(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x27a9
leaq -0x160(%rbp), %rdi
callq 0x2120
leaq -0x229(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0x2300
movq -0x410(%rbp), %rdx
leaq 0xaba8(%rip), %rsi      # 0xd37e
leaq -0x228(%rbp), %rdi
callq 0x22a0
jmp 0x27e4
leaq -0x208(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
leaq -0x228(%rbp), %rdx
callq 0x2f70
jmp 0x2800
leaq -0x208(%rbp), %rdi
callq 0x3010
leaq -0x228(%rbp), %rdi
callq 0x2120
leaq -0x229(%rbp), %rdi
callq 0x2240
leaq -0x250(%rbp), %rdi
leaq -0x110(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x2eb0
jmp 0x2840
movq 0x11791(%rip), %rdi     # 0x13fd8
leaq -0x250(%rbp), %rsi
callq 0x21c0
movq %rax, -0x418(%rbp)
jmp 0x285c
movq -0x418(%rbp), %rdi
movq 0x1175e(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x420(%rbp)
jmp 0x2878
movq -0x420(%rbp), %rdi
movq 0x11742(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x288d
leaq -0x250(%rbp), %rdi
callq 0x2120
leaq -0x2f8(%rbp), %rdi
callq 0x2de0
jmp 0x28a7
leaq -0x319(%rbp), %rdi
movq %rdi, -0x428(%rbp)
callq 0x2300
movq -0x428(%rbp), %rdx
leaq 0xaac6(%rip), %rsi      # 0xd38e
leaq -0x318(%rbp), %rdi
callq 0x22a0
jmp 0x28d6
leaq -0x2f8(%rbp), %rdi
leaq -0x318(%rbp), %rsi
callq 0x3060
movq %rax, -0x430(%rbp)
jmp 0x28f2
movq -0x430(%rbp), %rdi
leaq 0xaa85(%rip), %rsi      # 0xd385
callq 0x30b0
jmp 0x2907
leaq -0x318(%rbp), %rdi
callq 0x2120
leaq -0x319(%rbp), %rdi
callq 0x2240
leaq -0xe8(%rbp), %rdi
leaq -0x2f8(%rbp), %rsi
callq 0x3150
jmp 0x2934
leaq -0x340(%rbp), %rdi
leaq -0x110(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x2eb0
jmp 0x2950
movq 0x11681(%rip), %rdi     # 0x13fd8
leaq -0x340(%rbp), %rsi
callq 0x21c0
movq %rax, -0x438(%rbp)
jmp 0x296c
movq -0x438(%rbp), %rdi
movq 0x1164e(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x440(%rbp)
jmp 0x2988
movq -0x440(%rbp), %rdi
movq 0x11632(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x299d
leaq -0x340(%rbp), %rdi
callq 0x2120
leaq -0x358(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x33b0
jmp 0x29be
leaq -0x358(%rbp), %rax
movq %rax, -0x360(%rbp)
movq -0x360(%rbp), %rdi
callq 0x3510
movq %rax, -0x368(%rbp)
movq -0x360(%rbp), %rdi
callq 0x3540
movq %rax, -0x370(%rbp)
leaq -0x368(%rbp), %rdi
leaq -0x370(%rbp), %rsi
callq 0x3570
testb $0x1, %al
jne 0x2a0e
jmp 0x2bf3
leaq -0x368(%rbp), %rdi
callq 0x35b0
movq %rax, %rsi
leaq -0x390(%rbp), %rdi
callq 0x20b0
jmp 0x2a2b
movq 0x115a6(%rip), %rdi     # 0x13fd8
leaq -0x390(%rbp), %rsi
callq 0x21c0
movq %rax, -0x448(%rbp)
jmp 0x2a47
movq -0x448(%rbp), %rdi
leaq 0xa943(%rip), %rsi      # 0xd398
callq 0x2200
jmp 0x2a5c
leaq -0x390(%rbp), %rdi
callq 0x2120
leaq -0x368(%rbp), %rdi
callq 0x35d0
jmp 0x29f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x29(%rbp), %rdi
callq 0x2240
jmp 0x2dce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2dc5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x2120
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x2120
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x2120
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2b32
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x2120
leaq -0x229(%rbp), %rdi
callq 0x2240
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x2120
jmp 0x2db9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2b86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x2120
leaq -0x319(%rbp), %rdi
callq 0x2240
jmp 0x2dad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2dad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x340(%rbp), %rdi
callq 0x2120
jmp 0x2dad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2da1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x2120
jmp 0x2da1
movq 0x113de(%rip), %rdi     # 0x13fd8
movq 0x113c7(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x450(%rbp)
jmp 0x2c0f
movq -0x450(%rbp), %rdi
movq 0x113ab(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x2c24
leaq -0xe8(%rbp), %rdi
movl $0x1, %esi
callq 0x35f0
jmp 0x2c37
leaq -0x3b0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x2eb0
jmp 0x2c53
movq 0x1137e(%rip), %rdi     # 0x13fd8
leaq -0x3b0(%rbp), %rsi
callq 0x21c0
movq %rax, -0x458(%rbp)
jmp 0x2c6f
movq -0x458(%rbp), %rdi
movq 0x1134b(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x460(%rbp)
jmp 0x2c8b
movq -0x460(%rbp), %rdi
movq 0x1132f(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x2ca0
leaq -0x3b0(%rbp), %rdi
callq 0x2120
leaq -0xe8(%rbp), %rdi
callq 0x3700
jmp 0x2cba
leaq -0x3d0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x2eb0
jmp 0x2cd6
movq 0x112fb(%rip), %rdi     # 0x13fd8
leaq -0x3d0(%rbp), %rsi
callq 0x21c0
movq %rax, -0x468(%rbp)
jmp 0x2cf2
movq -0x468(%rbp), %rdi
movq 0x112c8(%rip), %rsi     # 0x13fc8
callq 0x2230
movq %rax, -0x470(%rbp)
jmp 0x2d0e
movq -0x470(%rbp), %rdi
movq 0x112ac(%rip), %rsi     # 0x13fc8
callq 0x2230
jmp 0x2d23
leaq -0x3d0(%rbp), %rdi
callq 0x2120
movl $0x0, -0x4(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x3770
leaq -0x2f8(%rbp), %rdi
callq 0x3010
leaq -0xe8(%rbp), %rdi
callq 0x3010
leaq -0x28(%rbp), %rdi
callq 0x2120
movl -0x4(%rbp), %eax
addq $0x470, %rsp            # imm = 0x470
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x2120
jmp 0x2da1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x3d0(%rbp), %rdi
callq 0x2120
leaq -0x358(%rbp), %rdi
callq 0x3770
leaq -0x2f8(%rbp), %rdi
callq 0x3010
leaq -0xe8(%rbp), %rdi
callq 0x3010
leaq -0x28(%rbp), %rdi
callq 0x2120
movq -0x38(%rbp), %rdi
callq 0x22f0
nopw (%rax,%rax)