Skip to content
Snippets Groups Projects
Select Git revision
  • 4ca867750560e3a129c5cdd2afca1eaf2ce12861
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/releaseWindowsTestOne
  • release/windowsReleaseTest
  • release/releaseTest
  • release/releaseWindowsTest
  • release/201910
  • release/qt/201910
  • release/windows-test/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • 4.0.0
  • 2.2.0
  • 2.1.0
  • 2.0.1
  • 2.0.0
  • 1.4.1
  • 1.4.0
  • 1.3.0
  • 1.2.0
  • 1.1.0
31 results

PrivateMembers.hpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    PrivateMembers.hpp 2.45 KiB
    /*
     *    Copyright (c) <2002-2004> <Jean-Philippe Barrette-LaPierre>
     *    
     *    Permission is hereby granted, free of charge, to any person obtaining
     *    a copy of this software and associated documentation files 
     *    (cURLpp), to deal in the Software without restriction, 
     *    including without limitation the rights to use, copy, modify, merge,
     *    publish, distribute, sublicense, and/or sell copies of the Software,
     *    and to permit persons to whom the Software is furnished to do so, 
     *    subject to the following conditions:
     *    
     *    The above copyright notice and this permission notice shall be included
     *    in all copies or substantial portions of the Software.
     *    
     *    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     *    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     *    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
     *    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 
     *    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
     *    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     *    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     */
    
    #ifndef PRIVATE_MEMBERS_HPP
    #define PRIVATE_MEMBERS_HPP
    
    #include <cassert>
    
    namespace utilspp
    {
      namespace PrivateMembers
      {
        /**
         * Helper class for utils::setLongevity
         */
        class LifetimeTracker
        {
        public:
          LifetimeTracker( unsigned int longevity );
          virtual ~LifetimeTracker();
          static bool compare( 
    			  const LifetimeTracker *l, 
    			  const LifetimeTracker *r
    			  );
    
        private:
          unsigned int mLongevity;
        };
    
        typedef LifetimeTracker** TrackerArray;
    
        extern TrackerArray mTrackerArray;
        extern int mNbElements;
    
        /**
         * Helper class for Destroyer
         */
        template< typename T >
        struct Deleter
        {
          void deleteObject( T *obj );
        };
    
        /**
         * Concrete lifetime tracker for objects of type T
         */
        template< typename T, typename TDestroyer >
        class ConcreteLifetimeTracker : public LifetimeTracker
        {
        public:
          ConcreteLifetimeTracker(T *obj, unsigned int longevity, TDestroyer d);
           
          ~ConcreteLifetimeTracker();
          
        private:
          T* mTracked;
          TDestroyer mDestroyer;
        };
        
        void atExitFunc();
        
        template <class T>
        struct adapter
        {
          void operator()(T*);
          void (*mFunc)();
        };
      };
    };
    
    #include "PrivateMembers.inl"
    
    #endif