static size_t BuildSeqTable()

in csharp/src/ZStdDecompress.cs [1040:1079]


		static size_t BuildSeqTable(SeqSymbol* DTableSpace, ref SeqSymbol* DTablePtr,
										  symbolEncodingType_e type, U32 max, U32 maxLog,
										 void* src, size_t srcSize,
										 U32[] baseValue, U32[] nbAdditionalBits,
										 SeqSymbol* defaultTable, U32 flagRepeatTable)
		{
			switch (type)
			{
				case symbolEncodingType_e.set_rle:
					if (srcSize == 0) return ERROR(Error.srcSize_wrong);
					if ((*(BYTE*)src) > max) return ERROR(Error.corruption_detected);
					{
						U32 symbol = *(BYTE*)src;
						U32 baseline = baseValue[symbol];
						U32 nbBits = nbAdditionalBits[symbol];
						ZSTD_buildSeqTable_rle(DTableSpace, baseline, nbBits);
					}
					DTablePtr = DTableSpace;
					return 1;
				case symbolEncodingType_e.set_basic:
					DTablePtr = defaultTable;
					return 0;
				case symbolEncodingType_e.set_repeat:
					if (flagRepeatTable == 0) return ERROR(Error.corruption_detected);
					return 0;
				case symbolEncodingType_e.set_compressed:
					{
						U32 tableLog;
						S16[] norm = new S16[MaxSeq + 1];
						size_t headerSize = ReadNCount(norm, &max, &tableLog, src, srcSize);
						if (IsError(headerSize)) return ERROR(Error.corruption_detected);
						if (tableLog > maxLog) return ERROR(Error.corruption_detected);
						BuildFSETable(DTableSpace, norm, max, baseValue, nbAdditionalBits, tableLog);
						DTablePtr = DTableSpace;
						return headerSize;
					}
				default: /* impossible */
					return ERROR(Error.GENERIC);
			}
		}