// File: /workspace/github_c_makefile_star2_O0/aspone[P]OrderBook/./FeedHandler.h
// Function: OrderBook::FeedHandler<unsigned int, OrderLevelEntry>::processMessage(char*)
void processMessage(char *line) {
#ifdef DEBUG
      uint32_t len = strlen(line);
      char orig_msg[len];
      strncpy(orig_msg, line, strlen(line));
#endif
      MessageType mt = parser_.getMessageType(line);
      bool valid_message = false;
      if (mt == eMT_Unknown) {
         FHErrorTracker::instance()->corruptMessage();
         return;
      }
      else if (mt == eMT_Trade) {
         STARTPROFILE();
         TradeMessage tm;
         parser_.parseTrade(line, tm);
         if (tm.trade_price_ != 0) {
            valid_message = true;
            DB("%s", orig_msg);
            order_book_.handleTrade(tm);
         }
         STOPPROFILE(trade_);
      }
      else {
         // Poked hole in memory model to avoid temporary stack-based ORDERTYPE
         // and copy ctor onto heap object.  Premature optimization out the
         // wazoo on this one, but "MOST OPTIMIZED CODE POSSIBLE" (within the
         // time constraint of the time I have to work on this) meant this nasty
         // split.  All "delete" calls are within OrderBook except for on bad
         // messages, and new / delete calls are kept tight here to attempt to
         // keep flow clear.  As mentioned in documentation - I'd be curious to
         // see how this performs with a ref counted shared_ptr from boost.
         STARTPROFILE();
         ORDERTYPE *ole = new ORDERTYPE();
         parser_.parseOrder(line, *ole);
         if (ole->order_side_ == eS_Unknown) {
            delete ole;
         }
         else {
            switch (mt) {
               case eMT_Add:
                  order_book_.addOrder(ole);
                  STOPPROFILE(add_);
                  valid_message = true;
                  break;
               case eMT_Modify:
                  order_book_.modifyOrder(ole);
                  STOPPROFILE(modify_);
                  valid_message = true;
                  break;
               case eMT_Remove:
                  order_book_.removeOrder(ole);
                  STOPPROFILE(remove_);
                  valid_message = true;
                  break;
               default:
                  fprintf(stderr, "Unknown order type hit in switch.  This should not happen.\n");
                  delete ole;
                  FAILASSERT();
                  break;
            }
         }
      }
      if (valid_message) {
#ifdef DEBUG
         DB("%s", orig_msg);
         order_book_.printBook();
#endif
         STARTPROFILE();
         order_book_.printMidpoint();
         STOPPROFILE(midquote_);
      }
   }

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq %rsi, 0x58(%rsp)
movq 0x60(%rsp), %rdi
movq %rdi, 0x20(%rsp)
addq $0x180, %rdi            # imm = 0x180
movq 0x58(%rsp), %rsi
callq 0x6750
movl %eax, 0x54(%rsp)
movb $0x0, 0x53(%rsp)
cmpl $0x0, 0x54(%rsp)
jne 0x3b6b
callq 0x3a30
movq %rax, %rdi
callq 0x6810
jmp 0x3ce6
cmpl $0x4, 0x54(%rsp)
jne 0x3bae
movq 0x20(%rsp), %rdi
addq $0x180, %rdi            # imm = 0x180
movq 0x58(%rsp), %rsi
leaq 0x40(%rsp), %rdx
callq 0x6830
cmpq $0x0, 0x48(%rsp)
je 0x3ba9
movq 0x20(%rsp), %rdi
movb $0x1, 0x53(%rsp)
leaq 0x40(%rsp), %rsi
callq 0x6ad0
jmp 0x3cd3
movl $0x28, %edi
callq 0x21d0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x18(%rsp)
callq 0x7120
jmp 0x3bca
movq 0x20(%rsp), %rdi
movq 0x18(%rsp), %rax
movq %rax, 0x38(%rsp)
addq $0x180, %rdi            # imm = 0x180
movq 0x58(%rsp), %rsi
movq 0x38(%rsp), %rdx
callq 0x7160
movq 0x38(%rsp), %rax
cmpl $0x0, 0x14(%rax)
jne 0x3c36
movq 0x38(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, %rax
je 0x3c14
movq 0x10(%rsp), %rdi
callq 0x21a0
jmp 0x3cd1
movq 0x18(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x30(%rsp)
movl %eax, 0x2c(%rsp)
callq 0x21a0
jmp 0x3ceb
movl 0x54(%rsp), %eax
movl %eax, 0xc(%rsp)
subl $0x1, %eax
je 0x3c5b
jmp 0x3c45
movl 0xc(%rsp), %eax
subl $0x2, %eax
je 0x3c87
jmp 0x3c50
movl 0xc(%rsp), %eax
subl $0x3, %eax
je 0x3c71
jmp 0x3c9d
movq 0x20(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x74c0
movb $0x1, 0x53(%rsp)
jmp 0x3ccf
movq 0x20(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x7710
movb $0x1, 0x53(%rsp)
jmp 0x3ccf
movq 0x20(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0x7cd0
movb $0x1, 0x53(%rsp)
jmp 0x3ccf
movq 0x14334(%rip), %rax     # 0x17fd8
movq (%rax), %rdi
leaq 0xc578(%rip), %rsi      # 0x10226
movb $0x0, %al
callq 0x2260
movq 0x38(%rsp), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x3ccd
movq (%rsp), %rdi
callq 0x21a0
jmp 0x3ccf
jmp 0x3cd1
jmp 0x3cd3
jmp 0x3cd5
testb $0x1, 0x53(%rsp)
je 0x3ce6
movq 0x20(%rsp), %rdi
callq 0x7f60
addq $0x68, %rsp
retq
movq 0x30(%rsp), %rdi
callq 0x2300
nopw %cs:(%rax,%rax)
nop