A memory-efficient C++17 command-line tool that builds word-frequency indexes over large text files using a fixed-size buffer. Memory usage is always independent of file size.
make./analyzer --file dataset.txt --version v1 --buffer 512 --query word --word error./analyzer --file dataset.txt --version v1 --buffer 512 --query top --top 10./analyzer --file1 dataset_v1.txt --version1 v1 \
--file2 dataset_v2.txt --version2 v2 \
--buffer 512 --query diff --word error| Class | Role |
|---|---|
BufferedFileReader |
RAII binary file reader, fixed-size chunks |
Tokenizer |
Byte stream → lowercase words, handles cross-buffer tokens |
VersionedIndexer |
word→frequency map for one version |
VersionManager |
Owns all indexer instances |
Query (abstract) |
Base class, pure virtual execute() |
WordQuery |
Word count query |
DiffQuery |
Frequency difference across two versions |
TopKQuery |
Top-K via min-heap, O(N log K) |
- Two function templates:
measureSeconds<F>,clamp<T> - Inheritance + runtime polymorphism via
unique_ptr<Query> - Function overloading: two
buildIndexsignatures - Exception handling throughout
- RAII resource management