ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

mvctor_traits_test.cpp
Go to the documentation of this file.
00001 #include <vector>
00002 #include <deque>
00003 
00004 #include "mvctor_test.h"
00005 
00006 #if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
00007 using namespace std;
00008 #endif
00009 
00010 size_t MovableStruct::nb_dft_construct_call = 0;
00011 size_t MovableStruct::nb_cpy_construct_call = 0;
00012 size_t MovableStruct::nb_mv_construct_call = 0;
00013 size_t MovableStruct::nb_assignment_call = 0;
00014 size_t MovableStruct::nb_destruct_call = 0;
00015 
00016 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00017 #  if defined (_STLP_USE_NAMESPACES)
00018 namespace std {
00019 #  endif
00020   _STLP_TEMPLATE_NULL
00021   struct __move_traits<MovableStruct> {
00022     typedef __true_type implemented;
00023     typedef __false_type complete;
00024   };
00025 #  if defined (_STLP_USE_NAMESPACES)
00026 }
00027 #  endif
00028 #endif
00029 
00030 struct CompleteMovableStruct {
00031   CompleteMovableStruct() { ++nb_dft_construct_call; }
00032   CompleteMovableStruct(CompleteMovableStruct const&) { ++nb_cpy_construct_call; }
00033 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00034   CompleteMovableStruct(__move_source<CompleteMovableStruct>) { ++nb_mv_construct_call; }
00035 #endif
00036   ~CompleteMovableStruct() { ++nb_destruct_call; }
00037 
00038   CompleteMovableStruct& operator = (const CompleteMovableStruct&) {
00039     ++nb_assignment_call;
00040     return *this;
00041   }
00042   static void reset() {
00043     nb_dft_construct_call = nb_cpy_construct_call = nb_mv_construct_call = 0;
00044     nb_assignment_call = 0;
00045     nb_destruct_call = 0;
00046   }
00047 
00048   static size_t nb_dft_construct_call;
00049   static size_t nb_cpy_construct_call;
00050   static size_t nb_mv_construct_call;
00051   static size_t nb_assignment_call;
00052   static size_t nb_destruct_call;
00053 
00054   //See MovableStruct
00055   void* dummy_data[2];
00056 };
00057 
00058 size_t CompleteMovableStruct::nb_dft_construct_call = 0;
00059 size_t CompleteMovableStruct::nb_cpy_construct_call = 0;
00060 size_t CompleteMovableStruct::nb_mv_construct_call = 0;
00061 size_t CompleteMovableStruct::nb_assignment_call = 0;
00062 size_t CompleteMovableStruct::nb_destruct_call = 0;
00063 
00064 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00065 #  if defined (_STLP_USE_NAMESPACES)
00066 namespace std {
00067 #  endif
00068   _STLP_TEMPLATE_NULL
00069   struct __move_traits<CompleteMovableStruct> {
00070     typedef __true_type implemented;
00071     typedef __true_type complete;
00072   };
00073 #  if defined (_STLP_USE_NAMESPACES)
00074 }
00075 #  endif
00076 #endif
00077 
00078 void MoveConstructorTest::move_traits()
00079 {
00080   move_traits_vec();
00081   move_traits_vec_complete();
00082   move_traits_deq();
00083   move_traits_deq_complete();
00084 }
00085 
00086 void MoveConstructorTest::move_traits_vec()
00087 {
00088   {
00089     {
00090       vector<MovableStruct> vect;
00091       vect.push_back(MovableStruct());
00092       vect.push_back(MovableStruct());
00093       vect.push_back(MovableStruct());
00094       vect.push_back(MovableStruct());
00095 
00096       // vect contains 4 elements
00097       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );
00098 #if defined (STLPORT)
00099 #  if !defined (_STLP_NO_MOVE_SEMANTIC)
00100       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00101       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 );
00102 #  else
00103       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 );
00104 #  endif
00105       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 );
00106 #elif !defined (_MSC_VER)
00107       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 7 );
00108       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 7 );
00109 #else
00110       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 14 );
00111       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 14 );
00112 #endif
00113       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );
00114 
00115       // Following test violate requirements to sequiences (23.1.1 Table 67)
00116       /*
00117       vect.insert(vect.begin() + 2, vect.begin(), vect.end());
00118       // vect contains 8 elements
00119       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );
00120       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );
00121       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 );
00122       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 );
00123       */
00124 
00125       MovableStruct::reset();
00126       vector<MovableStruct> v2 = vect;
00127       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );
00128       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00129       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );
00130       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );
00131       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );
00132 
00133       MovableStruct::reset();
00134       vect.insert(vect.begin() + 2, v2.begin(), v2.end() );
00135 
00136       // vect contains 8 elements
00137       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );
00138 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00139       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00140       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 4 );
00141 #else
00142       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );
00143 #endif
00144       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );
00145       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );
00146 
00147       MovableStruct::reset();
00148       vect.erase(vect.begin(), vect.begin() + 2 );
00149 
00150       // vect contains 6 elements
00151 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00152       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 6 );
00153       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 8 );
00154 #else
00155       CPPUNIT_ASSERT_EQUAL( MovableStruct::nb_assignment_call, 6 );
00156       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );
00157 #endif
00158 
00159       MovableStruct::reset();
00160       vect.erase(vect.end() - 2, vect.end());
00161 
00162       // vect contains 4 elements
00163       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );
00164       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );
00165 
00166       MovableStruct::reset();
00167       vect.erase(vect.begin());
00168 
00169       // vect contains 3 elements
00170 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00171       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 3 );
00172       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );
00173 #else
00174       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 3 );
00175       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 );
00176 #endif
00177 
00178       MovableStruct::reset();
00179     }
00180     //vect with 3 elements and v2 with 4 elements are now out of scope
00181     CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 );
00182   }
00183 }
00184 
00185 void MoveConstructorTest::move_traits_vec_complete()
00186 {
00187   {
00188     {
00189       vector<CompleteMovableStruct> vect;
00190       vect.push_back(CompleteMovableStruct());
00191       vect.push_back(CompleteMovableStruct());
00192       vect.push_back(CompleteMovableStruct());
00193       vect.push_back(CompleteMovableStruct());
00194 
00195       // vect contains 4 elements
00196       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );
00197 #if defined (STLPORT)
00198 #  if !defined (_STLP_NO_MOVE_SEMANTIC)
00199       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00200       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 );
00201       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );
00202 #  else
00203       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 );
00204       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 );
00205 #  endif
00206 #elif !defined (_MSC_VER)
00207       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 7 );
00208       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 7 );
00209 #else
00210       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 14 );
00211       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 14 );
00212 #endif
00213 
00214       // Following test violate requirements to sequiences (23.1.1 Table 67)
00215       /*
00216       vect.insert(vect.begin() + 2, vect.begin(), vect.end());
00217 
00218       // vect contains 8 elements
00219       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );
00220       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );
00221       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 );
00222       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );
00223       */
00224 
00225       CompleteMovableStruct::reset();
00226       vector<CompleteMovableStruct> v2 = vect;
00227 
00228       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );
00229       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00230       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );
00231       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );
00232 
00233       CompleteMovableStruct::reset();
00234       vect.insert(vect.begin() + 2, v2.begin(), v2.end());
00235 
00236       // vect contains 8 elements
00237       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );
00238 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00239       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00240       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 4 );
00241       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );
00242 #else
00243       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );
00244       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );
00245 #endif
00246 
00247       CompleteMovableStruct::reset();
00248       vect.erase(vect.begin(), vect.begin() + 2);
00249 
00250       // vect contains 6 elements
00251 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00252       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 6 );
00253 #else
00254       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 6 );
00255 #endif
00256       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );
00257 
00258       CompleteMovableStruct::reset();
00259       vect.erase(vect.end() - 2, vect.end());
00260 
00261       // vect contains 4 elements
00262       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );
00263       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );
00264 
00265       CompleteMovableStruct::reset();
00266       vect.erase(vect.begin());
00267 
00268       // vect contains 3 elements
00269 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00270       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 3 );
00271 #else
00272       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 3 );
00273 #endif
00274       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 );
00275 
00276       CompleteMovableStruct::reset();
00277     }
00278     //vect with 3 elements and v2 with 4 elements are now out of scope
00279     CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 );
00280   }
00281 }
00282 
00283 void MoveConstructorTest::move_traits_deq()
00284 {
00285   {
00286     MovableStruct::reset();
00287     {
00288       deque<MovableStruct> deq;
00289       deq.push_back(MovableStruct());
00290       deq.push_back(MovableStruct());
00291       deq.push_back(MovableStruct());
00292       deq.push_back(MovableStruct());
00293 
00294       // deq contains 4 elements
00295       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );
00296       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00297       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );
00298       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 4 );
00299 
00300       // Following test violate requirements to sequiences (23.1.1 Table 67)
00301       /*
00302       deq.insert(deq.begin() + 2, deq.begin(), deq.end());
00303       // deq contains 8 elements
00304       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 4 );
00305       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 8 );
00306       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 7 );
00307       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 11 );
00308       */
00309 
00310       MovableStruct::reset();
00311       deque<MovableStruct> d2 = deq;
00312 
00313       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );
00314       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00315       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );
00316       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );
00317 
00318       MovableStruct::reset();
00319       deq.insert(deq.begin() + 2, d2.begin(), d2.end() );
00320 
00321       // deq contains 8 elements
00322       CPPUNIT_ASSERT( MovableStruct::nb_dft_construct_call == 0 );
00323       CPPUNIT_ASSERT( MovableStruct::nb_cpy_construct_call == 4 );
00324 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00325       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 2 );
00326       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );
00327 #else
00328       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 2 );
00329       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 0 );
00330 #endif
00331 
00332       MovableStruct::reset();
00333       deq.erase(deq.begin() + 1, deq.begin() + 3 );
00334 
00335       // deq contains 6 elements
00336 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00337       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 );
00338       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 );
00339 #else
00340       //Following check is highly deque implementation dependant so
00341       //it might not always work...
00342       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 );
00343       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );
00344 #endif
00345 
00346       MovableStruct::reset();
00347       deq.erase(deq.end() - 3, deq.end() - 1);
00348 
00349       // deq contains 4 elements
00350 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00351       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 1 );
00352       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 );
00353 #else
00354       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 1 );
00355       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 2 );
00356 #endif
00357 
00358       MovableStruct::reset();
00359       deq.erase(deq.begin());
00360 
00361       // deq contains 3 elements
00362 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00363       CPPUNIT_ASSERT( MovableStruct::nb_mv_construct_call == 0 );
00364 #else
00365       CPPUNIT_ASSERT( MovableStruct::nb_assignment_call == 0 );
00366 #endif
00367       CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 1 );
00368 
00369       MovableStruct::reset();
00370     }
00371     //deq with 3 elements and d2 with 4 elements are now out of scope
00372     CPPUNIT_ASSERT( MovableStruct::nb_destruct_call == 3 + 4 );
00373   }
00374 }
00375 
00376 void MoveConstructorTest::move_traits_deq_complete()
00377 {
00378   {
00379     CompleteMovableStruct::reset();
00380     {
00381       deque<CompleteMovableStruct> deq;
00382       deq.push_back(CompleteMovableStruct());
00383       deq.push_back(CompleteMovableStruct());
00384       deq.push_back(CompleteMovableStruct());
00385       deq.push_back(CompleteMovableStruct());
00386 
00387       // deq contains 4 elements
00388       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );
00389       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00390       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );
00391       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );
00392 
00393       // Following test violate requirements to sequiences (23.1.1 Table 67)
00394       /*
00395       deq.insert(deq.begin() + 2, deq.begin(), deq.end());
00396 
00397       // deq contains 8 elements
00398       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 4 );
00399       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 8 );
00400       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 7 );
00401       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 4 );
00402       */
00403 
00404       CompleteMovableStruct::reset();
00405       deque<CompleteMovableStruct> d2 = deq;
00406 
00407       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );
00408       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00409       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );
00410       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );
00411 
00412       CompleteMovableStruct::reset();
00413       deq.insert(deq.begin() + 2, d2.begin(), d2.end());
00414 
00415       // deq contains 8 elements
00416       CPPUNIT_ASSERT( CompleteMovableStruct::nb_dft_construct_call == 0 );
00417       CPPUNIT_ASSERT( CompleteMovableStruct::nb_cpy_construct_call == 4 );
00418 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00419       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 2 );
00420 #else
00421       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 2 );
00422 #endif
00423       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 0 );
00424 
00425       CompleteMovableStruct::reset();
00426       deq.erase(deq.begin() + 1, deq.begin() + 3);
00427 
00428       // deq contains 6 elements
00429 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00430       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 );
00431 #else
00432       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 );
00433 #endif
00434       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );
00435 
00436       CompleteMovableStruct::reset();
00437       deq.erase(deq.end() - 3, deq.end() - 1);
00438 
00439       // deq contains 4 elements
00440 #if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
00441       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 1 );
00442 #else
00443       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 1 );
00444 #endif
00445       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 2 );
00446 
00447       CompleteMovableStruct::reset();
00448       deq.erase(deq.begin());
00449 
00450       // deq contains 3 elements
00451       CPPUNIT_ASSERT( CompleteMovableStruct::nb_mv_construct_call == 0 );
00452       CPPUNIT_ASSERT( CompleteMovableStruct::nb_assignment_call == 0 );
00453       CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 1 );
00454 
00455       CompleteMovableStruct::reset();
00456     }
00457     //deq with 3 elements and v2 with 4 elements are now out of scope
00458     CPPUNIT_ASSERT( CompleteMovableStruct::nb_destruct_call == 3 + 4 );
00459   }
00460 }

Generated on Sun May 27 2012 04:35:38 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.