Namespace WoWLib
Classes
- ClientVersion
A full client version tuple (major.minor.patch, build) plus the product flavor it came from. Determines which storage backend and archive chain a client uses, and — through format_lineage — which engine generation its files are laid out for. The versions namespace provides constants for the releases wowlib targets.
The version tuple alone does NOT identify an engine: the Classic products reuse legacy version numbers on top of whatever retail branch was current when they were built (Classic 3.4.x spans three retail generations; 'wow_classic_titan' calls itself 3.80). The BUILD number does — Blizzard's build counter is global across every product — so every format decision keys on format_lineage, never on major/minor.
- FamilyVector<T>
The version-agnostic view of a welded family's SEQUENCE member — a vector or fixed array whose elements are per-version welded classes — element-typed as the element's own family base. It is what lets base-typed code walk such a member without naming a version: Count and the indexer read through to the concrete version's native container LIVE (no copy; mutating an element view writes through), and the indexer's setter version-checks the assigned element — a wrong-version element throws InvalidCastException, the same contract as the family surface's single-member setters. Size-changing operations are deliberately absent: a fixed-array member has none at all, and growing a vector takes version-specific elements anyway — pattern-match to the concrete class and use its own member for Add/Clear. foreach is supported (the nested Enumerator is the standard allocation-free pattern).
- FileDataId
A strongly-typed FileDataID — the numeric file identifier used by CASC-era clients (u32, matching the client's root manifest and DB2 references).
- FileKey
A file request: by client-internal path, by FileDataID, or both. The generic file identity for version-independent tools — code that handles any client generation operates on FileKeys without caring which half is available (on pre-CASC clients the FileDataID is simply absent); the storage backend uses the half it needs and FileSystem.resolve fills gaps through the listfile. The stored path is always in canonical form.
- FixedArrayOps<T>
The per-instantiation native operations a FixedArray<T> dispatches through; the extent is data here, not part of a type name.
- FixedArray<T>
The fixed-size sibling of Vector<T> — a C++ std::array behind the same element protocols, minus every size-changing operation. The extent is the instantiation's, read via Count.
- VectorOps<T>
The per-instantiation native operations a Vector<T> dispatches through. Scalar/enum elements fill the span trio (Data/Push/Fill); welded and nested-container elements fill the live-view quartet (GetAt/View/HandleOf/SetAt + Add).
- Vector<T>
A reference-semantic C++ std::vector, generic over the element. A scalar/enum element reads and writes through a zero-copy span over the C++ buffer (AsSpan() is the buffer-protocol view, valid until a size-changing operation or Dispose); a welded-class element hands out LIVE views, so
v[i].Field = xwrites through.
- WelderContainerHandle
The one SafeHandle every generated container wrapper holds: release goes through the instantiation's stored destroy function (null = a non-owning view).
- WelderContainers
The element-type → ops registry behind
new Vector<T>()and the implicitT[]conversions. Generated module initializers register every bound instantiation before any user code runs; fixed arrays register per (element, extent) and resolve by the SOURCE ARRAY's length.
- WelderNativeException
A C++ exception that crossed the native boundary.
- WelderSpanExtensions
The zero-copy scalar-span surface. AsSpan() lives here as a CONSTRAINED extension (an instance method cannot constrain the class's own T; an extension can — the MemoryExtensions pattern), so it only exists for unmanaged (scalar/enum) elements: calling it on a container of record or nested-container elements is a compile error, not a runtime throw. For record elements use AsDataSpan() / AsSpan<TData>(); for nested containers, index in first.
Structs
- ClientVersion.Data
A blittable value twin of the NATIVE layout (size 16): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.
- FileDataId.Data
A blittable value twin of the NATIVE layout (size 4): read or write whole record buffers through Vector<T>.AsSpan<Data>() / FixedArray<T>.AsSpan<Data>() — one interop crossing for the buffer, where the live-view indexer pays per element. Field offsets are the native ABI's, asserted in the shim.
Enums
- ClientFlavor
Which product line a client belongs to. Retail is the ordinary progression client, where the version number also tells you the engine generation. Every other flavor is a MODERN-engine client wearing a legacy version number: WoW Classic Era 1.15.9 is a Midnight-era client, Cataclysm Classic 4.4.2 a War Within-era one. Their file formats follow the build number, not the version tuple — see ClientVersion.format_lineage.
The enumerator also names the client's default TACT product code ('wow', 'wow_classic', 'wow_classic_era', 'wow_anniversary'); products outside these four (PTR, beta, 'wow_classic_titan') pick the closest flavor and pass their exact code to the filesystem explicitly.
- Expansion
The expansion a client belongs to, in release order. The enumerable counterpart of a full ClientVersion: versioned format classes and factories are keyed on it (each enumerator maps to the last-minor-of-major release in the versions namespace).
- Locale
Game client locale; enumerators use the client's own four-letter codes.
- StorageKind
Which storage technology a client generation uses: Mpq for pre-WoD retail clients (StormLib), Casc for WoD+ and every Classic client (CascLib).