// File: /workspace/github_cpp_makefile_star2_O3/demon386[P]git-store/./boost/program_options/detail/config_file.hpp
// Function: boost::program_options::detail::common_config_file_iterator::common_config_file_iterator(boost::program_options::detail::common_config_file_iterator const&)
class BOOST_PROGRAM_OPTIONS_DECL common_config_file_iterator
        : public eof_iterator<common_config_file_iterator, option>
    {
    public:
        common_config_file_iterator() { found_eof(); }
        common_config_file_iterator(
            const std::set<std::string>& allowed_options,
            bool allow_unregistered = false);

        virtual ~common_config_file_iterator() {}

    public: // Method required by eof_iterator
        
        void get();
        
#if BOOST_WORKAROUND(_MSC_VER, <= 1900)
        void decrement() {}
        void advance(difference_type) {}
#endif

    protected: // Stubs for derived classes

        // Obtains next line from the config file
        // Note: really, this design is a bit ugly
        // The most clean thing would be to pass 'line_iterator' to
        // constructor of this class, but to avoid templating this class
        // we'd need polymorphic iterator, which does not exist yet.
        virtual bool getline(std::string&) { return false; }
        
    private:
        /** Adds another allowed option. If the 'name' ends with
            '*', then all options with the same prefix are
            allowed. For example, if 'name' is 'foo*', then 'foo1' and
            'foo_bar' are allowed. */
        void add_option(const char* name);

        // Returns true if 's' is a registered option name.
        bool allowed_option(const std::string& s) const; 

        // That's probably too much data for iterator, since
        // it will be copied, but let's not bother for now.
        std::set<std::string> allowed_options;
        // Invariant: no element is prefix of other element.
        std::set<std::string> allowed_prefixes;
        std::string m_prefix;
        bool m_allow_unregistered;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movb 0x8(%rsi), %al
movb %al, 0x8(%rdi)
leaq 0x10(%rdi), %r15
leaq 0x20(%rdi), %r13
movq %r13, 0x10(%rdi)
movq 0x10(%rsi), %rsi
movq 0x18(%r14), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0xf98c
movl 0x30(%r14), %eax
movl %eax, 0x30(%rbx)
leaq 0x38(%rbx), %r12
leaq 0x38(%r14), %rsi
movq %r12, %rdi
callq 0x10f46
leaq 0x50(%rbx), %rdi
leaq 0x50(%r14), %rsi
callq 0x10f46
movzwl 0x68(%r14), %eax
movw %ax, 0x68(%rbx)
leaq 0x2e243(%rip), %rax     # 0x49990
movq %rax, (%rbx)
leaq 0x70(%rbx), %r15
leaq 0x70(%r14), %rsi
movq %r15, %rdi
callq 0x13684
movl $0xa0, %esi
leaq (%rbx,%rsi), %r12
addq %r14, %rsi
movq %r12, %rdi
callq 0x13684
leaq 0xd0(%rbx), %rdi
leaq 0xe0(%rbx), %rax
movq %rax, 0xd0(%rbx)
movq 0xd0(%r14), %rsi
movq 0xd8(%r14), %rdx
addq %rsi, %rdx
callq 0xf98c
movb 0xf0(%r14), %al
movb %al, 0xf0(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movq %r12, %rdi
callq 0x138f0
jmp 0x1b7cb
movq %rax, %r14
movq %r15, %rdi
callq 0x138f0
jmp 0x1b7d8
movq %rax, %r14
addq $0x8, %rbx
movq %rbx, %rdi
callq 0x131e6
jmp 0x1b803
movq %rax, %r14
movq %r12, %rdi
callq 0xe470
jmp 0x1b7f6
movq %rax, %r14
movq (%r15), %rdi
cmpq %r13, %rdi
je 0x1b803
callq 0xb430
movq %r14, %rdi
callq 0xb7f0
nop