jdk/src/jdk.pack200/share/native/common-unpack/coding.h
changeset 42694 53aaff453c11
parent 42666 244b1c27b299
parent 42693 6645de32a866
child 42695 11e9b19ebd81
--- a/jdk/src/jdk.pack200/share/native/common-unpack/coding.h	Wed Dec 14 20:23:24 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,226 +0,0 @@
-/*
- * Copyright (c) 2002, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code 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
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-struct unpacker;
-
-#define INT_MAX_VALUE ((int)0x7FFFFFFF)
-#define INT_MIN_VALUE ((int)0x80000000)
-
-#define CODING_SPEC(B, H, S, D) ((B)<<20|(H)<<8|(S)<<4|(D)<<0)
-#define CODING_B(x) ((x)>>20 & 0xF)
-#define CODING_H(x) ((x)>>8  & 0xFFF)
-#define CODING_S(x) ((x)>>4  & 0xF)
-#define CODING_D(x) ((x)>>0  & 0xF)
-
-#define CODING_INIT(B, H, S, D) \
-  { CODING_SPEC(B, H, S, D) , 0, 0, 0, 0, 0, 0, 0, 0}
-
-// For debugging purposes, some compilers do not like this and will complain.
-//    #define long do_not_use_C_long_types_use_jlong_or_int
-// Use of the type "long" is problematic, do not use it.
-
-struct coding {
-  int  spec;  // B,H,S,D
-
-  // Handy values derived from the spec:
-  int B() { return CODING_B(spec); }
-  int H() { return CODING_H(spec); }
-  int S() { return CODING_S(spec); }
-  int D() { return CODING_D(spec); }
-  int L() { return 256-CODING_H(spec); }
-  int  min, max;
-  int  umin, umax;
-  char isSigned, isSubrange, isFullRange, isMalloc;
-
-  coding* init();  // returns self or null if error
-  coding* initFrom(int spec_) {
-    assert(this->spec == 0);
-    this->spec = spec_;
-    return init();
-  }
-
-  static coding* findBySpec(int spec);
-  static coding* findBySpec(int B, int H, int S=0, int D=0);
-  static coding* findByIndex(int irregularCodingIndex);
-
-  static uint parse(byte* &rp, int B, int H);
-  static uint parse_lgH(byte* &rp, int B, int H, int lgH);
-  static void parseMultiple(byte* &rp, int N, byte* limit, int B, int H);
-
-  uint parse(byte* &rp) {
-    return parse(rp, CODING_B(spec), CODING_H(spec));
-  }
-  void parseMultiple(byte* &rp, int N, byte* limit) {
-    parseMultiple(rp, N, limit, CODING_B(spec), CODING_H(spec));
-  }
-
-  bool canRepresent(int x)         { return (x >= min  && x <= max);  }
-  bool canRepresentUnsigned(int x) { return (x >= umin && x <= umax); }
-
-  int sumInUnsignedRange(int x, int y);
-
-  int readFrom(byte* &rpVar, int* dbase);
-  void readArrayFrom(byte* &rpVar, int* dbase, int length, int* values);
-  void skipArrayFrom(byte* &rpVar, int length) {
-    readArrayFrom(rpVar, (int*)NULL, length, (int*)NULL);
-  }
-
-#ifndef PRODUCT
-  const char* string();
-#endif
-
-  void free();  // free self if isMalloc
-
-  // error handling
-  static void abort(const char* msg = null) { unpack_abort(msg); }
-};
-
-enum coding_method_kind {
-  cmk_ERROR,
-  cmk_BHS,
-  cmk_BHS0,
-  cmk_BHS1,
-  cmk_BHSD1,
-  cmk_BHS1D1full,  // isFullRange
-  cmk_BHS1D1sub,   // isSubRange
-
-  // special cases hand-optimized (~50% of all decoded values)
-  cmk_BYTE1,         //(1,256)      6%
-  cmk_CHAR3,         //(3,128)      7%
-  cmk_UNSIGNED5,     //(5,64)      13%
-  cmk_DELTA5,        //(5,64,1,1)   5%
-  cmk_BCI5,          //(5,4)       18%
-  cmk_BRANCH5,       //(5,4,2)      4%
-//cmk_UNSIGNED5H16,  //(5,16)       5%
-//cmk_UNSIGNED2H4,   //(2,4)        6%
-//cmk_DELTA4H8,      //(4,8,1,1)   10%
-//cmk_DELTA3H16,     //(3,16,1,1)   9%
-  cmk_BHS_LIMIT,
-
-  cmk_pop,
-  cmk_pop_BHS0,
-  cmk_pop_BYTE1,
-  cmk_pop_LIMIT,
-
-  cmk_LIMIT
-};
-
-enum {
-  BYTE1_spec       = CODING_SPEC(1, 256, 0, 0),
-  CHAR3_spec       = CODING_SPEC(3, 128, 0, 0),
-  UNSIGNED4_spec   = CODING_SPEC(4, 256, 0, 0),
-  UNSIGNED5_spec   = CODING_SPEC(5, 64, 0, 0),
-  SIGNED5_spec     = CODING_SPEC(5, 64, 1, 0),
-  DELTA5_spec      = CODING_SPEC(5, 64, 1, 1),
-  UDELTA5_spec     = CODING_SPEC(5, 64, 0, 1),
-  MDELTA5_spec     = CODING_SPEC(5, 64, 2, 1),
-  BCI5_spec        = CODING_SPEC(5, 4, 0, 0),
-  BRANCH5_spec     = CODING_SPEC(5, 4, 2, 0)
-};
-
-enum {
-  B_MAX = 5,
-  C_SLOP = B_MAX*10
-};
-
-struct coding_method;
-
-// iterator under the control of a meta-coding
-struct value_stream {
-  // current coding of values or values
-  coding c;               // B,H,S,D,etc.
-  coding_method_kind cmk; // type of decoding needed
-  byte* rp;               // read pointer
-  byte* rplimit;          // final value of read pointer
-  int sum;                // partial sum of all values so far (D=1 only)
-  coding_method* cm;      // coding method that defines this stream
-
-  void init(byte* band_rp, byte* band_limit, coding* defc);
-  void init(byte* band_rp, byte* band_limit, int spec)
-    { init(band_rp, band_limit, coding::findBySpec(spec)); }
-
-  void setCoding(coding* c);
-  void setCoding(int spec) { setCoding(coding::findBySpec(spec)); }
-
-  // Parse and decode a single value.
-  int getInt();
-
-  // Parse and decode a single byte, with no error checks.
-  int getByte() {
-    assert(cmk == cmk_BYTE1);
-    assert(rp < rplimit);
-    return *rp++ & 0xFF;
-  }
-
-  // Used only for asserts.
-  bool hasValue();
-
-  void done() { assert(!hasValue()); }
-
-  // Sometimes a value stream has an auxiliary (but there are never two).
-  value_stream* helper() {
-    assert(hasHelper());
-    return this+1;
-  }
-  bool hasHelper();
-
-  // error handling
-  //  inline void abort(const char* msg);
-  //  inline void aborting();
-};
-
-struct coding_method {
-  value_stream vs0;       // initial state snapshot (vs.meta==this)
-
-  coding_method* next;    // what to do when we run out of bytes
-
-  // these fields are used for pop codes only:
-  int* fValues;           // favored value array
-  int  fVlength;          // maximum favored value token
-  coding_method* uValues; // unfavored value stream
-
-  // pointer to outer unpacker, for error checks etc.
-  unpacker* u;
-
-  // Initialize a value stream.
-  void reset(value_stream* state);
-
-  // Parse a band header, size a band, and initialize for further action.
-  // band_rp advances (but not past band_limit), and meta_rp advances.
-  // The mode gives context, such as "inside a pop".
-  // The defc and N are the incoming parameters to a meta-coding.
-  // The value sink is used to collect output values, when desired.
-  void init(byte* &band_rp, byte* band_limit,
-            byte* &meta_rp, int mode,
-            coding* defc, int N,
-            intlist* valueSink);
-
-  // error handling
-  void abort(const char* msg) { unpack_abort(msg, u); }
-  bool aborting()             { return unpack_aborting(u); }
-};
-
-//inline void value_stream::abort(const char* msg) { cm->abort(msg); }
-//inline void value_stream::aborting()             { cm->aborting(); }