⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 instructionoffsetvalue.java

📁 j2me 混淆包,用于混淆j2me的原代码用的
💻 JAVA
字号:
/* $Id: InstructionOffsetValue.java,v 1.6 2004/12/04 19:34:42 eric Exp $ * * ProGuard -- shrinking, optimization, and obfuscation of Java class files. * * Copyright (c) 2002-2004 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */package proguard.optimize.evaluation.value;/** * This class represents a partially evaluated instruction offset. It can * contain 0 or more specific instruction offsets. * * @author Eric Lafortune */public class InstructionOffsetValue extends Category1Value{    private int[] values;    public InstructionOffsetValue()    {    }    public InstructionOffsetValue(int value)    {        this.values = new int[] { value };    }    public InstructionOffsetValue(int[] values)    {        this.values = values;    }    public int instructionOffsetCount()    {        return values == null ? 0 : values.length;    }    public int instructionOffset(int index)    {        return values[index];    }    /**     * Returns whether the given value is present in this list of instruction     * offsets.     */    public boolean contains(int value)    {        if (values != null)        {            for (int index = 0; index < values.length; index++)            {                if (values[index] == value)                {                    return true;                }            }        }        return false;    }    /**     * Returns the generalization of this InstructionOffsetValue and the given     * other InstructionOffsetValue. The values of the other InstructionOffsetValue     * are guaranteed to remain at the end of the list, in the same order.     */    public final Value generalize(InstructionOffsetValue other)    {        // If the values array of either is null, return the other one.        if (this.values == null)        {            return other;        }        if (other.values == null)        {            return this;        }        // Compute the length of the union of the arrays.        int newLength = this.values.length;        for (int index = 0; index < other.values.length; index++)        {            if (!this.contains(other.values[index]))            {                newLength++;            }        }        // If the length of the union array is equal to the length of the values        // array of either, return it.        if (newLength == other.values.length)        {            return other;        }        // The ordering of the this array may not be right, so we can't just        // use it.        //if (newLength == this.values.length)        //{        //    return this;        //}        // Create the union array.        int[] newValues = new int[newLength];        int newIndex = 0;        // Copy the values that are different from the other array.        for (int index = 0; index < this.values.length; index++)        {            if (!other.contains(this.values[index]))            {                newValues[newIndex++] = this.values[index];            }        }        // Copy the values from the other array.        for (int index = 0; index < other.values.length; index++)        {            newValues[newIndex++] = other.values[index];        }        return InstructionOffsetValueFactory.create(newValues);    }    // Implementations for Value.    public final InstructionOffsetValue instructionOffsetValue()    {        return this;    }    public final Value generalize(Value other)    {        return this.generalize(other.instructionOffsetValue());    }    public final int computationalType()    {        return TYPE_INSTRUCTION_OFFSET;    }    // Implementations for Object.    public boolean equals(Object object)    {        if (object == null ||            this.getClass() != object.getClass())        {            return false;        }        InstructionOffsetValue other = (InstructionOffsetValue)object;        if (this.values == other.values)        {            return true;        }        if (this.values  == null ||            other.values == null ||            this.values.length != other.values.length)        {            return false;        }        for (int index = 0; index < other.values.length; index++)        {            if (!this.contains(other.values[index]))            {                return false;            }        }        return true;    }    public int hashCode()    {        int hashCode = this.getClass().hashCode();        if (values != null)        {            for (int index = 0; index < values.length; index++)            {                hashCode ^= values[index];            }        }        return hashCode;    }    public String toString()    {        StringBuffer buffer = new StringBuffer("o:");        if (values != null)        {            for (int index = 0; index < values.length; index++)            {                if (index > 0)                {                    buffer.append(',');                }                buffer.append(values[index]);            }        }        return buffer.toString();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -