Sirikata
|
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_