Home | History | Annotate | Download | only in cst
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.dexgen.rop.cst;
     18 
     19 import com.android.dexgen.rop.type.Type;
     20 
     21 /**
     22  * Constants of type {@code boolean}.
     23  */
     24 public final class CstBoolean
     25         extends CstLiteral32 {
     26     /** {@code non-null;} instance representing {@code false} */
     27     public static final CstBoolean VALUE_FALSE = new CstBoolean(false);
     28 
     29     /** {@code non-null;} instance representing {@code true} */
     30     public static final CstBoolean VALUE_TRUE = new CstBoolean(true);
     31 
     32     /**
     33      * Makes an instance for the given value. This will return an
     34      * already-allocated instance.
     35      *
     36      * @param value the {@code boolean} value
     37      * @return {@code non-null;} the appropriate instance
     38      */
     39     public static CstBoolean make(boolean value) {
     40         return value ? VALUE_TRUE : VALUE_FALSE;
     41     }
     42 
     43     /**
     44      * Makes an instance for the given {@code int} value. This
     45      * will return an already-allocated instance.
     46      *
     47      * @param value must be either {@code 0} or {@code 1}
     48      * @return {@code non-null;} the appropriate instance
     49      */
     50     public static CstBoolean make(int value) {
     51         if (value == 0) {
     52             return VALUE_FALSE;
     53         } else if (value == 1) {
     54             return VALUE_TRUE;
     55         } else {
     56             throw new IllegalArgumentException("bogus value: " + value);
     57         }
     58     }
     59 
     60     /**
     61      * Constructs an instance. This constructor is private; use {@link #make}.
     62      *
     63      * @param value the {@code boolean} value
     64      */
     65     private CstBoolean(boolean value) {
     66         super(value ? 1 : 0);
     67     }
     68 
     69     /** {@inheritDoc} */
     70     @Override
     71     public String toString() {
     72         return getValue() ? "boolean{true}" : "boolean{false}";
     73     }
     74 
     75     /** {@inheritDoc} */
     76     public Type getType() {
     77         return Type.BOOLEAN;
     78     }
     79 
     80     /** {@inheritDoc} */
     81     @Override
     82     public String typeName() {
     83         return "boolean";
     84     }
     85 
     86     /** {@inheritDoc} */
     87     public String toHuman() {
     88         return getValue() ? "true" : "false";
     89     }
     90 
     91     /**
     92      * Gets the {@code boolean} value.
     93      *
     94      * @return the value
     95      */
     96     public boolean getValue() {
     97         return (getIntBits() == 0) ? false : true;
     98     }
     99 }
    100