// File: helayzhang[P]sorted_set/./sorted_set.hh
// Function: SortedSet<int, std::tr1::hash<int>, std::equal_to<int>>::zrangebyscore_withscores_generic(double, double, bool, std::vector<std::pair<int, double>, std::allocator<std::pair<int, double>>>&, bool, bool)
void zrangebyscore_withscores_generic(double min, double max, bool reverse, KeyScoreVecType &result, 
                                          bool minex = false, bool maxex = false) {
        result.clear();
        RangeSpec range((reverse?max:min), (reverse?min:max), (reverse?maxex:minex), (reverse?minex:maxex));
        SkipListNode *ln;

        /* If reversed, get the last node in range as starting point. */
        if (reverse) {
            ln = last_in_range(range);
        } else {
            ln = first_in_range(range);
        }

        /* No "first" element in the specified interval. */
        if (ln == NULL) {
            return;
        }
        while (ln) {
            /* Abort when the node is no longer in range. */
            if (reverse) {
                if (!score_gte_min(ln->mScore,range)) break;
            } else {
                if (!score_lte_max(ln->mScore,range)) break;
            }

            result.push_back(std::make_pair(ln->mKey, ln->mScore));

            /* Move to next node */
            if (reverse) {
                ln = ln->mBackward;
            } else {
                ln = ln->mLevel[0].mForward;
            }
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movb %r8b, %al
movq %rdi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
andb $0x1, %sil
movb %sil, -0x19(%rbp)
movq %rdx, -0x28(%rbp)
andb $0x1, %cl
movb %cl, -0x29(%rbp)
andb $0x1, %al
movb %al, -0x2a(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x28(%rbp), %rdi
callq 0x4b70
testb $0x1, -0x19(%rbp)
je 0x5ea6
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
jmp 0x5eb0
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x70(%rbp)
movsd -0x70(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
testb $0x1, -0x19(%rbp)
je 0x5ecc
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0x5ed6
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
testb $0x1, -0x19(%rbp)
je 0x5ef4
movb -0x2a(%rbp), %al
movb %al, -0x89(%rbp)
jmp 0x5efd
movb -0x29(%rbp), %al
movb %al, -0x89(%rbp)
movb -0x89(%rbp), %al
movb %al, -0x8a(%rbp)
testb $0x1, -0x19(%rbp)
je 0x5f1a
movb -0x29(%rbp), %al
movb %al, -0x8b(%rbp)
jmp 0x5f23
movb -0x2a(%rbp), %al
movb %al, -0x8b(%rbp)
movsd -0x88(%rbp), %xmm1
movsd -0x78(%rbp), %xmm0
movb -0x8a(%rbp), %cl
movb -0x8b(%rbp), %al
movzbl %cl, %esi
andl $0x1, %esi
movzbl %al, %edx
andl $0x1, %edx
leaq -0x48(%rbp), %rdi
callq 0x5620
testb $0x1, -0x19(%rbp)
je 0x5f6a
movq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x58c0
movq %rax, -0x50(%rbp)
jmp 0x5f7b
movq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x5670
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jne 0x5f87
jmp 0x602e
jmp 0x5f89
cmpq $0x0, -0x50(%rbp)
je 0x602e
testb $0x1, -0x19(%rbp)
je 0x5fb4
movq -0x50(%rbp), %rax
movsd 0x8(%rax), %xmm0
leaq -0x48(%rbp), %rdi
callq 0x5ab0
testb $0x1, %al
jne 0x5fb2
jmp 0x602e
jmp 0x5fce
movq -0x50(%rbp), %rax
movsd 0x8(%rax), %xmm0
leaq -0x48(%rbp), %rdi
callq 0x5b00
testb $0x1, %al
jne 0x5fcc
jmp 0x602e
jmp 0x5fce
movq -0x28(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x50(%rbp), %rdi
addq $0x10, %rdi
movq -0x50(%rbp), %rsi
addq $0x8, %rsi
callq 0x4ce0
movq -0x98(%rbp), %rdi
movl %eax, -0x60(%rbp)
movsd %xmm0, -0x58(%rbp)
leaq -0x60(%rbp), %rsi
callq 0x4cb0
testb $0x1, -0x19(%rbp)
je 0x601a
movq -0x50(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x6029
movq -0x50(%rbp), %rax
movq 0x20(%rax), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x5f89
addq $0xa0, %rsp
popq %rbp
retq
nopw (%rax,%rax)