set_iterator


    template <class t>
        struct set_iterator
    {
        long long slot_number;
        data_file<t>* dp;

        set_iterator() {}

        set_iterator(data_file<t>* df_set,
            long long n)
        {
            slot_number = n;
            dp = df_set;
        }

        set_iterator(const set_iterator<t>& i) : slot_number(i.slot_number), dp(i.dp) {}

        t operator*() const
        {
            return dp->get(slot_number);
        }

        set_iterator<t>& operator++()
        {
            slot_number = next_slot(*(dp->_node_file), slot_number);
            return *this;
        }

        set_iterator<t> operator++(int)
        {
            set_iterator<t> save = *this; ++* this; return save;
        }

        set_iterator<t>& operator--()
        {
            slot_number = previous_slot(*(dp->_node_file), slot_number);
            return *this;
        }

        set_iterator<t> operator--(int)
        {
            set_iterator<t> save = *this; --* this; return save;
        }

        bool operator==(const set_iterator<t>& y) const { return slot_number == y.slot_number; }

        bool operator!=(const set_iterator<t>& y) const { return slot_number != y.slot_number; }

        bool is_header() const { return slot_number == 0; }
    };