/** * Read the next nb bits and return an Signed Long . * * @param nb the number of bits to convert to int, must be <= 64. * @return result * @throws java.io.IOException on read error */ public long bits2SInt(int nb) throws IOException { long result = bits2UInt(nb); // check if we're negative if (getBit(result, nb)) { // it's negative! reset leading bit result = setBit(result, nb, false); // build 2's-complement result = ~result & LONG_BITMASK; result = result + 1; } return result; }
BitReader reader = new BitReader(raf, startPos+5); if (nb != 0) { for (int i = 0; i < NG; i++) X1[i] = (int) reader.bits2UInt(nb); nb = gdrs.bitsGroupWidths; if (nb != 0) { reader.incrByte(); for (int i = 0; i < NG; i++) NB[i] = (int) reader.bits2UInt(nb); nb = gdrs.bitsScaledGroupLength; reader.incrByte(); for (int i = 0; i < NG; i++) L[i] = ref + (int) reader.bits2UInt(nb) * len_inc; L[NG - 1] = gdrs.lengthLastGroup; // enter Length of Last Group reader.incrByte(); for (int i = 0; i < NG; i++) { for (int j = 0; j < L[i]; j++) { int X2 = (int) reader.bits2UInt(NB[i]); if (mvm == 0) { data[count++] = (R + (X1[i] + X2) * EE) / DD;
int count = (int) reader.bits2UInt(dkey.replicationCountSize); if (out != null) out.f.format("%4d delayed replication count=%d %n", out.fldno++, count); if ((out != null) && (count > 0)) { out.f.format("%4d %s read sequence %s count= %d bitSize=%d start at=0x%x %n", out.fldno, out.indent(), dkey.getFxyName(), count, dkey.replicationCountSize, reader.getPos()); String s = new String(vals, CDM.utf8Charset); out.f.format("%4d %s read char %s (%s) width=%d end at= 0x%x val=<%s>%n", out.fldno++, out.indent(), dkey.getFxyName(), dkey.getName(), dkey.bitWidth, reader.getPos(), s); if (out != null) out.f.format("%4d %s read %s (%s %s) bitWidth=%d end at= 0x%x raw=%d convert=%f%n", out.fldno++, out.indent(), dkey.getFxyName(), dkey.getName(), dkey.getUnits(), dkey.bitWidth, reader.getPos(), val, dkey.convert(val));
reader.setBitOffset(bitOffset); int count = (int) reader.bits2UInt(dkey.replicationCountSize); bitOffset += dkey.replicationCountSize; reader.bits2UInt(6); reader.setBitOffset(bitOffset); // ?? needed ?? byte[] minValue = new byte[nc]; for (int i = 0; i < nc; i++) minValue[i] = (byte) reader.bits2UInt(8); int dataWidth = (int) reader.bits2UInt(6); // incremental data width in bytes counter.setDataWidth(8*dataWidth); int totalWidth = dkey.bitWidth + 6 + 8*dataWidth * ndatasets; // total width in bits for this compressed set of values byte[] incValue = new byte[nc]; for (int i = 0; i < nt; i++) incValue[i] = (byte) reader.bits2UInt(8); for (int i = nt; i < nc; i++) // can dataWidth < n ? incValue[i] = 0; long dataMin = reader.bits2UInt(useBitWidth); int dataWidth = (int) reader.bits2UInt(6); // increment data width - always in 6 bits, so max is 2^6 = 64 if (dataWidth > useBitWidth && (null != out)) out.f.format(" BAD WIDTH "); long cv = reader.bits2UInt(dataWidth); if ( BufrNumbers.isMissing(cv, dataWidth))
private byte[] readCharData(DataDescriptor dkey, BitReader reader, Request req) throws IOException { int nchars = dkey.getByteWidthCDM(); byte[] b = new byte[nchars]; for (int i = 0; i < nchars; i++) b[i] = (byte) reader.bits2UInt(8); if (req.wantRow()) { for (int i = 0; i < nchars; i++) req.bb.put(b[i]); } return b; }
private int readData(Message m, RandomAccessFile raf, Formatter f, Request req) throws IOException { BitReader reader = new BitReader(raf, m.dataSection.getDataPos() + 4); DataDescriptor root = m.getRootDataDescriptor(); if (root.isBad) return 0; DebugOut out = (f == null) ? null : new DebugOut(f); BitCounterCompressed[] counterFlds = new BitCounterCompressed[root.subKeys.size()]; // one for each field LOOK why not m.counterFlds ? readData(out, reader, counterFlds, root, 0, m.getNumberDatasets(), req); m.msg_nbits = 0; for (BitCounterCompressed counter : counterFlds) if (counter != null) m.msg_nbits += counter.getTotalBits(); return m.msg_nbits; }
BitReader reader = new BitReader(raf, startPos+5); if (nb != 0) { for (int i = 0; i < NG; i++) X1[i] = (int) reader.bits2UInt(nb); nb = gdrs.bitsGroupWidths; if (nb != 0) { reader.incrByte(); for (int i = 0; i < NG; i++) NB[i] = (int) reader.bits2UInt(nb); nb = gdrs.bitsScaledGroupLength; reader.incrByte(); for (int i = 0; i < NG; i++) L[i] = ref + (int) reader.bits2UInt(nb) * len_inc; L[NG - 1] = gdrs.lengthLastGroup; // enter Length of Last Group reader.incrByte(); for (int i = 0; i < NG; i++) { for (int j = 0; j < L[i]; j++) { int X2 = (int) reader.bits2UInt(NB[i]); if (mvm == 0) { data[count++] = (R + (X1[i] + X2) * EE) / DD;
@Test @Ignore("why is this failing?") public void testSignedNegative3() throws IOException { BitReader bu = new BitReader(new byte[] {(byte)199,(byte)242,(byte)0,(byte)0,(byte)6,(byte)6}); assertEquals(799, (int) bu.bits2UInt(10)); assertEquals(800, (int) bu.bits2UInt(10)); assertEquals(-344, (int) bu.bits2SInt(10)); }
private long readNumericData(DataDescriptor dkey, BitReader reader, Request req) throws IOException { long result = reader.bits2UInt(dkey.bitWidth);
BitReader reader = new BitReader(raf, m.dataSection.getDataPos() + 4); DataDescriptor root = m.getRootDataDescriptor(); if (root.isBad) return 0;
BitReader reader = new BitReader(raf, startPos+5); sign = (int) reader.bits2UInt(1); ival1 = (int) reader.bits2UInt(nbitsd - 1); if (sign == 1) { ival1 = -ival1; sign = (int) reader.bits2UInt(1); ival2 = (int) reader.bits2UInt(nbitsd - 1); if (sign == 1) { ival2 = -ival2; sign = (int) reader.bits2UInt(1); minsd = (int) reader.bits2UInt(nbitsd - 1); if (sign == 1) { minsd = -minsd; int nb = gdrs.numberOfBits; if (nb != 0) { reader.incrByte(); for (int i = 0; i < NG; i++) { X1[i] = (int) reader.bits2UInt(nb); nb = gdrs.bitsGroupWidths; if (nb != 0) { reader.incrByte(); for (int i = 0; i < NG; i++) { NB[i] = (int) reader.bits2UInt(nb);
this.widthOfSPD = raf.read(); this.spd = new int[orderOfSPD+1]; BitReader bitReader = new BitReader(raf, raf.getFilePointer()); for (int i = 0; i < orderOfSPD; i++) { this.spd[i] = (int) bitReader.bits2UInt(widthOfSPD); this.spd[orderOfSPD] = (int) bitReader.bits2SInt(widthOfSPD); this.lengthOfSection6 = GribNumbers.int4(raf); this.section6 = raf.read();
/** * Read the next nb bits and return an Signed Long . * * @param nb the number of bits to convert to int, must be <= 64. * @return result * @throws java.io.IOException on read error */ public long bits2SInt(int nb) throws IOException { long result = bits2UInt(nb); // check if we're negative if (getBit(result, nb)) { // it's negative! reset leading bit result = setBit(result, nb, false); // build 2's-complement result = ~result & LONG_BITMASK; result = result + 1; } return result; }
bitBuf = nextByte(); bitPos = BIT_LENGTH;