# ladislav-zezula/stormlib architecture

> Architecture diagram of the GitHub repository ladislav-zezula/stormlib, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ladislav-zezula/stormlib
- Repository: https://github.com/ladislav-zezula/stormlib

## Overview

StormLib is a C/C++ library for working with Blizzard MPQ archives. The principal user workflow is to include its public header, open an archive, then perform operations such as listing, reading, adding, or extracting files. The tree also shows archive maintenance, patching, verification, and multiple compression and encoding implementations. The README establishes the product and public-library usage; most implementation files were not excerpted, so internal call relationships are omitted or marked unverified rather than inferred from filenames.

Main entry points: [`src/SCompression.cpp`](https://github.com/ladislav-zezula/stormlib/blob/master/src/SCompression.cpp) (Compression dispatch), [`src/SFileOpenArchive.cpp`](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileOpenArchive.cpp) (Open archive), [`src/SBaseFileTable.cpp`](https://github.com/ladislav-zezula/stormlib/blob/master/src/SBaseFileTable.cpp) (Archive file table), [`src/StormLib.h`](https://github.com/ladislav-zezula/stormlib/blob/master/src/StormLib.h) (Public API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_archive_ops["Archive operations"]
  node_public_api["Public API<br/>[StormLib.h]"]
  node_open_archive["Open archive"]
  node_create_archive["Create archive"]
  node_archive_table["Archive file table<br/>[SBaseFileTable.cpp]"]
end

subgraph group_file_ops["File operations"]
  node_add_file["Add file<br/>[SFileAddFile.cpp]"]
  node_open_file["Open file"]
  node_read_file["Read file<br/>[SFileReadFile.cpp]"]
  node_extract_file["Extract file"]
  node_find_file["Find file<br/>[SFileFindFile.cpp]"]
  node_list_file["List files<br/>[SFileListFile.cpp]"]
  node_file_info["File information"]
end

subgraph group_maintenance["Archive maintenance"]
  node_compact_archive["Compact archive"]
  node_patch_archive["Patch archives"]
  node_verify_archive["Verify archive<br/>[SFileVerify.cpp]"]
end

subgraph group_codecs["Compression and codecs"]
  node_compression["Compression dispatch<br/>[SCompression.cpp]"]
  node_zlib["zlib<br/>[zlib.h]"]
  node_bzip2["bzip2<br/>[bzlib.h]"]
  node_lzma["LZMA<br/>[LzmaEnc.h]"]
  node_huffman["Huffman<br/>[huff.cpp]"]
  node_pkware["PKWARE codec<br/>[pklib.h]"]
  node_adpcm["ADPCM codec<br/>[adpcm.cpp]"]
end

node_developer(("Library user"))
node_archive_store[("MPQ archive")]

node_developer -->|"includes"| node_public_api
node_public_api -.->|"exposes"| node_open_archive
node_developer -.->|"opens"| node_open_archive
node_open_archive -.->|"opens"| node_archive_store
node_create_archive -.->|"creates"| node_archive_store
node_add_file -.->|"writes"| node_archive_store
node_open_file -.->|"reads"| node_archive_store
node_read_file -.->|"reads"| node_archive_store
node_extract_file -.->|"extracts"| node_archive_store
node_find_file -.->|"searches"| node_archive_table
node_list_file -.->|"lists"| node_archive_table
node_file_info -.->|"queries"| node_archive_table
node_compact_archive -.->|"rewrites"| node_archive_store
node_patch_archive -.->|"patches"| node_archive_store
node_verify_archive -.->|"verifies"| node_archive_store
node_compression -.->|"dispatches"| node_zlib
node_compression -.->|"dispatches"| node_bzip2
node_compression -.->|"dispatches"| node_lzma
node_compression -.->|"dispatches"| node_huffman
node_compression -.->|"dispatches"| node_pkware
node_compression -.->|"dispatches"| node_adpcm

click node_public_api "https://github.com/ladislav-zezula/stormlib/blob/master/src/StormLib.h"
click node_open_archive "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileOpenArchive.cpp"
click node_create_archive "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileCreateArchive.cpp"
click node_archive_table "https://github.com/ladislav-zezula/stormlib/blob/master/src/SBaseFileTable.cpp"
click node_add_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileAddFile.cpp"
click node_open_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileOpenFileEx.cpp"
click node_read_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileReadFile.cpp"
click node_extract_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileExtractFile.cpp"
click node_find_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileFindFile.cpp"
click node_list_file "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileListFile.cpp"
click node_file_info "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileGetFileInfo.cpp"
click node_compact_archive "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileCompactArchive.cpp"
click node_patch_archive "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFilePatchArchives.cpp"
click node_verify_archive "https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileVerify.cpp"
click node_compression "https://github.com/ladislav-zezula/stormlib/blob/master/src/SCompression.cpp"
click node_zlib "https://github.com/ladislav-zezula/stormlib/blob/master/src/zlib/zlib.h"
click node_bzip2 "https://github.com/ladislav-zezula/stormlib/blob/master/src/bzip2/bzlib.h"
click node_lzma "https://github.com/ladislav-zezula/stormlib/blob/master/src/lzma/C/LzmaEnc.h"
click node_huffman "https://github.com/ladislav-zezula/stormlib/blob/master/src/huffman/huff.cpp"
click node_pkware "https://github.com/ladislav-zezula/stormlib/blob/master/src/pklib/pklib.h"
click node_adpcm "https://github.com/ladislav-zezula/stormlib/blob/master/src/adpcm/adpcm.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_public_api,node_open_archive,node_create_archive,node_archive_table,node_developer toneBlue
class node_add_file,node_open_file,node_read_file,node_extract_file,node_find_file,node_list_file,node_file_info,node_archive_store toneAmber
class node_compact_archive,node_patch_archive,node_verify_archive toneMint
class node_compression,node_zlib,node_bzip2,node_lzma,node_huffman,node_pkware,node_adpcm toneRose
```

## Components

### Archive operations

- [Public API](https://github.com/ladislav-zezula/stormlib/blob/master/src/StormLib.h): `src/StormLib.h`
- [Open archive](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileOpenArchive.cpp): `src/SFileOpenArchive.cpp`
- [Create archive](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileCreateArchive.cpp): `src/SFileCreateArchive.cpp`
- [Archive file table](https://github.com/ladislav-zezula/stormlib/blob/master/src/SBaseFileTable.cpp): `src/SBaseFileTable.cpp`

### File operations

- [Add file](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileAddFile.cpp): `src/SFileAddFile.cpp`
- [Open file](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileOpenFileEx.cpp): `src/SFileOpenFileEx.cpp`
- [Read file](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileReadFile.cpp): `src/SFileReadFile.cpp`
- [Extract file](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileExtractFile.cpp): `src/SFileExtractFile.cpp`
- [Find file](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileFindFile.cpp): `src/SFileFindFile.cpp`
- [List files](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileListFile.cpp): `src/SFileListFile.cpp`
- [File information](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileGetFileInfo.cpp): `src/SFileGetFileInfo.cpp`

### Archive maintenance

- [Compact archive](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileCompactArchive.cpp): `src/SFileCompactArchive.cpp`
- [Patch archives](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFilePatchArchives.cpp): `src/SFilePatchArchives.cpp`
- [Verify archive](https://github.com/ladislav-zezula/stormlib/blob/master/src/SFileVerify.cpp): `src/SFileVerify.cpp`

### Compression and codecs

- [Compression dispatch](https://github.com/ladislav-zezula/stormlib/blob/master/src/SCompression.cpp): `src/SCompression.cpp`
- [zlib](https://github.com/ladislav-zezula/stormlib/blob/master/src/zlib/zlib.h): `src/zlib/zlib.h`
- [bzip2](https://github.com/ladislav-zezula/stormlib/blob/master/src/bzip2/bzlib.h): `src/bzip2/bzlib.h`
- [LZMA](https://github.com/ladislav-zezula/stormlib/blob/master/src/lzma/C/LzmaEnc.h): `src/lzma/C/LzmaEnc.h`
- [Huffman](https://github.com/ladislav-zezula/stormlib/blob/master/src/huffman/huff.cpp): `src/huffman/huff.cpp`
- [PKWARE codec](https://github.com/ladislav-zezula/stormlib/blob/master/src/pklib/pklib.h): `src/pklib/pklib.h`
- [ADPCM codec](https://github.com/ladislav-zezula/stormlib/blob/master/src/adpcm/adpcm.cpp): `src/adpcm/adpcm.cpp`

### Other components

- **Library user**
- **MPQ archive**

## Connections

- Library user → Public API: includes
- Public API → Open archive: exposes
- Library user → Open archive: opens
- Open archive → MPQ archive: opens
- Create archive → MPQ archive: creates
- Add file → MPQ archive: writes
- Open file → MPQ archive: reads
- Read file → MPQ archive: reads
- Extract file → MPQ archive: extracts
- Find file → Archive file table: searches
- List files → Archive file table: lists
- File information → Archive file table: queries
- Compact archive → MPQ archive: rewrites
- Patch archives → MPQ archive: patches
- Verify archive → MPQ archive: verifies
- Compression dispatch → zlib: dispatches
- Compression dispatch → bzip2: dispatches
- Compression dispatch → LZMA: dispatches
- Compression dispatch → Huffman: dispatches
- Compression dispatch → PKWARE codec: dispatches
- Compression dispatch → ADPCM codec: dispatches
