1/* 2 * Javassist, a Java-bytecode translator toolkit. 3 * Copyright (C) 1999-2007 Shigeru Chiba. All Rights Reserved. 4 * 5 * The contents of this file are subject to the Mozilla Public License Version 6 * 1.1 (the "License"); you may not use this file except in compliance with 7 * the License. Alternatively, the contents of this file may be used under 8 * the terms of the GNU Lesser General Public License Version 2.1 or later. 9 * 10 * Software distributed under the License is distributed on an "AS IS" basis, 11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 12 * for the specific language governing rights and limitations under the 13 * License. 14 */ 15 16package javassist.runtime; 17 18/** 19 * A support class for implementing <code>$cflow</code>. 20 * This support class is required at runtime 21 * only if <code>$cflow</code> is used. 22 * 23 * @see javassist.CtBehavior#useCflow(String) 24 */ 25public class Cflow extends ThreadLocal { 26 private static class Depth { 27 private int depth; 28 Depth() { depth = 0; } 29 int get() { return depth; } 30 void inc() { ++depth; } 31 void dec() { --depth; } 32 } 33 34 protected synchronized Object initialValue() { 35 return new Depth(); 36 } 37 38 /** 39 * Increments the counter. 40 */ 41 public void enter() { ((Depth)get()).inc(); } 42 43 /** 44 * Decrements the counter. 45 */ 46 public void exit() { ((Depth)get()).dec(); } 47 48 /** 49 * Returns the value of the counter. 50 */ 51 public int value() { return ((Depth)get()).get(); } 52} 53