static private CreatePrimitiveArray ( InternalPrimitiveTypeE code, int length ) : |
||
code | InternalPrimitiveTypeE | |
length | int | |
return |
private void ReadArrayAsBytes(ParseRecord pr) { if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte) { pr.PRnewObj = (object)this.ReadBytes(pr.PRlengthA[0]); } else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char) { pr.PRnewObj = (object)this.ReadChars(pr.PRlengthA[0]); } else { int num1 = Converter.TypeLength(pr.PRarrayElementTypeCode); pr.PRnewObj = (object)Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]); Array dst = (Array)pr.PRnewObj; int num2 = 0; if (this.byteBuffer == null) { this.byteBuffer = new byte[4096]; } while (num2 < dst.Length) { int num3 = Math.Min(4096 / num1, dst.Length - num2); int num4 = num3 * num1; this.ReadBytes(this.byteBuffer, 0, num4); Buffer.InternalBlockCopy((Array)this.byteBuffer, 0, dst, num2 * num1, num4); num2 += num3; } } }
private void ReadArrayAsBytes(ParseRecord pr) { if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte) { pr.PRnewObj = this.ReadBytes(pr.PRlengthA[0]); } else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char) { pr.PRnewObj = this.ReadChars(pr.PRlengthA[0]); } else { int num = Converter.TypeLength(pr.PRarrayElementTypeCode); pr.PRnewObj = Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]); Array pRnewObj = (Array)pr.PRnewObj; int num2 = 0; if (this.byteBuffer == null) { this.byteBuffer = new byte[0x1000]; } while (num2 < pRnewObj.Length) { int num3 = Math.Min((int)(0x1000 / num), (int)(pRnewObj.Length - num2)); int size = num3 * num; this.ReadBytes(this.byteBuffer, 0, size); Buffer.InternalBlockCopy(this.byteBuffer, 0, pRnewObj, num2 * num, size); num2 += num3; } } }
private void ReadArrayAsBytes(ParseRecord pr) { Debug.Assert(pr._lengthA != null); if (pr._arrayElementTypeCode == InternalPrimitiveTypeE.Byte) { pr._newObj = ReadBytes(pr._lengthA[0]); } else if (pr._arrayElementTypeCode == InternalPrimitiveTypeE.Char) { pr._newObj = ReadChars(pr._lengthA[0]); } else { int typeLength = Converter.TypeLength(pr._arrayElementTypeCode); pr._newObj = Converter.CreatePrimitiveArray(pr._arrayElementTypeCode, pr._lengthA[0]); Debug.Assert((pr._newObj != null), "[BinaryParser expected a Primitive Array]"); Array array = (Array)pr._newObj; int arrayOffset = 0; if (_byteBuffer == null) { _byteBuffer = new byte[ChunkSize]; } while (arrayOffset < array.Length) { int numArrayItems = Math.Min(ChunkSize / typeLength, array.Length - arrayOffset); int bufferUsed = numArrayItems * typeLength; ReadBytes(_byteBuffer, 0, bufferUsed); if (!BitConverter.IsLittleEndian) { // we know that we are reading a primitive type, so just do a simple swap Debug.Fail("Re-review this code if/when we start running on big endian systems"); for (int i = 0; i < bufferUsed; i += typeLength) { for (int j = 0; j < typeLength / 2; j++) { byte tmp = _byteBuffer[i + j]; _byteBuffer[i + j] = _byteBuffer[i + typeLength - 1 - j]; _byteBuffer[i + typeLength - 1 - j] = tmp; } } } Buffer.BlockCopy(_byteBuffer, 0, array, arrayOffset * typeLength, bufferUsed); arrayOffset += numArrayItems; } } }
private void ReadArrayAsBytes(ParseRecord pr) { if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Byte) { pr.PRnewObj = ReadBytes(pr.PRlengthA[0]); } else if (pr.PRarrayElementTypeCode == InternalPrimitiveTypeE.Char) { pr.PRnewObj = ReadChars(pr.PRlengthA[0]); } else { int typeLength = Converter.TypeLength(pr.PRarrayElementTypeCode); pr.PRnewObj = Converter.CreatePrimitiveArray(pr.PRarrayElementTypeCode, pr.PRlengthA[0]); //pr.PRnewObj = Array.CreateInstance(pr.PRarrayElementType, pr.PRlengthA[0]); BCLDebug.Assert((pr.PRnewObj != null), "[BinaryParser expected a Primitive Array]"); Array array = (Array)pr.PRnewObj; int arrayOffset = 0; if (byteBuffer == null) { byteBuffer = new byte[chunkSize]; } while (arrayOffset < array.Length) { int numArrayItems = Math.Min(chunkSize / typeLength, array.Length - arrayOffset); int bufferUsed = numArrayItems * typeLength; ReadBytes(byteBuffer, 0, bufferUsed); Buffer.InternalBlockCopy(byteBuffer, 0, array, arrayOffset * typeLength, bufferUsed); arrayOffset += numArrayItems; } } }