/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Copyright 2015 Danny Robson */ #include "view.hpp" #include "debug.hpp" #include #include using util::view; //----------------------------------------------------------------------------- template view::view (T _begin, T _end): m_begin (_begin), m_end (_end) { ; } //----------------------------------------------------------------------------- template T view::begin (void) { return m_begin; } //----------------------------------------------------------------------------- template T view::end (void) { return m_end; } //----------------------------------------------------------------------------- template bool view::empty (void) const { return m_begin == m_end; } //----------------------------------------------------------------------------- template size_t view::size (void) const { return std::distance (m_begin, m_end); } //----------------------------------------------------------------------------- template const typename view::value_type& view::operator[] (size_t idx) const { CHECK_LT (m_begin + idx, m_end); return m_begin[idx]; } //----------------------------------------------------------------------------- template bool view::operator== (const view rhs) const { return rhs.m_begin == m_begin && rhs.m_end == m_end; } //----------------------------------------------------------------------------- template std::ostream& util::operator<< (std::ostream &os, util::view v) { std::copy (v.begin (), v.end (), std::ostream_iterator (os)); return os; } /////////////////////////////////////////////////////////////////////////////// template struct util::view;