| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
| <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> |
| <title>FTGL: FTVector.h Source File</title> |
| <link href="doxygen.css" rel="stylesheet" type="text/css"> |
| </head><body> |
| <!-- Generated by Doxygen 1.3.6 --> |
| <div class="qindex"><a class="qindex" href="index.html">Main Page</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a></div> |
| <h1>FTVector.h</h1><a href="FTVector_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef __FTVector__</span> |
| 00002 <span class="preprocessor"></span><span class="preprocessor">#define __FTVector__</span> |
| 00003 <span class="preprocessor"></span> |
| 00004 <span class="preprocessor">#include "<a class="code" href="FTGL_8h.html">FTGL.h</a>"</span> |
| 00005 |
| 00009 <span class="keyword">template</span> <<span class="keyword">typename</span> FT_VECTOR_ITEM_TYPE> |
| <a name="l00010"></a><a class="code" href="classFTVector.html">00010</a> <span class="keyword">class </span><a class="code" href="FTGL_8h.html#a3">FTGL_EXPORT</a> FTVector |
| 00011 { |
| 00012 <span class="keyword">public</span>: |
| <a name="l00013"></a><a class="code" href="classFTVector.html#w0">00013</a> <span class="keyword">typedef</span> FT_VECTOR_ITEM_TYPE value_type; |
| <a name="l00014"></a><a class="code" href="classFTVector.html#w1">00014</a> <span class="keyword">typedef</span> value_type& reference; |
| <a name="l00015"></a><a class="code" href="classFTVector.html#w2">00015</a> <span class="keyword">typedef</span> <span class="keyword">const</span> value_type& const_reference; |
| <a name="l00016"></a><a class="code" href="classFTVector.html#w3">00016</a> <span class="keyword">typedef</span> value_type* iterator; |
| <a name="l00017"></a><a class="code" href="classFTVector.html#w4">00017</a> <span class="keyword">typedef</span> <span class="keyword">const</span> value_type* const_iterator; |
| <a name="l00018"></a><a class="code" href="classFTVector.html#w5">00018</a> <span class="keyword">typedef</span> size_t size_type; |
| 00019 |
| <a name="l00020"></a><a class="code" href="classFTVector.html#a0">00020</a> FTVector() |
| 00021 { |
| 00022 Capacity = Size = 0; |
| 00023 Items = 0; |
| 00024 } |
| 00025 |
| 00026 |
| <a name="l00027"></a><a class="code" href="classFTVector.html#a1">00027</a> <span class="keyword">virtual</span> ~FTVector() |
| 00028 { |
| 00029 clear(); |
| 00030 } |
| 00031 |
| <a name="l00032"></a><a class="code" href="classFTVector.html#a2">00032</a> FTVector& operator =(<span class="keyword">const</span> FTVector& v) |
| 00033 { |
| 00034 reserve(v.<a class="code" href="classFTVector.html#a4">capacity</a>()); |
| 00035 |
| 00036 iterator ptr = begin(); |
| 00037 const_iterator vbegin = v.<a class="code" href="classFTVector.html#a5">begin</a>(); |
| 00038 const_iterator vend = v.<a class="code" href="classFTVector.html#a7">end</a>(); |
| 00039 |
| 00040 <span class="keywordflow">while</span>( vbegin != vend) |
| 00041 { |
| 00042 *ptr++ = *vbegin++; |
| 00043 } |
| 00044 |
| 00045 Size = v.<a class="code" href="classFTVector.html#a3">size</a>(); |
| 00046 <span class="keywordflow">return</span> *<span class="keyword">this</span>; |
| 00047 } |
| 00048 |
| <a name="l00049"></a><a class="code" href="classFTVector.html#a3">00049</a> size_type size()<span class="keyword"> const</span> |
| 00050 <span class="keyword"> </span>{ |
| 00051 <span class="keywordflow">return</span> Size; |
| 00052 } |
| 00053 |
| <a name="l00054"></a><a class="code" href="classFTVector.html#a4">00054</a> size_type capacity()<span class="keyword"> const</span> |
| 00055 <span class="keyword"> </span>{ |
| 00056 <span class="keywordflow">return</span> Capacity; |
| 00057 } |
| 00058 |
| <a name="l00059"></a><a class="code" href="classFTVector.html#a5">00059</a> iterator begin() |
| 00060 { |
| 00061 <span class="keywordflow">return</span> Items; |
| 00062 } |
| 00063 |
| <a name="l00064"></a><a class="code" href="classFTVector.html#a6">00064</a> const_iterator begin()<span class="keyword"> const</span> |
| 00065 <span class="keyword"> </span>{ |
| 00066 <span class="keywordflow">return</span> Items; |
| 00067 } |
| 00068 |
| <a name="l00069"></a><a class="code" href="classFTVector.html#a7">00069</a> iterator end() |
| 00070 { |
| 00071 <span class="keywordflow">return</span> begin() + size(); |
| 00072 } |
| 00073 |
| <a name="l00074"></a><a class="code" href="classFTVector.html#a8">00074</a> const_iterator end()<span class="keyword"> const</span> |
| 00075 <span class="keyword"> </span>{ |
| 00076 <span class="keywordflow">return</span> begin() + size(); |
| 00077 } |
| 00078 |
| <a name="l00079"></a><a class="code" href="classFTVector.html#a9">00079</a> <span class="keywordtype">bool</span> empty()<span class="keyword"> const </span> |
| 00080 <span class="keyword"> </span>{ |
| 00081 <span class="keywordflow">return</span> size() == 0; |
| 00082 } |
| 00083 |
| <a name="l00084"></a><a class="code" href="classFTVector.html#a10">00084</a> reference operator [](size_type pos) |
| 00085 { |
| 00086 <span class="keywordflow">return</span>( *(begin() + pos)); |
| 00087 } |
| 00088 |
| <a name="l00089"></a><a class="code" href="classFTVector.html#a11">00089</a> const_reference operator []( size_type pos)<span class="keyword"> const </span> |
| 00090 <span class="keyword"> </span>{ |
| 00091 <span class="keywordflow">return</span>( *(begin() + pos)); |
| 00092 } |
| 00093 |
| <a name="l00094"></a><a class="code" href="classFTVector.html#a12">00094</a> <span class="keywordtype">void</span> clear() |
| 00095 { |
| 00096 <span class="keywordflow">if</span>( Capacity) |
| 00097 { |
| 00098 <span class="keyword">delete</span> [] Items; |
| 00099 Capacity = Size = 0; |
| 00100 Items = 0; |
| 00101 } |
| 00102 } |
| 00103 |
| <a name="l00104"></a><a class="code" href="classFTVector.html#a13">00104</a> <span class="keywordtype">void</span> reserve( size_type n) |
| 00105 { |
| 00106 <span class="keywordflow">if</span>( capacity() < n) |
| 00107 { |
| 00108 expand(n); |
| 00109 } |
| 00110 } |
| 00111 |
| <a name="l00112"></a><a class="code" href="classFTVector.html#a14">00112</a> <span class="keywordtype">void</span> push_back(<span class="keyword">const</span> value_type& x) |
| 00113 { |
| 00114 <span class="keywordflow">if</span>( size() == capacity()) |
| 00115 { |
| 00116 expand(); |
| 00117 } |
| 00118 |
| 00119 ( *this)[size()] = x; |
| 00120 ++Size; |
| 00121 } |
| 00122 |
| <a name="l00123"></a><a class="code" href="classFTVector.html#a15">00123</a> <span class="keywordtype">void</span> resize(size_type n, value_type x) |
| 00124 { |
| 00125 <span class="keywordflow">if</span>( n == size()) |
| 00126 { |
| 00127 <span class="keywordflow">return</span>; |
| 00128 } |
| 00129 |
| 00130 reserve(n); |
| 00131 iterator begin, end; |
| 00132 |
| 00133 <span class="keywordflow">if</span>( n >= Size) |
| 00134 { |
| 00135 begin = this->end(); |
| 00136 end = this->begin() + n; |
| 00137 } |
| 00138 <span class="keywordflow">else</span> |
| 00139 { |
| 00140 begin = this->begin() + n; |
| 00141 end = this->end(); |
| 00142 } |
| 00143 |
| 00144 <span class="keywordflow">while</span>( begin != end) |
| 00145 { |
| 00146 *begin++ = x; |
| 00147 } |
| 00148 |
| 00149 Size = n; |
| 00150 } |
| 00151 |
| 00152 |
| 00153 <span class="keyword">private</span>: |
| 00154 <span class="keywordtype">void</span> expand(size_type capacity_hint = 0) |
| 00155 { |
| 00156 size_type new_capacity =( capacity() == 0) ? 256 : capacity()* 2; |
| 00157 <span class="keywordflow">if</span>( capacity_hint) |
| 00158 { |
| 00159 <span class="keywordflow">while</span>( new_capacity < capacity_hint) |
| 00160 { |
| 00161 new_capacity *= 2; |
| 00162 } |
| 00163 } |
| 00164 |
| 00165 value_type *new_items = <span class="keyword">new</span> value_type[new_capacity]; |
| 00166 |
| 00167 iterator begin = this->begin(); |
| 00168 iterator end = this->end(); |
| 00169 value_type *ptr = new_items; |
| 00170 |
| 00171 <span class="keywordflow">while</span>( begin != end) |
| 00172 { |
| 00173 *ptr++ = *begin++; |
| 00174 } |
| 00175 |
| 00176 <span class="keywordflow">if</span>( Capacity) |
| 00177 { |
| 00178 <span class="keyword">delete</span> [] Items; |
| 00179 } |
| 00180 |
| 00181 Items = new_items; |
| 00182 Capacity = new_capacity; |
| 00183 } |
| 00184 |
| 00185 size_type Capacity; |
| 00186 size_type Size; |
| 00187 value_type* Items; |
| 00188 }; |
| 00189 |
| 00190 <span class="preprocessor">#endif // __FTVector__</span> |
| </pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Dec 5 22:24:06 2004 for FTGL by |
| <a href="http://www.doxygen.org/index.html"> |
| <img src="doxygen.png" alt="doxygen" align="middle" border=0 > |
| </a>1.3.6 </small></address> |
| </body> |
| </html> |