private readonly short[][] costs; // array is backward IDs first since get is called using the same backward ID consecutively. maybe doesn't matter. private ConnectionCosts() { short[][] costs = null; using (Stream @is = BinaryDictionary.GetTypeResource(GetType(), FILENAME_SUFFIX)) { DataInput @in = new InputStreamDataInput(@is); CodecUtil.CheckHeader(@in, HEADER, VERSION, VERSION); int forwardSize = @in.ReadVInt32(); int backwardSize = @in.ReadVInt32(); costs = RectangularArrays.ReturnRectangularArray <short>(backwardSize, forwardSize); int accum = 0; for (int j = 0; j < costs.Length; j++) { short[] a = costs[j]; for (int i = 0; i < a.Length; i++) { int raw = @in.ReadVInt32(); accum += ((int)((uint)raw) >> 1) ^ -(raw & 1); a[i] = (short)accum; } } } this.costs = costs; }
protected BinaryDictionary() { int[] targetMapOffsets = null, targetMap = null; string[] posDict = null; string[] inflFormDict = null; string[] inflTypeDict = null; ByteBuffer buffer; // LUCENENET: IDE0059: Remove unnecessary value assignment using (Stream mapIS = GetResource(TARGETMAP_FILENAME_SUFFIX)) { DataInput @in = new InputStreamDataInput(mapIS); CodecUtil.CheckHeader(@in, TARGETMAP_HEADER, VERSION, VERSION); targetMap = new int[@in.ReadVInt32()]; targetMapOffsets = new int[@in.ReadVInt32()]; int accum = 0, sourceId = 0; for (int ofs = 0; ofs < targetMap.Length; ofs++) { int val = @in.ReadVInt32(); if ((val & 0x01) != 0) { targetMapOffsets[sourceId] = ofs; sourceId++; } accum += val.TripleShift(1); targetMap[ofs] = accum; } if (sourceId + 1 != targetMapOffsets.Length) { throw new IOException("targetMap file format broken"); } targetMapOffsets[sourceId] = targetMap.Length; } using (Stream posIS = GetResource(POSDICT_FILENAME_SUFFIX)) { DataInput @in = new InputStreamDataInput(posIS); CodecUtil.CheckHeader(@in, POSDICT_HEADER, VERSION, VERSION); int posSize = @in.ReadVInt32(); posDict = new string[posSize]; inflTypeDict = new string[posSize]; inflFormDict = new string[posSize]; for (int j = 0; j < posSize; j++) { posDict[j] = @in.ReadString(); inflTypeDict[j] = @in.ReadString(); inflFormDict[j] = @in.ReadString(); // this is how we encode null inflections if (inflTypeDict[j].Length == 0) { inflTypeDict[j] = null; } if (inflFormDict[j].Length == 0) { inflFormDict[j] = null; } } } ByteBuffer tmpBuffer; using (Stream dictIS = GetResource(DICT_FILENAME_SUFFIX)) { // no buffering here, as we load in one large buffer DataInput @in = new InputStreamDataInput(dictIS); CodecUtil.CheckHeader(@in, DICT_HEADER, VERSION, VERSION); int size = @in.ReadVInt32(); tmpBuffer = ByteBuffer.Allocate(size); // AllocateDirect..? int read = dictIS.Read(tmpBuffer.Array, 0, size); if (read != size) { throw EOFException.Create("Cannot read whole dictionary"); } } buffer = tmpBuffer.AsReadOnlyBuffer(); this.targetMap = targetMap; this.targetMapOffsets = targetMapOffsets; this.posDict = posDict; this.inflTypeDict = inflTypeDict; this.inflFormDict = inflFormDict; this.buffer = buffer; }