internal MulContainer(MulContainer container, uint entryoff, uint entries = 0, uint entrySize = 0) { if (container == null || !container.IsVirtual) { throw new ArgumentException("Mul container is null or not virtual."); } _Parent = container; _Parent._Chields.Add(this); FNameMul = container.FNameMul; StreamMul = container.StreamMul; EntrySize = entrySize; _EntryOff = entryoff; if (container.StreamIdx != null && (entrySize == 0 || entrySize == 12)) { FNameIdx = container.FNameIdx; StreamIdx = container.StreamIdx; StreamIdx.Position = 12 * entryoff; _EntryLength = entries == 0 ? (uint)StreamIdx.Length / 12 - entryoff : entries; IdxTable = Utils.ArrayRead <IndexEntry>(StreamIdx, (int)_EntryLength); } else if (container.StreamIdx == null && entrySize != 0) { FNameIdx = null; StreamIdx = null; IdxTable = null; _EntryLength = entries == 0 ? ((uint)StreamMul.Length - entryoff) / EntrySize : entries; } _EntryHeaderSize = 0; _EntryItemsCount = 1; _EntryItemSize = 0; }
internal static MulContainer GetVirtual(string idxFile, string mulFile, bool realTime) { var container = new MulContainer(realTime, idxFile, mulFile); return(container); //TODO: we need to remember opend streams for virtual containers }
internal MulContainer(MulContainer container, uint entryHeaderSize, uint entryItemSize, uint entryItemsCount, uint entryoff, uint entries = 0) : this(container, entryoff, entries, entryHeaderSize + entryItemSize * entryItemsCount) { if ((container as IDataContainer).IsIndexBased) { throw new ArgumentException("Index based mul container can't have items."); } _EntryHeaderSize = entryHeaderSize; _EntryItemsCount = entryItemsCount; _EntryItemSize = entryItemSize; }
internal static MulContainer GetParent(MulContainer container) { return(container._Parent); }