1 // Copyright (C) 2007-2022 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #ifndef MED_Vector_HeaderFile
24 #define MED_Vector_HeaderFile
29 //#if defined(_DEBUG_)
30 # define MED_TVECTOR_CHECK_RANGE
35 //! Main purpose to introduce the class was to customize operator []
36 template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
37 class TVector : public std::vector<_Tp, _Alloc>
40 typedef size_t size_type;
42 typedef std::vector<_Tp, _Alloc> superclass;
43 typedef typename superclass::allocator_type allocator_type;
45 typedef _Tp value_type;
46 typedef value_type& reference;
47 typedef const value_type& const_reference;
51 check_range(size_type __n) const
53 if (__n >= this->size())
54 throw std::out_of_range("TVector [] access out of range");
58 get_value(size_type __n) const
60 return superclass::operator[](__n);
64 get_value(size_type __n)
66 return superclass::operator[](__n);
71 TVector(const allocator_type& __a = allocator_type()):
75 TVector(size_type __n, const value_type& __val,
76 const allocator_type& __a = allocator_type()):
77 superclass(__n, __val, __a)
81 TVector(size_type __n):
85 TVector(const TVector& __x):
89 template<typename _InputIterator>
90 TVector(_InputIterator __first, _InputIterator __last,
91 const allocator_type& __a = allocator_type()):
92 superclass(__first, __last, __a)
95 template<typename _Yp, typename _Al>
96 TVector(TVector<_Yp, _Al> __y):
97 superclass(__y.begin(), __y.end())
101 operator=(const TVector& __x)
103 superclass::operator=(__x);
107 template<typename _Yp, typename _Al>
109 operator=(TVector<_Yp, _Al> __y)
111 this->assign(__y.begin(), __y.end());
116 operator[](size_type __n)
118 #if defined(MED_TVECTOR_CHECK_RANGE)
121 return get_value(__n);
125 operator[](size_type __n) const
127 #if defined(MED_TVECTOR_CHECK_RANGE)
130 return get_value(__n);
137 return get_value(__n);
141 at(size_type __n) const
144 return get_value(__n);
149 #undef MED_TVECTOR_CHECK_RANGE
151 #endif // MED_Vector_HeaderFile