Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

OSGTypedFunctors2.inl

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002  *                                OpenSG                                     *
00003  *                                                                           *
00004  *                                                                           *
00005  *             Copyright (C) 2002 by the OpenSG Forum                        *
00006  *                                                                           *
00007  *                            www.opensg.org                                 *
00008  *                                                                           *
00009  *   contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de          *
00010  *                                                                           *
00011 \*---------------------------------------------------------------------------*/
00012 /*---------------------------------------------------------------------------*\
00013  *                                License                                    *
00014  *                                                                           *
00015  * This library is free software; you can redistribute it and/or modify it   *
00016  * under the terms of the GNU Library General Public License as published    *
00017  * by the Free Software Foundation, version 2.                               *
00018  *                                                                           *
00019  * This library is distributed in the hope that it will be useful, but       *
00020  * WITHOUT ANY WARRANTY; without even the implied warranty of                *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
00022  * Library General Public License for more details.                          *
00023  *                                                                           *
00024  * You should have received a copy of the GNU Library General Public         *
00025  * License along with this library; if not, write to the Free Software       *
00026  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
00027  *                                                                           *
00028 \*---------------------------------------------------------------------------*/
00029 /*---------------------------------------------------------------------------*\
00030  *                                Changes                                    *
00031  *                                                                           *
00032  *                                                                           *
00033  *                                                                           *
00034  *                                                                           *
00035  *                                                                           *
00036  *                                                                           *
00037 \*---------------------------------------------------------------------------*/
00038 
00039 //---------------------------------------------------------------------------
00040 //  Includes
00041 //---------------------------------------------------------------------------
00042 
00043 #include <stdlib.h>
00044 #include <stdio.h>
00045 
00046 #include "OSGConfig.h"
00047 
00048 #include <iostream>
00049 
00050 OSG_BEGIN_NAMESPACE
00051 
00052 
00053 //---------------------------------------------------------------------------
00054 //  TypedFunctor2Base
00055 //---------------------------------------------------------------------------
00056 
00057 
00058 template <class RetT,
00059           class CallArgT,
00060           class ArgsT,
00061           class SizeTraitsT> inline
00062 TypedFunctor2Base<RetT, 
00063                   CallArgT,
00064                   ArgsT,
00065                   SizeTraitsT>::TypedFunctor2Base(void) :
00066     Inherited()
00067 {
00068 }
00069 
00070 
00071 template <class RetT,
00072           class CallArgT,
00073           class ArgsT,
00074           class SizeTraitsT> inline
00075 TypedFunctor2Base<RetT, 
00076                   CallArgT,
00077                   ArgsT, 
00078                   SizeTraitsT>::TypedFunctor2Base(
00079     const TypedFunctor2Base &source) :
00080 
00081     Inherited(source)
00082 {
00083     Self::postCopyConstruct(source);
00084 }
00085 
00086 
00087 template <class RetT,
00088           class CallArgT,
00089           class ArgsT,
00090           class SizeTraitsT> inline
00091 TypedFunctor2Base<RetT, 
00092                   CallArgT,
00093                   ArgsT, 
00094                   SizeTraitsT>::~TypedFunctor2Base(void)
00095 {
00096 }
00097 
00098 
00099 #ifdef __sgi
00100 #pragma set woff 1551 
00101 #endif
00102 
00103 #if defined(OSG_WIN32_CL_NET70) 
00104 #pragma warning (disable : 4700)
00105 #endif
00106 
00107 template <class RetT,
00108           class CallArgT,
00109           class ArgsT,
00110           class SizeTraitsT> inline
00111 RetT TypedFunctor2Base<RetT, 
00112                        CallArgT,
00113                        ArgsT,
00114                        SizeTraitsT>::call(CallArgType, Arg1Type)
00115 {
00116     FWARNING(("TypedFunctor2Base::call called, undefined behaviour "
00117                  "might be the consequence\n"));
00118 
00119     return RetT();
00120 }
00121 
00122 #if defined(OSG_WIN32_CL_NET70) 
00123 #pragma warning (default : 4700)
00124 #endif
00125 
00126 #ifdef __sgi
00127 #pragma reset woff 1551 
00128 #endif
00129 
00130 
00131 template <class RetT,
00132           class CallArgT,
00133           class ArgsT,
00134           class SizeTraitsT> inline
00135 void TypedFunctor2Base<RetT, 
00136                        CallArgT, 
00137                        ArgsT, 
00138                        SizeTraitsT>::operator =(
00139     const TypedFunctor2Base &source)
00140 {
00141     if(this != &source)
00142     {
00143         *(static_cast<Inherited *>(this)) = source;
00144     }
00145 }
00146 
00147 
00148 
00149 
00150 //---------------------------------------------------------------------------
00151 //  TypedVoidFunctor2Base
00152 //---------------------------------------------------------------------------
00153 
00154 
00155 template <class CallArgT, class ArgsT, class SizeTraitsT> inline
00156 TypedVoidFunctor2Base<CallArgT,
00157                       ArgsT, 
00158                       SizeTraitsT>::TypedVoidFunctor2Base(void) :
00159     Inherited()
00160 {
00161 }
00162 
00163 
00164 template <class CallArgT, class ArgsT, class SizeTraitsT> inline
00165 TypedVoidFunctor2Base<CallArgT, 
00166                       ArgsT, 
00167                       SizeTraitsT>::TypedVoidFunctor2Base(
00168     const TypedVoidFunctor2Base &source) :
00169 
00170     Inherited(source)
00171 {
00172     Self::postCopyConstruct(source);
00173 }
00174 
00175 
00176 template <class CallArgT, class ArgsT, class SizeTraitsT> inline
00177 TypedVoidFunctor2Base<CallArgT,
00178                       ArgsT, 
00179                       SizeTraitsT>::~TypedVoidFunctor2Base(void)
00180 {
00181 }
00182 
00183 
00184 template <class CallArgT, class ArgsT, class SizeTraitsT> inline
00185 void TypedVoidFunctor2Base<CallArgT, 
00186                            ArgsT, 
00187                            SizeTraitsT>::call(CallArgType, Arg1Type)
00188 {
00189     FWARNING(("TypedFunctor2Base::call called, undefined behaviour "
00190               "might be the consequence\n"));
00191 }
00192 
00193 
00194 template <class CallArgT, class ArgsT, class SizeTraitsT> inline
00195 void TypedVoidFunctor2Base<CallArgT,
00196                            ArgsT, 
00197                            SizeTraitsT>::operator =(
00198     const TypedVoidFunctor2Base &source)
00199 {
00200     if(this != &source)
00201     {
00202         *(static_cast<Inherited *>(this)) = source;
00203     }
00204 }
00205 
00206 
00207 
00208 
00209 //---------------------------------------------------------------------------
00210 //  TypedFunctionFunctor2
00211 //---------------------------------------------------------------------------
00212 
00213 
00214 template <class RetT, 
00215           class CallArgT, 
00216           class ArgsT,
00217           class SizeTraitsT> inline
00218 TypedFunctionFunctor2<RetT, 
00219                       CallArgT,
00220                       ArgsT,
00221                       SizeTraitsT>::TypedFunctionFunctor2(void)  :
00222     Inherited()
00223 {
00224 }
00225 
00226 
00227 template <class RetT, 
00228           class CallArgT, 
00229           class ArgsT,
00230           class SizeTraitsT> inline
00231 TypedFunctionFunctor2<RetT,
00232                       CallArgT,
00233                       ArgsT,
00234                       SizeTraitsT>::TypedFunctionFunctor2(
00235     const TypedFunctionFunctor2 &source) : 
00236 
00237     Inherited(source) 
00238 {
00239 }
00240     
00241 
00242 template <class RetT, 
00243           class CallArgT, 
00244           class ArgsT,
00245           class SizeTraitsT> inline
00246 TypedFunctionFunctor2<RetT,
00247                       CallArgT,
00248                       ArgsT,
00249                       SizeTraitsT>::~TypedFunctionFunctor2(void) 
00250 {
00251 }
00252 
00253 
00254 #ifdef __sgi
00255 #pragma set woff 1551 
00256 #endif
00257 
00258 template <class RetT, 
00259           class CallArgT, 
00260           class ArgsT,
00261           class SizeTraitsT> inline
00262 RetT TypedFunctionFunctor2<RetT, 
00263                            CallArgT,
00264                            ArgsT,
00265                            SizeTraitsT>::call(CallArgType obj,
00266                                               Arg1        oArg1) 
00267 { 
00268     typedef typename Self::FunctionF FuncF;
00269 
00270     if(Self::_flags & Self::FuncPtrValid)
00271     {
00272         FuncF pFunc = *((FuncF *) Self::_data2);
00273         
00274         return pFunc(obj, oArg1);
00275     }
00276     else
00277     {
00278         return RetT();
00279     }
00280 }
00281 
00282 #ifdef __sgi
00283 #pragma reset woff 1551 
00284 #endif
00285 
00286 
00287 
00288 
00289 //---------------------------------------------------------------------------
00290 //  TypedFunctionVoidFunctor2
00291 //---------------------------------------------------------------------------
00292 
00293 
00294 template <class CallArgT, 
00295           class ArgsT,
00296           class SizeTraitsT> inline
00297 TypedFunctionVoidFunctor2<CallArgT,
00298                           ArgsT,
00299                           SizeTraitsT>::TypedFunctionVoidFunctor2(void)  :
00300     Inherited()
00301 {
00302 }
00303 
00304 
00305 template <class CallArgT, 
00306           class ArgsT,
00307           class SizeTraitsT> inline
00308 TypedFunctionVoidFunctor2<CallArgT,
00309                           ArgsT,
00310                           SizeTraitsT>::TypedFunctionVoidFunctor2(
00311     const TypedFunctionVoidFunctor2 &source) : 
00312 
00313     Inherited(source) 
00314 {
00315 }
00316 
00317 
00318 template <class CallArgT, 
00319           class ArgsT,
00320           class SizeTraitsT> inline
00321 TypedFunctionVoidFunctor2<CallArgT,
00322                           ArgsT,
00323                           SizeTraitsT>::~TypedFunctionVoidFunctor2(void) 
00324 {
00325 }
00326 
00327 
00328 template <class CallArgT, 
00329           class ArgsT,
00330           class SizeTraitsT> inline
00331 void TypedFunctionVoidFunctor2<CallArgT,
00332                                ArgsT,
00333                                SizeTraitsT>::call(CallArgType obj,
00334                                                   Arg1        oArg1) 
00335 { 
00336     typedef typename Self::FunctionF FuncF;
00337 
00338     if(Self::_flags & Self::FuncPtrValid)
00339     {
00340         FuncF pFunc = *((FuncF *) Self::_data2);
00341         
00342         pFunc(obj, oArg1);
00343     }
00344 }
00345 
00346 
00347 
00348 
00349 //---------------------------------------------------------------------------
00350 //  TypedObjectFunctor2
00351 //---------------------------------------------------------------------------
00352 
00353 
00354 template <class RetT, 
00355           class CallArgT, 
00356           class ArgsT,
00357           class SizeTraitsT> inline
00358 TypedObjectFunctor2<RetT, 
00359                     CallArgT,
00360                     ArgsT,
00361                     SizeTraitsT>::TypedObjectFunctor2(void)  :
00362     Inherited()
00363 {
00364 }
00365 
00366 
00367 template <class RetT, 
00368           class CallArgT, 
00369           class ArgsT,
00370           class SizeTraitsT> inline
00371 TypedObjectFunctor2<RetT,
00372                     CallArgT,
00373                     ArgsT,
00374                     SizeTraitsT>::TypedObjectFunctor2(
00375     const TypedObjectFunctor2 &source) : 
00376 
00377     Inherited(source) 
00378 {
00379 }
00380 
00381 
00382 template <class RetT, 
00383           class CallArgT, 
00384           class ArgsT,
00385           class SizeTraitsT> inline
00386 TypedObjectFunctor2<RetT,
00387                     CallArgT,
00388                     ArgsT,
00389                     SizeTraitsT>::~TypedObjectFunctor2(void) 
00390 {
00391 }
00392 
00393 
00394 #ifdef __sgi
00395 #pragma set woff 1551 
00396 #endif
00397 
00398 template <class RetT, 
00399           class CallArgT, 
00400           class ArgsT,
00401           class SizeTraitsT> inline
00402 RetT TypedObjectFunctor2<RetT, 
00403                          CallArgT,
00404                          ArgsT,
00405                          SizeTraitsT>::call(CallArgType obj,
00406                                             Arg1        oArg1) 
00407 { 
00408     if(Self::_flags & Self::FuncPtrValid)
00409     {
00410         return TypeTraits::callObjectMethod(Self::_data2, obj, oArg1);
00411     }
00412     else
00413     {
00414         return RetT();
00415     }
00416 }
00417 
00418 #ifdef __sgi
00419 #pragma reset woff 1551 
00420 #endif
00421 
00422 
00423 
00424 
00425 //---------------------------------------------------------------------------
00426 //  TypedObjectVoidFunctor2
00427 //---------------------------------------------------------------------------
00428 
00429 
00430 template <class CallArgT, 
00431           class ArgsT,
00432           class SizeTraitsT> inline
00433 TypedObjectVoidFunctor2<CallArgT,
00434                         ArgsT,
00435                         SizeTraitsT>::TypedObjectVoidFunctor2(void)  :
00436     Inherited()
00437 {
00438 }
00439 
00440 
00441 template <class CallArgT, 
00442           class ArgsT,
00443           class SizeTraitsT> inline
00444 TypedObjectVoidFunctor2<CallArgT,
00445                         ArgsT,
00446                         SizeTraitsT>::TypedObjectVoidFunctor2(
00447     const TypedObjectVoidFunctor2 &source) : 
00448 
00449     Inherited(source) 
00450 {
00451 }
00452 
00453 
00454 template <class CallArgT, 
00455           class ArgsT,
00456           class SizeTraitsT> inline
00457 TypedObjectVoidFunctor2<CallArgT,
00458                         ArgsT,
00459                         SizeTraitsT>::~TypedObjectVoidFunctor2(void) 
00460 {
00461 }
00462 
00463 
00464 template <class CallArgT, 
00465           class ArgsT,
00466           class SizeTraitsT> inline
00467 void TypedObjectVoidFunctor2<CallArgT,
00468                              ArgsT,
00469                              SizeTraitsT>::call(CallArgType obj,
00470                                                 Arg1        oArg1) 
00471 { 
00472     if(Self::_flags & Self::FuncPtrValid)
00473     {
00474         TypeTraits::callObjectMethodVoid(Self::_data2, obj, oArg1);
00475     }
00476 }
00477 
00478 
00479 
00480 
00481 //---------------------------------------------------------------------------
00482 //  TypedStoredObjectFunctor2
00483 //---------------------------------------------------------------------------
00484 
00485 
00486 template <class RetT, 
00487           class StoredObjectT,
00488           class ArgObjectT, 
00489           class ArgsT,
00490           class SizeTraitsT> inline
00491 TypedStoredObjectFunctor2<RetT, 
00492                           StoredObjectT,
00493                           ArgObjectT,
00494                           ArgsT,
00495                           SizeTraitsT>::TypedStoredObjectFunctor2(void) :
00496     Inherited()
00497 {
00498 }
00499 
00500 
00501 template <class RetT, 
00502           class StoredObjectT,
00503           class ArgObjectT, 
00504           class ArgsT,
00505           class SizeTraitsT> inline
00506 TypedStoredObjectFunctor2<RetT,
00507                           StoredObjectT,
00508                           ArgObjectT,
00509                           ArgsT,
00510                           SizeTraitsT>::TypedStoredObjectFunctor2(
00511     const TypedStoredObjectFunctor2 &source) : 
00512 
00513     Inherited(source) 
00514 {
00515 }
00516     
00517 
00518 template <class RetT, 
00519           class StoredObjectT,
00520           class ArgObjectT, 
00521           class ArgsT,
00522           class SizeTraitsT> inline
00523 TypedStoredObjectFunctor2<RetT,
00524                           StoredObjectT,
00525                           ArgObjectT,
00526                           ArgsT, 
00527                           SizeTraitsT>::~TypedStoredObjectFunctor2(void) 
00528 {
00529 }
00530 
00531 
00532 #ifdef __sgi
00533 #pragma set woff 1551 
00534 #endif
00535 
00536 template <class RetT, 
00537           class StoredObjectT,
00538           class ArgObjectT, 
00539           class ArgsT,
00540           class SizeTraitsT> inline
00541 RetT TypedStoredObjectFunctor2<RetT, 
00542                                StoredObjectT,
00543                                ArgObjectT,
00544                                ArgsT,
00545                                SizeTraitsT>::call(CallArgType obj,
00546                                                   Arg1        oArg1) 
00547 { 
00548     if(Self::_flags & Self::FuncPtrValid &&
00549        Self::_flags & Self::ObjectValid)
00550     {
00551         return TypeSOTraits::callObjectMethod(Self::_data1, 
00552                                               Self::_data2, 
00553                                                obj,
00554                                                oArg1);
00555     }
00556     else
00557     {
00558         return RetT();
00559     }
00560 }
00561 
00562 #ifdef __sgi
00563 #pragma reset woff 1551 
00564 #endif
00565 
00566 
00567 
00568 
00569 //---------------------------------------------------------------------------
00570 //  TypedStoredObjectVoidFunctor2
00571 //---------------------------------------------------------------------------
00572 
00573 
00574 template <class StoredObjectT, 
00575           class ArgObjectT,
00576           class ArgsT,
00577           class SizeTraitsT> inline
00578 TypedStoredObjectVoidFunctor2<StoredObjectT,
00579                               ArgObjectT,
00580                               ArgsT,
00581                               SizeTraitsT>::TypedStoredObjectVoidFunctor2(
00582                                   void) :
00583     Inherited()
00584 {
00585 }
00586 
00587 
00588 template <class StoredObjectT, 
00589           class ArgObjectT,
00590           class ArgsT,
00591           class SizeTraitsT> inline
00592 TypedStoredObjectVoidFunctor2<StoredObjectT,
00593                               ArgObjectT,
00594                               ArgsT,
00595                               SizeTraitsT>::TypedStoredObjectVoidFunctor2(
00596     const TypedStoredObjectVoidFunctor2 &source) : 
00597 
00598     Inherited(source) 
00599 {
00600 }
00601 
00602 
00603 template <class StoredObjectT, 
00604           class ArgObjectT,
00605           class ArgsT,
00606           class SizeTraitsT> inline
00607 TypedStoredObjectVoidFunctor2<StoredObjectT,
00608                               ArgObjectT,
00609                               ArgsT,
00610                               SizeTraitsT>::~TypedStoredObjectVoidFunctor2(
00611     void) 
00612 {
00613 }
00614 
00615 
00616 template <class StoredObjectT, 
00617           class ArgObjectT,
00618           class ArgsT,
00619           class SizeTraitsT> inline
00620 void TypedStoredObjectVoidFunctor2<StoredObjectT,
00621                                    ArgObjectT,
00622                                    ArgsT,
00623                                    SizeTraitsT>::call(CallArgType obj,
00624                                                       Arg1        oArg1) 
00625 { 
00626     if(Self::_flags & Self::FuncPtrValid &&
00627        Self::_flags & Self::ObjectValid)
00628     {
00629         TypeSOTraits::callObjectMethodVoid(Self::_data1, 
00630                                            Self::_data2, 
00631                                            obj,
00632                                            oArg1);
00633     }
00634 }
00635 
00636 OSG_END_NAMESPACE
00637 
00638 
00639 
00640 
00641 

Generated on Thu Aug 25 04:11:55 2005 for OpenSG by  doxygen 1.4.3