/** * Reads decimal from specified field in pipe * @param association field association showing where to read * @return <code>true</code> if data exists, else <code>false</code> */ public boolean readDecimal(Object association, StructuredWriter output) { final long fieldId = Pipe.structRegistry(DataInputBlobReader.getBackingPipe(this.channelReader)).fieldLookupByIdentity(association, DataInputBlobReader.getStructType(this.channelReader)); assert(0==Pipe.structRegistry(DataInputBlobReader.getBackingPipe(channelReader)).dims(fieldId)) : "This method only used for non dim fields."; assert(Pipe.structRegistry(DataInputBlobReader.getBackingPipe(channelReader)).fieldType(fieldId) == StructType.Decimal); int index = channelReader.readFromEndLastInt(StructRegistry.FIELD_MASK&(int)fieldId); if (index>=0) { channelReader.position(index); long m = channelReader.readPackedLong(); assert(channelReader.storeMostRecentPacked(m)); if (0==m && channelReader.wasPackedNull()) { channelReader.readByte(); return false; } else { byte e = channelReader.readByte(); output.writeDecimal(association, m, e); } return true; } return false; }
} else { byte e = channelReader.readByte(); output.writeDecimal(association, m, e);
/** * Reads decimal from specified field in pipe * @param association field association showing where to read * @return <code>true</code> if data exists, else <code>false</code> */ public boolean readDecimal(Object association, StructuredWriter output) { final long fieldId = Pipe.structRegistry(DataInputBlobReader.getBackingPipe(this.channelReader)).fieldLookupByIdentity(association, DataInputBlobReader.getStructType(this.channelReader)); assert(0==Pipe.structRegistry(DataInputBlobReader.getBackingPipe(channelReader)).dims(fieldId)) : "This method only used for non dim fields."; assert(Pipe.structRegistry(DataInputBlobReader.getBackingPipe(channelReader)).fieldType(fieldId) == StructType.Decimal); int index = channelReader.readFromEndLastInt(StructRegistry.FIELD_MASK&(int)fieldId); if (index>=0) { channelReader.position(index); long m = channelReader.readPackedLong(); assert(channelReader.storeMostRecentPacked(m)); if (0==m && channelReader.wasPackedNull()) { channelReader.readByte(); return false; } else { byte e = channelReader.readByte(); output.writeDecimal(association, m, e); } return true; } return false; }