sprint 1-alpha
|
00001 /****************************************************************************** 00002 * sprint::lazy_vector 00003 * 00004 * Copyright (C) 2005-2011 Paolo Medici <www.pmx.it> 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 * 00020 *******************************************************************************/ 00021 00027 #ifndef _SPRINT_LAZYVECTOR_H 00028 #define _SPRINT_LAZYVECTOR_H 00029 00030 #include <vector> 00031 00032 namespace sprint { 00033 00036 template<typename _Tp > 00037 class lazy_vector { 00038 std::vector<char> m_buf; 00039 public: 00040 lazy_vector(long size = suggestedSize ) : m_buf(sizeof(_Tp) * size) 00041 { 00042 } 00043 00044 ~lazy_vector() { 00045 } 00046 00047 void resize(long new_size) 00048 { 00049 m_buf.resize(new_size * sizeof(_Tp) ); 00050 } 00051 00052 void reserve(long reserve) 00053 { 00054 m_buf.reserve(reserve * sizeof(_Tp) ); 00055 } 00056 00058 inline int size() const 00059 { return m_buf.size() / sizeof(_Tp); } 00060 00062 inline int capacity() const 00063 { return m_buf.capacity() / sizeof(_Tp); } 00064 00065 inline _Tp & operator[](int i) 00066 { return (reinterpret_cast<_Tp*>(&(*m_buf[0]))[i]; } 00067 00068 inline const _Tp & operator[](int i) const 00069 { return (reinterpret_cast<const _Tp*>(&(*m_buf[0]))[i]; } 00070 00071 }; 00072 00073 } 00074 00075 #endif