/* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.dx.rop.cst; /** * Constants which are literal bitwise values of some sort. */ public abstract class CstLiteralBits extends TypedConstant { /** * Returns whether or not this instance's value may be accurately * represented as an {@code int}. The rule is that if there * is an {@code int} which may be sign-extended to yield this * instance's value, then this method returns {@code true}. * Otherwise, it returns {@code false}. * * @return {@code true} iff this instance fits in an {@code int} */ public abstract boolean fitsInInt(); /** * Gets the value as {@code int} bits. If this instance contains * more bits than fit in an {@code int}, then this returns only * the low-order bits. * * @return the bits */ public abstract int getIntBits(); /** * Gets the value as {@code long} bits. If this instance contains * fewer bits than fit in a {@code long}, then the result of this * method is the sign extension of the value. * * @return the bits */ public abstract long getLongBits(); /** * Returns true if this value can fit in 16 bits with sign-extension. * * @return true if the sign-extended lower 16 bits are the same as * the value. */ public boolean fitsIn16Bits() { if (! fitsInInt()) { return false; } int bits = getIntBits(); return (short) bits == bits; } /** * Returns true if this value can fit in 8 bits with sign-extension. * * @return true if the sign-extended lower 8 bits are the same as * the value. */ public boolean fitsIn8Bits() { if (! fitsInInt()) { return false; } int bits = getIntBits(); return (byte) bits == bits; } }