// File: bjohnsonfl[P]Overhead-Chess-Engine-/UCI.cpp
// Function: UCI::loop()
void UCI::loop(){
    
    
     std::string line ="";
     std::string token = "";
    returnState newState = returnState();
     
     while (std::getline(std::cin, line))
     {
         std::istringstream stream (line);
         token.clear();
         stream >> std::skipws >> token;
       
     
         if(token == "uci")
            {
                std::cout << "id name: Overhead\n";
                std::cout << "id author: Blake Johnson\n";
                std::cout << "uciok\n";
            }
         else if( token == "isready") std::cout << "readyok\n";
         else if( token == "setoption"); //do options later
         else if( token == "register");  //later
         else if( token == "ucinewgame"); //do prep for new game
         else if( token == "position") parsePosition(stream, newState);
         else if (token == "go") parseGo(stream);
         
         //Try and figure out a solution to poll the stream buffer. getline blocks which is not a solution
         //uci says white space before message is possible so peeking is not a solution
         else if (token == "stop");
         else if(token == "quit") break;
     
         else std::cout <<"not a command\n";
     
     
     }
    
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x280, %rsp            # imm = 0x280
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x248(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x33a0
movq -0x240(%rbp), %rdx
leaq 0x2ffe(%rip), %rsi      # 0xe3c6
leaq -0x28(%rbp), %rdi
callq 0x3b70
jmp 0xb3d3
leaq -0x29(%rbp), %rdi
callq 0x3230
leaq -0x61(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x33a0
movq -0x250(%rbp), %rdx
leaq 0x2fcc(%rip), %rsi      # 0xe3c6
leaq -0x60(%rbp), %rdi
callq 0x3b70
jmp 0xb405
leaq -0x61(%rbp), %rdi
callq 0x3230
leaq -0xb0(%rbp), %rdi
callq 0x9f10
jmp 0xb41c
jmp 0xb41e
movq 0x6bbb(%rip), %rdi      # 0x11fe0
leaq -0x28(%rbp), %rsi
callq 0x3060
movq %rax, -0x258(%rbp)
jmp 0xb437
movq -0x258(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x3290
movb %al, -0x259(%rbp)
jmp 0xb455
movb -0x259(%rbp), %al
testb $0x1, %al
jne 0xb464
jmp 0xb75e
leaq -0x230(%rbp), %rdi
leaq -0x28(%rbp), %rsi
movl $0x8, %edx
callq 0x3360
jmp 0xb47b
leaq -0x60(%rbp), %rdi
callq 0x32d0
leaq 0x18a5(%rip), %rsi      # 0xcd30
leaq -0x230(%rbp), %rdi
callq 0x3350
movq %rax, -0x268(%rbp)
jmp 0xb4a0
movq -0x268(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x32a0
jmp 0xb4b2
leaq 0x2fd3(%rip), %rsi      # 0xe48c
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x269(%rbp)
jmp 0xb4ca
movb -0x269(%rbp), %al
testb $0x1, %al
jne 0xb4d9
jmp 0xb57f
movq 0x6ae8(%rip), %rdi      # 0x11fc8
leaq 0x2fa9(%rip), %rsi      # 0xe490
callq 0x31e0
jmp 0xb4ee
movq 0x6ad3(%rip), %rdi      # 0x11fc8
leaq 0x2fa7(%rip), %rsi      # 0xe4a3
callq 0x31e0
jmp 0xb503
movq 0x6abe(%rip), %rdi      # 0x11fc8
leaq 0x2fac(%rip), %rsi      # 0xe4bd
callq 0x31e0
jmp 0xb518
jmp 0xb735
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x29(%rbp), %rdi
callq 0x3230
jmp 0xb78b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x61(%rbp), %rdi
callq 0x3230
jmp 0xb782
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0xb779
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x3100
jmp 0xb779
leaq 0x2f3e(%rip), %rsi      # 0xe4c4
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26a(%rbp)
jmp 0xb597
movb -0x26a(%rbp), %al
testb $0x1, %al
jne 0xb5a3
jmp 0xb5bd
movq 0x6a1e(%rip), %rdi      # 0x11fc8
leaq 0x2f1b(%rip), %rsi      # 0xe4cc
callq 0x31e0
jmp 0xb5b8
jmp 0xb733
leaq 0x2f11(%rip), %rsi      # 0xe4d5
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26b(%rbp)
jmp 0xb5d5
movb -0x26b(%rbp), %al
testb $0x1, %al
jne 0xb5e1
jmp 0xb5e6
jmp 0xb731
leaq 0x2ef2(%rip), %rsi      # 0xe4df
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26c(%rbp)
jmp 0xb5fe
movb -0x26c(%rbp), %al
testb $0x1, %al
jne 0xb60a
jmp 0xb60f
jmp 0xb72f
leaq 0x2ed2(%rip), %rsi      # 0xe4e8
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26d(%rbp)
jmp 0xb627
movb -0x26d(%rbp), %al
testb $0x1, %al
jne 0xb633
jmp 0xb638
jmp 0xb72d
leaq 0x2eb4(%rip), %rsi      # 0xe4f3
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26e(%rbp)
jmp 0xb650
movb -0x26e(%rbp), %al
testb $0x1, %al
jne 0xb65c
jmp 0xb67d
movq -0x248(%rbp), %rdi
leaq -0x230(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0xb7a0
jmp 0xb678
jmp 0xb72b
leaq 0x2e78(%rip), %rsi      # 0xe4fc
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x26f(%rbp)
jmp 0xb695
movb -0x26f(%rbp), %al
testb $0x1, %al
jne 0xb6a1
jmp 0xb6b8
movq -0x248(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0xbcc0
jmp 0xb6b6
jmp 0xb729
leaq 0x2e40(%rip), %rsi      # 0xe4ff
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x270(%rbp)
jmp 0xb6d0
movb -0x270(%rbp), %al
testb $0x1, %al
jne 0xb6dc
jmp 0xb6de
jmp 0xb727
leaq 0x2e1f(%rip), %rsi      # 0xe504
leaq -0x60(%rbp), %rdi
callq 0xa080
movb %al, -0x271(%rbp)
jmp 0xb6f6
movb -0x271(%rbp), %al
testb $0x1, %al
jne 0xb702
jmp 0xb70e
movl $0x3, -0x234(%rbp)
jmp 0xb73f
movq 0x68b3(%rip), %rdi      # 0x11fc8
leaq 0x2ded(%rip), %rsi      # 0xe509
callq 0x31e0
jmp 0xb723
jmp 0xb725
jmp 0xb727
jmp 0xb729
jmp 0xb72b
jmp 0xb72d
jmp 0xb72f
jmp 0xb731
jmp 0xb733
jmp 0xb735
movl $0x0, -0x234(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x3100
movl -0x234(%rbp), %eax
testl %eax, %eax
je 0xb759
jmp 0xb757
jmp 0xb75e
jmp 0xb41e
leaq -0x60(%rbp), %rdi
callq 0x3408
leaq -0x28(%rbp), %rdi
callq 0x3408
addq $0x280, %rsp            # imm = 0x280
popq %rbp
retq
leaq -0x60(%rbp), %rdi
callq 0x3408
leaq -0x28(%rbp), %rdi
callq 0x3408
movq -0x38(%rbp), %rdi
callq 0x3390
nopw %cs:(%rax,%rax)