Home | History | Annotate | Download | only in runtime
      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 
     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         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