1 20 21 package JFlex; 22 23 29 public class CountEmitter extends PackEmitter { 30 31 private int numEntries; 32 33 34 private int translate = 0; 35 36 37 42 protected CountEmitter(String name) { 43 super(name); 44 } 45 46 51 public void emitUnpack() { 52 println("\";"); 54 55 nl(); 56 println(" private static int [] zzUnpack"+name+"() {"); 57 println(" int [] result = new int["+numEntries+"];"); 58 println(" int offset = 0;"); 59 60 for (int i = 0; i < chunks; i++) { 61 println(" offset = zzUnpack"+name+"("+constName()+"_PACKED_"+i+", offset, result);"); 62 } 63 64 println(" return result;"); 65 println(" }"); 66 nl(); 67 68 println(" private static int zzUnpack"+name+"(String packed, int offset, int [] result) {"); 69 println(" int i = 0; /* index in packed string */"); 70 println(" int j = offset; /* index in unpacked array */"); 71 println(" int l = packed.length();"); 72 println(" while (i < l) {"); 73 println(" int count = packed.charAt(i++);"); 74 println(" int value = packed.charAt(i++);"); 75 if (translate == 1) { 76 println(" value--;"); 77 } 78 else if (translate != 0) { 79 println(" value-= "+translate); 80 } 81 println(" do result[j++] = value; while (--count > 0);"); 82 println(" }"); 83 println(" return j;"); 84 println(" }"); 85 } 86 87 95 public void setValTranslation(int i) { 96 this.translate = i; 97 } 98 99 109 public void emit(int count, int value) { 110 numEntries+= count; 111 breaks(); 112 emitUC(count); 113 emitUC(value+translate); 114 } 115 } 116 | Popular Tags |