public static void HUF_fillDTableX4()

in csharp/src/HufDecompress.cs [761:809]


		public static void HUF_fillDTableX4(HUF_DEltX4* DTable, U32 targetLog,
									sortedSymbol_t* sortedList, U32 sortedListSize,
									U32* rankStart, U32* rankValOrigin, U32 maxWeight,
									U32 nbBitsBaseline)
		{

			U32* rankVal = stackalloc U32[(int)HUF_TABLELOG_MAX + 1];
			int scaleLog = (int)(nbBitsBaseline - targetLog); /* note : targetLog >= srcLog, hence scaleLog <= 1 */
			U32 minBits = nbBitsBaseline - maxWeight;
			U32 s;

			memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));

			/* fill DTable */
			for (s = 0; s < sortedListSize; s++)
			{
				U16 symbol = sortedList[s].symbol;
				U32 weight = sortedList[s].weight;
				U32 nbBits = nbBitsBaseline - weight;
				U32 start = rankVal[weight];
				U32 length = (U32)1 << (int)(targetLog - nbBits);

				if (targetLog - nbBits >= minBits)
				{
					/* enough room for a second symbol */
					U32 sortedRank;
					int minWeight = (int)(nbBits + scaleLog);
					if (minWeight < 1) minWeight = 1;
					sortedRank = rankStart[minWeight];
					HUF_fillDTableX4Level2(DTable + start, targetLog - nbBits, nbBits,
						rankValOrigin + nbBits * (HUF_TABLELOG_MAX + 1), minWeight,
						sortedList + sortedRank, sortedListSize - sortedRank,
						nbBitsBaseline, symbol);
				}
				else
				{
					HUF_DEltX4 DElt;
					DElt.sequence = symbol;//MEM_writeLE16(&(DElt.sequence), symbol);
					DElt.nbBits = (BYTE)(nbBits);
					DElt.length = 1;
					{
						U32 end = start + length;
						U32 u;
						for (u = start; u < end; u++) DTable[u] = DElt;
					}
				}
				rankVal[weight] += length;
			}
		}