// File: /workspace/github_c_makefile_star2_O0/nilyang[P]redis-tdd-annotation/src/t_zset.c
// Function: zuiInitIterator
void zuiInitIterator(zsetopsrc *op) {

    // 迭代对象为空，无动作
    if (op->subject == NULL)
        return;

    // 迭代集合
    if (op->type == REDIS_SET) {

        iterset *it = &op->iter.set;

        // 迭代 intset
        if (op->encoding == REDIS_ENCODING_INTSET) {
            it->is.is = op->subject->ptr;
            it->is.ii = 0;

        // 迭代字典
        } else if (op->encoding == REDIS_ENCODING_HT) {
            it->ht.dict = op->subject->ptr;
            it->ht.di = dictGetIterator(op->subject->ptr);
            it->ht.de = dictNext(it->ht.di);

        } else {
            redisPanic("Unknown set encoding");
        }

    // 迭代有序集合
    } else if (op->type == REDIS_ZSET) {

        iterzset *it = &op->iter.zset;

        // 迭代 ziplist
        if (op->encoding == REDIS_ENCODING_ZIPLIST) {
            it->zl.zl = op->subject->ptr;
            it->zl.eptr = ziplistIndex(it->zl.zl,0);
            if (it->zl.eptr != NULL) {
                it->zl.sptr = ziplistNext(it->zl.zl,it->zl.eptr);
                redisAssert(it->zl.sptr != NULL);
            }

        // 迭代跳跃表
        } else if (op->encoding == REDIS_ENCODING_SKIPLIST) {
            it->sl.zs = op->subject->ptr;
            it->sl.node = it->sl.zs->zsl->header->level[0].forward;

        } else {
            redisPanic("Unknown sorted set encoding");
        }

    // 未知对象类型
    } else {
        redisPanic("Unsupported type");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x516bb
jmp 0x518aa
movq -0x8(%rbp), %rax
cmpl $0x2, 0x8(%rax)
jne 0x51778
movq -0x8(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x6, 0xc(%rax)
jne 0x516fe
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movl $0x0, 0x8(%rax)
jmp 0x51773
movq -0x8(%rbp), %rax
cmpl $0x2, 0xc(%rax)
jne 0x5174f
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rdi
callq 0x241d0
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x24270
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x51771
leaq 0x9140e(%rip), %rdi     # 0xe2b64
leaq 0x91b31(%rip), %rsi     # 0xe328e
movl $0x8d3, %edx            # imm = 0x8D3
callq 0x63d40
movl $0x1, %edi
callq 0x1f3b0
jmp 0x51773
jmp 0x518aa
movq -0x8(%rbp), %rax
cmpl $0x3, 0x8(%rax)
jne 0x51886
movq -0x8(%rbp), %rax
addq $0x18, %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x5, 0xc(%rax)
jne 0x51828
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rdi
xorl %esi, %esi
callq 0x32e50
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x51826
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x33330
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x51802
jmp 0x51824
leaq 0x91cb2(%rip), %rdi     # 0xe34bb
leaq 0x91a7e(%rip), %rsi     # 0xe328e
movl $0x8e1, %edx            # imm = 0x8E1
callq 0x63ca0
movl $0x1, %edi
callq 0x1f3b0
jmp 0x51826
jmp 0x51884
movq -0x8(%rbp), %rax
cmpl $0x7, 0xc(%rax)
jne 0x51860
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq (%rax), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x51882
leaq 0x8fc34(%rip), %rdi     # 0xe149b
leaq 0x91a20(%rip), %rsi     # 0xe328e
movl $0x8ea, %edx            # imm = 0x8EA
callq 0x63d40
movl $0x1, %edi
callq 0x1f3b0
jmp 0x51884
jmp 0x518a8
leaq 0x91c42(%rip), %rdi     # 0xe34cf
leaq 0x919fa(%rip), %rsi     # 0xe328e
movl $0x8ef, %edx            # imm = 0x8EF
callq 0x63d40
movl $0x1, %edi
callq 0x1f3b0
jmp 0x518aa
addq $0x20, %rsp
popq %rbp
retq