// File: /workspace/github_cpp_makefile_star2_O1/demon386[P]git-store/./libs/filesystem/src/path.cpp
// Function: boost::filesystem::path::m_path_iterator_increment(boost::filesystem::path::iterator&)
void path::m_path_iterator_increment(path::iterator & it)
  {
    BOOST_ASSERT_MSG(it.m_pos < it.m_path_ptr->m_pathname.size(),
      "path::basic_iterator increment past end()");

    // increment to position past current element; if current element is implicit dot,
    // this will cause it.m_pos to represent the end iterator
    it.m_pos += it.m_element.m_pathname.size();

    // if the end is reached, we are done
    if (it.m_pos == it.m_path_ptr->m_pathname.size())
    {
      it.m_element.clear();  // aids debugging, may release unneeded memory
      return;
    }

    // both POSIX and Windows treat paths that begin with exactly two separators specially
    bool was_net(it.m_element.m_pathname.size() > 2
      && is_separator(it.m_element.m_pathname[0])
      && is_separator(it.m_element.m_pathname[1])
      && !is_separator(it.m_element.m_pathname[2]));

    // process separator (Windows drive spec is only case not a separator)
    if (is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
    {
      // detect root directory
      if (was_net
#       ifdef BOOST_WINDOWS_API
        // case "c:/"
        || it.m_element.m_pathname[it.m_element.m_pathname.size()-1] == colon
#       endif
         )
      {
        it.m_element.m_pathname = separator;  // generic format; see docs
        return;
      }

      // skip separators until it.m_pos points to the start of the next element
      while (it.m_pos != it.m_path_ptr->m_pathname.size()
        && is_separator(it.m_path_ptr->m_pathname[it.m_pos]))
        { ++it.m_pos; }

      // detect trailing separator, and treat it as ".", per POSIX spec
      if (it.m_pos == it.m_path_ptr->m_pathname.size()
        && !is_root_separator(it.m_path_ptr->m_pathname, it.m_pos-1)) 
      {
        --it.m_pos;
        it.m_element = detail::dot_path();
        return;
      }
    }

    // get m_element
    size_type end_pos(it.m_path_ptr->m_pathname.find_first_of(separators, it.m_pos));
    if (end_pos == string_type::npos)
      end_pos = it.m_path_ptr->m_pathname.size();
    it.m_element = it.m_path_ptr->m_pathname.substr(it.m_pos, end_pos - it.m_pos);
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x20, %rsp
movq %rdi, %rbx
movq 0x20(%rdi), %rdi
movq 0x28(%rbx), %rcx
movq 0x8(%rdi), %rax
cmpq %rax, %rcx
jae 0x2b5fa
movq 0x8(%rbx), %rdx
addq %rdx, %rcx
movq %rcx, 0x28(%rbx)
cmpq %rax, %rcx
jne 0x2b4dc
movq $0x0, 0x8(%rbx)
movq (%rbx), %rax
movb $0x0, (%rax)
jmp 0x2b5d1
cmpq $0x3, %rdx
jb 0x2b4fa
movq (%rbx), %rsi
cmpb $0x2f, (%rsi)
jne 0x2b4fa
cmpb $0x2f, 0x1(%rsi)
jne 0x2b4fa
cmpb $0x2f, 0x2(%rsi)
setne %sil
jmp 0x2b4fc
xorl %esi, %esi
movq (%rdi), %r8
cmpb $0x2f, (%r8,%rcx)
jne 0x2b573
testb %sil, %sil
je 0x2b528
movl $0x1, %ecx
movq %rbx, %rdi
xorl %esi, %esi
movl $0x2f, %r8d
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0xb850
movq 0x28(%rbx), %rsi
cmpq %rax, %rsi
sete %cl
je 0x2b567
cmpb $0x2f, (%r8,%rsi)
jne 0x2b55e
incq %rsi
movq %rsi, 0x28(%rbx)
cmpq %rsi, %rax
sete %cl
je 0x2b564
leaq 0x1(%rsi), %rdx
cmpb $0x2f, (%r8,%rsi)
movq %rdx, %rsi
je 0x2b53e
decq %rdx
movq %rdx, %rsi
testb %cl, %cl
jne 0x2b567
jmp 0x2b573
movq %rax, %rsi
decq %rsi
callq 0x2ad59
testb %al, %al
je 0x2b5da
movq 0x20(%rbx), %rdi
movq 0x28(%rbx), %rdx
leaq 0x9ad2(%rip), %rsi      # 0x35054
movl $0x1, %ecx
callq 0xb6c0
cmpq $-0x1, %rax
jne 0x2b59a
movq 0x20(%rbx), %rax
movq 0x8(%rax), %rax
movq 0x20(%rbx), %rsi
movq 0x28(%rbx), %rdx
subq %rdx, %rax
leaq -0x30(%rbp), %r14
movq %r14, %rdi
movq %rax, %rcx
callq 0xb490
movq %rbx, %rdi
movq %r14, %rsi
callq 0xb290
leaq -0x20(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b5d1
callq 0xb430
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
retq
decq 0x28(%rbx)
callq 0x2ade1
leaq 0x21016(%rip), %rsi     # 0x4c600
movq %rbx, %rdi
addq $0x20, %rsp
popq %rbx
popq %r14
popq %rbp
jmp 0xb290
leaq 0xb0ee(%rip), %rdi      # 0x366ef
leaq 0xb05a(%rip), %rsi      # 0x36662
leaq 0xb13d(%rip), %rcx      # 0x3674c
movl $0x2ce, %edx            # imm = 0x2CE
callq 0xb310
movq %rax, %rbx
leaq -0x20(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2b62e
callq 0xb430
movq %rbx, %rdi
callq 0xb7f0