#ifndef INCLUDED_BOBCAT_RANGER_
#define INCLUDED_BOBCAT_RANGER_


namespace FBB
{

template <typename Iter>
class Ranger
{
    Iter d_begin;
    Iter d_end;

    public:
        Ranger(Iter const &begin, Iter const &end);     // .f

        Iter const &begin() const;                      // .f
        Iter const &end() const;                        // .f
};

template <typename Iter>
Ranger<Iter>::Ranger(Iter const &begin, Iter const &end)
:
    d_begin(begin),
    d_end(end)
{}
    template <typename Iter>
Iter const &Ranger<Iter>::begin() const
{
    return d_begin;
}
template <typename Iter>
Iter const &Ranger<Iter>::end() const
{
    return d_end;
}

    // Free functions

template <typename Iter>
Ranger<Iter> ranger(Iter &&begin, Iter &&end)
{
    return Ranger<Iter>(begin, end);
}
template <typename Data>
Ranger<Data *> ranger(Data *begin, Data *end)
{
    return Ranger<Data *>(begin, end);
}
template <typename Iter>
Ranger<Iter> ranger(Iter &&begin, size_t count)
{
    return Ranger<Iter>(begin, begin + count);
}
template <typename Data>
Ranger<Data *> ranger(Data *begin, size_t count)
{
    return Ranger<Data *>(begin, begin + count);
}

} // FBB

#endif
