// File: Cell-veto[P]postlhc/./storage.hpp
// Function: Storage<Monodisperse2D>::StripGenerator::StripGenerator(Storage<Monodisperse2D> const&, unsigned long*, unsigned int, double, double, double)
StripGenerator (const this_t &stor, uint64_t base[DIM],
            unsigned direction,
            double strip_width, double begin, double end)
            : GeneratorBase (stor)
        {
            direction_ = direction;
            for (unsigned n = 0; n != DIM; ++n)
            {
                uint64_t b, e;
                if (n == direction)
                {
                    b = int64_t (stor_->real2frac[n] * begin);
                    e = stor_->real2frac[n] * end;
                }
                else
                {
                    uint64_t rep_frac = stor_->real2frac[n] * strip_width;
                    b = 0ull - rep_frac;
                    e = rep_frac;
                }

                lo_bound_[n] = stor_->cell_floor (base[n] + b, n);
                hi_bound_[n] = stor_->cell_ceil (base[n] + e, n);
                assert (lo_bound_[n] != hi_bound_[n]);
                position_[n] = lo_bound_[n];
            }

            position_[DIM] = 0;

            GeneratorBase::init (stor_->make_base_key (position_));
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movsd %xmm0, -0x28(%rbp)
movsd %xmm1, -0x30(%rbp)
movsd %xmm2, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x70(%rbp)
movq -0x10(%rbp), %rsi
callq 0x41e8b0
movq -0x70(%rbp), %rax
leaq 0x26de93(%rip), %rcx    # 0x68c538
addq $0x10, %rcx
movq %rcx, (%rax)
movl -0x1c(%rbp), %ecx
movl %ecx, 0x50(%rax)
movl $0x0, -0x3c(%rbp)
cmpl $0x2, -0x3c(%rbp)
je 0x41e85c
movl -0x3c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jne 0x41e730
movq -0x70(%rbp), %rax
movq 0x10(%rax), %rcx
movl -0x3c(%rbp), %edx
movsd 0x68(%rcx,%rdx,8), %xmm0
movsd -0x30(%rbp), %xmm1
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
movq %rcx, -0x48(%rbp)
movq 0x10(%rax), %rax
movl -0x3c(%rbp), %ecx
movsd 0x68(%rax,%rcx,8), %xmm0
movsd -0x38(%rbp), %xmm1
mulsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
movsd 0x1ddc6d(%rip), %xmm1   # 0x5fc388
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x50(%rbp)
jmp 0x41e786
movq -0x70(%rbp), %rax
movq 0x10(%rax), %rax
movl -0x3c(%rbp), %ecx
movsd 0x68(%rax,%rcx,8), %xmm0
movsd -0x28(%rbp), %xmm1
mulsd %xmm1, %xmm0
movaps %xmm0, %xmm1
cvttsd2si %xmm1, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
movsd 0x1ddc27(%rip), %xmm1   # 0x5fc388
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x58(%rbp)
xorl %eax, %eax
subq -0x58(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x58(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x70(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x18(%rbp), %rax
movl -0x3c(%rbp), %ecx
movl %ecx, %edx
movq (%rax,%rcx,8), %rsi
movq -0x48(%rbp), %rax
addq %rax, %rsi
callq 0x41e8f0
movq %rax, -0x78(%rbp)
jmp 0x41e7ad
movq -0x70(%rbp), %rax
movq -0x78(%rbp), %rdx
movl -0x3c(%rbp), %ecx
movq %rdx, 0x30(%rax,%rcx,8)
movq 0x10(%rax), %rdi
movq -0x18(%rbp), %rax
movl -0x3c(%rbp), %ecx
movl %ecx, %edx
movq (%rax,%rcx,8), %rsi
movq -0x50(%rbp), %rax
addq %rax, %rsi
callq 0x41e980
movq %rax, -0x80(%rbp)
jmp 0x41e7e0
movq -0x70(%rbp), %rcx
movq -0x80(%rbp), %rdx
movl -0x3c(%rbp), %eax
movq %rdx, 0x40(%rcx,%rax,8)
movl -0x3c(%rbp), %eax
movq 0x30(%rcx,%rax,8), %rax
movl -0x3c(%rbp), %edx
cmpq 0x40(%rcx,%rdx,8), %rax
je 0x41e804
jmp 0x41e83a
leaq 0x1de5f2(%rip), %rdi    # 0x5fcdfd
leaq 0x1ddcd5(%rip), %rsi    # 0x5fc4e7
movl $0x2f8, %edx            # imm = 0x2F8
leaq 0x1de5fc(%rip), %rcx    # 0x5fce1a
callq 0x53d020
movq -0x70(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0x41ed10
jmp 0x41e89c
movq -0x70(%rbp), %rax
movl -0x3c(%rbp), %ecx
movq 0x30(%rax,%rcx,8), %rdx
movl -0x3c(%rbp), %ecx
movq %rdx, 0x18(%rax,%rcx,8)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x41e6b9
movq -0x70(%rbp), %rax
movq %rax, %rsi
addq $0x18, %rsi
movq $0x0, 0x28(%rax)
movq 0x10(%rax), %rdi
callq 0x41ea90
movq %rax, -0x88(%rbp)
jmp 0x41e881
movq -0x88(%rbp), %rsi
movq -0x70(%rbp), %rdi
callq 0x41ea20
jmp 0x41e893
addq $0x90, %rsp
popq %rbp
retq
movq -0x60(%rbp), %rdi
callq 0x5283c0
nopw %cs:(%rax,%rax)
nop