JavaScope.h++
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __ccxx_JavaScope_hxx
00024 #define __ccxx_JavaScope_hxx
00025
00026 #include <commonc++/Common.h++>
00027 #include <commonc++/JavaContext.h++>
00028
00029 namespace ccxx {
00030
00054 class JavaScope
00055 {
00056 public:
00057
00062 JavaScope(JavaContext &context, int capacity)
00063 : _context(context), _once(true)
00064 {
00065 _context.pushLocalFrame(capacity);
00066 }
00067
00071 ~JavaScope()
00072 {
00073 _context.popLocalFrame();
00074 }
00075
00077 inline bool testOnce() throw()
00078 { bool f = _once; _once = false; return(f); }
00081 private:
00082
00083 JavaContext &_context;
00084 bool _once;
00085
00086 CCXX_COPY_DECLS(JavaScope);
00087 }
00088
00089 };
00090
00096 #ifdef java_scoped
00097 #undef java_scoped
00098 #endif java_scoped
00099
00100 #if (defined CCXX_OS_WINDOWS) && (defined _MSC_VER) && (_MSC_VER < 1400)
00101
00102 #define java_scoped(JC, CAP) \
00103 for(JavaScope JC ## _scope(JC, CAP); JC ## _scope.testOnce();)
00104
00105 #else
00106
00107 #define java_scoped(JC, CAP) \
00108 for(JavaScope CCXX_OS_UNIQUE_VARNAME(JC, __LINE__, scope)(JC, CAP); \
00109 CCXX_OS_UNIQUE_VARNAME(JC, __LINE__, scope).testOnce();)
00110
00111 #endif
00112
00113 #endif // __ccxx_JavaScope_hxx
00114
00115