public static size_t InitDStream()

in csharp/src/BitStream.cs [322:378]


		public static size_t InitDStream(BIT_DStream_t bitD, void* srcBuffer, size_t srcSize)
		{
			if (srcSize < 1)
			{
				bitD.Reset(); return ERROR(Error.srcSize_wrong);
			}

			bitD.start = (sbyte*)srcBuffer;
			bitD.limitPtr = bitD.start + sizeOfBitContainer;

			if (srcSize >= sizeOfBitContainer)
			{  /* normal case */
				bitD.ptr = (sbyte*)srcBuffer + srcSize - sizeOfBitContainer;
				bitD.bitContainer = MEM_readLEST(bitD.ptr);
				{
					BYTE lastByte = ((BYTE*)srcBuffer)[srcSize - 1];
					bitD.bitsConsumed = lastByte != 0 ? 8 - BIT_highbit32(lastByte) : 0;  /* ensures bitsConsumed is always set */
					if (lastByte == 0) return ERROR(Error.GENERIC); /* endMark not present */
				}
			}
			else
			{
				bitD.ptr = bitD.start;
				bitD.bitContainer = *(BYTE*)(bitD.start);
				{
					if (srcSize >= 7) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[6]) << (int)(sizeOfBitContainer * 8 - 16);
					/* fall-through */

					if (srcSize >= 6) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[5]) << (int)(sizeOfBitContainer * 8 - 24);
					/* fall-through */

					if (srcSize >= 5) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[4]) << (int)(sizeOfBitContainer * 8 - 32);
					/* fall-through */

					if (srcSize >= 4) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[3]) << 24;
					/* fall-through */

					if (srcSize >= 3) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[2]) << 16;
					/* fall-through */

					if (srcSize >= 2) bitD.bitContainer += (size_t)(((BYTE*)(srcBuffer))[1]) << 8;
					/* fall-through */

					/*default: break;*/
				}


				{
					BYTE lastByte = ((BYTE*)srcBuffer)[srcSize - 1];
					bitD.bitsConsumed = lastByte != 0 ? 8 - BIT_highbit32(lastByte) : 0;
					if (lastByte == 0) return ERROR(Error.corruption_detected);  /* endMark not present */
				}
				bitD.bitsConsumed += (U32)(sizeOfBitContainer - srcSize) * 8;
			}

			return srcSize;
		}