/* * 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 2010-2016 Danny Robson */ #include "pascal.hpp" #include using util::parray; /////////////////////////////////////////////////////////////////////////////// template parray::parray (size_t _size, T *_data): m_size (_size), m_data (_data) { ; } /////////////////////////////////////////////////////////////////////////////// template T& parray::operator[] (size_t idx) { return data ()[idx]; } //----------------------------------------------------------------------------- template const T& parray::operator[] (size_t idx) const { return data ()[idx]; } /////////////////////////////////////////////////////////////////////////////// template T& parray::at (size_t idx) { if (idx >= size ()) throw std::out_of_range ("invalid index for parray"); return (*this)[idx]; } //----------------------------------------------------------------------------- template const T& parray::at (size_t idx) const { if (idx >= size ()) throw std::out_of_range ("invalid index for parray"); return (*this)[idx]; } /////////////////////////////////////////////////////////////////////////////// template T* parray::begin (void) { return data (); } //----------------------------------------------------------------------------- template T* parray::end (void) { return data () + size (); } /////////////////////////////////////////////////////////////////////////////// template const T* parray::cbegin (void) const { return data (); } //----------------------------------------------------------------------------- template const T* parray::cend (void) const { return data () + size (); } /////////////////////////////////////////////////////////////////////////////// template const T* parray::data (void) const { return m_data; } //----------------------------------------------------------------------------- template T* parray::data (void) { return m_data; } //----------------------------------------------------------------------------- template size_t parray::size (void) const { return m_size; } /////////////////////////////////////////////////////////////////////////////// template std::ostream& util::operator<< (std::ostream &os, parray p) { os << "[" << p.size () << ", " << std::hex << p.data () << std::dec << "]"; return os; } //----------------------------------------------------------------------------- template std::ostream& util::operator<< (std::ostream&, parray); template std::ostream& util::operator<< (std::ostream&, parray); template std::ostream& util::operator<< (std::ostream&, parray); template std::ostream& util::operator<< (std::ostream&, parray); template std::ostream& util::operator<< (std::ostream&, parray); template std::ostream& util::operator<< (std::ostream&, parray); /////////////////////////////////////////////////////////////////////////////// template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray; template class util::parray;