/Users/lyon/j4p/src/javassist/runtime/Cflow.java
|
1 /*
2 * Javassist, a Java-bytecode translator toolkit.
3 * Copyright (C) 1999-2003 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
16 package 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 */
25 public class Cflow extends ThreadLocal {
26 private static class Depth {
27 private int depth;
28
29 Depth() {
30 depth = 0;
31 }
32
33 int get() {
34 return depth;
35 }
36
37 void inc() {
38 ++depth;
39 }
40
41 void dec() {
42 --depth;
43 }
44 }
45
46 protected synchronized Object initialValue() {
47 return new Depth();
48 }
49
50 /**
51 * Increments the counter.
52 */
53 public void enter() {
54 ((Depth) get()).inc();
55 }
56
57 /**
58 * Decrements the counter.
59 */
60 public void exit() {
61 ((Depth) get()).dec();
62 }
63
64 /**
65 * Returns the value of the counter.
66 */
67 public int value() {
68 return ((Depth) get()).get();
69 }
70 }
71