blob: d770db214f8f055d4d6168937e9b4c44ac04f33a [file] [log] [blame]
<!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&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;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> &lt;<span class="keyword">typename</span> FT_VECTOR_ITEM_TYPE&gt;
<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&amp; 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&amp; 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&amp; operator =(<span class="keyword">const</span> FTVector&amp; 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() &lt; 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&amp; 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 &gt;= Size)
00134 {
00135 begin = this-&gt;end();
00136 end = this-&gt;begin() + n;
00137 }
00138 <span class="keywordflow">else</span>
00139 {
00140 begin = this-&gt;begin() + n;
00141 end = this-&gt;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 &lt; 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-&gt;begin();
00168 iterator end = this-&gt;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>