// File: /workspace/github_cpp_makefile_star2_O2/demon386[P]git-store/./boost/token_functions.hpp
// Function: bool boost::char_separator<char, std::char_traits<char>>::operator()<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>&, __gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&)
bool operator()(InputIterator& next, InputIterator end, Token& tok)
    {
      typedef tokenizer_detail::assign_or_plus_equal<
        BOOST_DEDUCED_TYPENAME tokenizer_detail::get_iterator_category<
          InputIterator
        >::iterator_category
      > assigner;

      assigner::clear(tok);

      // skip past all dropped_delims
      if (m_empty_tokens == drop_empty_tokens)
        for (; next != end  && is_dropped(*next); ++next)
          { }

      InputIterator start(next);

      if (m_empty_tokens == drop_empty_tokens) {

        if (next == end)
          return false;


        // if we are on a kept_delims move past it and stop
        if (is_kept(*next)) {
          assigner::plus_equal(tok,*next);
          ++next;
        } else
          // append all the non delim characters
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
      }
      else { // m_empty_tokens == keep_empty_tokens

        // Handle empty token at the end
        if (next == end)
        {
          if (m_output_done == false)
          {
            m_output_done = true;
            assigner::assign(start,next,tok);
            return true;
          }
          else
            return false;
        }

        if (is_kept(*next)) {
          if (m_output_done == false)
            m_output_done = true;
          else {
            assigner::plus_equal(tok,*next);
            ++next;
            m_output_done = false;
          }
        }
        else if (m_output_done == false && is_dropped(*next)) {
          m_output_done = true;
        }
        else {
          if (is_dropped(*next))
            start=++next;
          for (; next != end && !is_dropped(*next) && !is_kept(*next); ++next)
            assigner::plus_equal(tok,*next);
          m_output_done = true;
        }
      }
      assigner::assign(start,next,tok);
      return true;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r13
movq %rsi, %r14
movq %rdi, %r12
cmpl $0x0, 0x44(%rdi)
movq (%rsi), %r15
jne 0x16afb
jmp 0x16aea
movsbl (%r15), %esi
movq %r12, %rdi
callq 0x16c32
movq (%r14), %r15
testb %al, %al
je 0x16aef
incq %r15
movq %r15, (%r14)
cmpq %r13, %r15
jne 0x16ad1
cmpl $0x0, 0x44(%r12)
je 0x16bc1
cmpq %r13, %r15
je 0x16b24
movsbl (%r15), %esi
movq %r12, %rdi
callq 0x16c68
movb 0x48(%r12), %cl
testb %al, %al
je 0x16b41
testb %cl, %cl
je 0x16b57
incq (%r14)
movb $0x0, 0x48(%r12)
jmp 0x16b5d
cmpb $0x0, 0x48(%r12)
jne 0x16c21
movb $0x1, 0x48(%r12)
movq %rbx, %rdi
movq %r15, %rsi
movq %r15, %rdx
jmp 0x16b66
testb %cl, %cl
jne 0x16b72
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x16c32
testb %al, %al
je 0x16b72
movb $0x1, 0x48(%r12)
movq (%r14), %rdx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x16cba
movb $0x1, %al
jmp 0x16c23
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x16c32
movq (%r14), %rcx
testb %al, %al
je 0x16b90
incq %rcx
movq %rcx, (%r14)
movq %rcx, %r15
cmpq %r13, %rcx
je 0x16b57
movsbl (%rcx), %esi
movq %r12, %rdi
callq 0x16c32
testb %al, %al
jne 0x16b57
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x16c68
testb %al, %al
jne 0x16b57
movq (%r14), %rcx
incq %rcx
movq %rcx, (%r14)
jmp 0x16b90
cmpq %r13, %r15
je 0x16c21
movsbl (%r15), %esi
movq %r12, %rdi
callq 0x16c68
movq (%r14), %rcx
testb %al, %al
je 0x16be4
incq %rcx
movq %rcx, (%r14)
jmp 0x16b5d
cmpq %r13, %rcx
je 0x16b5d
movsbl (%rcx), %esi
movq %r12, %rdi
callq 0x16c32
testb %al, %al
jne 0x16b5d
movq (%r14), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x16c68
testb %al, %al
jne 0x16b5d
movq (%r14), %rcx
incq %rcx
movq %rcx, (%r14)
jmp 0x16be4
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq