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

📄 countemitter.java

📁 java语法解释器生成器
💻 JAVA
字号:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * jflex 1.4                                                               * * Copyright (C) 1998-2008  Gerwin Klein <lsf@jflex.de>                    * * All rights reserved.                                                    * *                                                                         * * This program is free software; you can redistribute it and/or modify    * * it under the terms of the GNU General Public License. See the file      * * COPYRIGHT for more information.                                         * *                                                                         * * 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 JFlex;/** * An emitter for an array encoded as count/value pairs in a string. *  * @author Gerwin Klein * @version $Revision: 358 $, $Date: 2008-05-27 16:28:29 +1000 (Tue, 27 May 2008) $ */public class CountEmitter extends PackEmitter {  /** number of entries in expanded array */  private int numEntries;    /** translate all values by this amount */   private int translate = 0;  /**   * Create a count/value emitter for a specific field.   *    * @param name   name of the generated array   */  protected CountEmitter(String name) {    super(name);  }  /**   * Emits count/value unpacking code for the generated array.    *    * @see JFlex.PackEmitter#emitUnPack()   */  public void emitUnpack() {    // close last string chunk:    println("\";");        nl();    println("  private static int [] zzUnpack"+name+"() {");    println("    int [] result = new int["+numEntries+"];");    println("    int offset = 0;");    for (int i = 0; i < chunks; i++) {      println("    offset = zzUnpack"+name+"("+constName()+"_PACKED_"+i+", offset, result);");    }    println("    return result;");    println("  }");    nl();    println("  private static int zzUnpack"+name+"(String packed, int offset, int [] result) {");    println("    int i = 0;       /* index in packed string  */");    println("    int j = offset;  /* index in unpacked array */");    println("    int l = packed.length();");    println("    while (i < l) {");    println("      int count = packed.charAt(i++);");    println("      int value = packed.charAt(i++);");    if (translate == 1) {      println("      value--;");    }     else if (translate != 0) {      println("      value-= "+translate);    }    println("      do result[j++] = value; while (--count > 0);");    println("    }");    println("    return j;");    println("  }");  }  /**   * Translate all values by given amount.   *    * Use to move value interval from [0, 0xFFFF] to something different.   *    * @param i   amount the value will be translated by.    *            Example: <code>i = 1</code> allows values in [-1, 0xFFFE].   */  public void setValTranslation(int i) {    this.translate = i;      }  /**   * Emit one count/value pair.    *    * Automatically translates value by the <code>translate</code> value.    *    * @param count   * @param value   *    * @see CountEmitter#setValTranslation(int)   */  public void emit(int count, int value) {    numEntries+= count;    breaks();    emitUC(count);    emitUC(value+translate);          }}

⌨️ 快捷键说明

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