// File: /workspace/github_cpp_makefile_star2_O3/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, %r15
movq %rdi, %r12
cmpl $0x0, 0x44(%rdi)
movq (%rsi), %r14
je 0x17f29
cmpq %r13, %r14
je 0x17fb4
movsbl (%r14), %esi
movq %r12, %rdi
callq 0x180ac
movb 0x48(%r12), %cl
testb %al, %al
je 0x17fc7
testb %cl, %cl
je 0x1802c
incq (%r15)
movb $0x0, 0x48(%r12)
jmp 0x18032
cmpq %r13, %r14
je 0x17f54
movsbl (%r14), %esi
movq %r12, %rdi
callq 0x18072
movq (%r15), %r14
testb %al, %al
je 0x17f4c
incq %r14
movq %r14, (%r15)
cmpq %r13, %r14
jne 0x17f2e
cmpl $0x0, 0x44(%r12)
jne 0x17ef1
cmpq %r13, %r14
je 0x17fc0
movsbl (%r14), %esi
movq %r12, %rdi
callq 0x180ac
movq (%r15), %rcx
testb %al, %al
je 0x17f77
incq %rcx
movq %rcx, (%r15)
jmp 0x18032
cmpq %r13, %rcx
je 0x18032
movsbl (%rcx), %esi
movq %r12, %rdi
callq 0x18072
testb %al, %al
jne 0x18032
movq (%r15), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x180ac
testb %al, %al
jne 0x18032
movq (%r15), %rcx
incq %rcx
movq %rcx, (%r15)
jmp 0x17f77
cmpb $0x0, 0x48(%r12)
je 0x1805a
xorl %eax, %eax
jmp 0x1804b
testb %cl, %cl
jne 0x17fdd
movq (%r15), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x18072
testb %al, %al
jne 0x1802c
movq (%r15), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x18072
movq (%r15), %rcx
testb %al, %al
je 0x18027
incq %rcx
movq %rcx, (%r15)
movq %rcx, %r14
jmp 0x18027
movsbl (%rcx), %esi
movq %r12, %rdi
callq 0x18072
testb %al, %al
jne 0x1802c
movq (%r15), %rax
movsbl (%rax), %esi
movq %r12, %rdi
callq 0x180ac
testb %al, %al
jne 0x1802c
movq (%r15), %rcx
incq %rcx
movq %rcx, (%r15)
cmpq %r13, %rcx
jne 0x17ffd
movb $0x1, 0x48(%r12)
movq (%r15), %r8
movq 0x8(%rbx), %rdx
subq %r14, %r8
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rcx
callq 0xb4f0
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movb $0x1, 0x48(%r12)
movq 0x8(%rbx), %rdx
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rcx
xorl %r8d, %r8d
jmp 0x18044
nop