Sirikata
libcore/include/sirikata/core/util/InstanceMethodNotReentrant.hpp
Go to the documentation of this file.
00001 // Copyright (c) 2012 Sirikata Authors. All rights reserved.
00002 // Use of this source code is governed by a BSD-style license that can
00003 // be found in the LICENSE file.
00004 
00005 #ifndef _SIRIKATA_CORE_UTIL_INSTANCE_METHOD_NOT_REENTRANT_HPP_
00006 #define _SIRIKATA_CORE_UTIL_INSTANCE_METHOD_NOT_REENTRANT_HPP_
00007 
00008 #include <sirikata/core/util/Platform.hpp>
00009 
00010 namespace Sirikata {
00011 
00036 class SIRIKATA_EXPORT InstanceMethodNotReentrant {
00037 public:
00038     InstanceMethodNotReentrant()
00039 #if SIRIKATA_DEBUG
00040         : count(0)
00041 #endif
00042     {}
00043 
00044     class Token {
00045     public:
00046         Token(InstanceMethodNotReentrant& par)
00047 #if SIRIKATA_DEBUG
00048          : parent(par)
00049 #endif
00050         {
00051 #if SIRIKATA_DEBUG
00052             assert(parent.count == 0);
00053             parent.count++;
00054 #endif
00055         }
00056         ~Token() {
00057 #if SIRIKATA_DEBUG
00058             parent.count--;
00059 #endif
00060         }
00061 
00062     private:
00063 #if SIRIKATA_DEBUG
00064         InstanceMethodNotReentrant& parent;
00065 #endif
00066     };
00067 
00068 #if SIRIKATA_DEBUG
00069     char count;
00070 #endif
00071 }; // class InstanceMethodNotReentrant
00072 
00073 } // namespace Sirikata
00074 
00075 
00076 #endif //_SIRIKATA_CORE_UTIL_INSTANCE_METHOD_NOT_REENTRANT_HPP_