Skip to content
Osvaldo Andrade edited this page Mar 30, 2026 · 11 revisions

ova-lib

Use this wiki for four questions: which module fits the job, what the module stores, what the calls return, and what the caller still owns after the call returns.

Start with the page that matches the problem in front of you. Stay in the wiki until you know the constructor, the operation set, the ownership rule, and the empty-case behavior. Open the header only when you need the final signature.

Read by Problem

If the problem is build, install, test, or usage setup, start with Getting Started. Then move to the module page for the API you will call.

If the problem is ownership, cleanup, callbacks, or failure behavior, start with API Conventions. Then move to the module page that returns or stores your data.

If the problem is sequence order, FIFO, LIFO, priority, or double-ended access, start with Containers. Then move to Lists, Queues and Stacks, Heaps and Priority Queues, Deque, or Sorting.

If the problem is keyed lookup, uniqueness, ordered keys, prefix search, or probabilistic membership, start with Associative Structures. Then move to Maps, Sets, Trees, Trie, or Bloom Filter.

If the problem is traversal, shortest paths, topological order, or spanning trees, start with Graphs. The algorithm detail stays on that same page.

If the problem is dense matrix work or linear programming, start with Numerics and Optimization. Then move to Matrix and Vector or Linear Programming Solver.

If the problem is the library shape, public API styles, or the thread-safety boundary, start with Architecture.

If the problem is contribution rules, start with Contributing.

One-Minute Example

This is the smallest useful path through the library for indexed sequence access:

#include "list.h"

int main(void) {
    list *values = create_list(ARRAY_LIST, 4, NULL);
    int a = 10;
    int b = 20;

    values->insert(values, &a, 0);
    values->insert(values, &b, 1);

    int *first = (int *)values->get(values, 0);
    int *second = (int *)values->get(values, 1);

    values->free(values);
    return first && second && *first == 10 && *second == 20 ? 0 : 1;
}

Reference Tree

The wiki is split into 4 layers.

The first layer is orientation. Read Getting-Started, Architecture, and API-Conventions once. Those 3 pages explain how the library is built, how the public API is shaped, and how ownership works across modules.

The second layer is linear data structures. Read Containers when the question is about order, position, or removal discipline. Then move to Lists, Queues-and-Stacks, Heaps-and-Priority-Queues, Deque, or Sorting.

The third layer is associative and membership structures. Read Associative-Structures when the question is about lookup, uniqueness, key order, or prefixes. Then move to Maps, Sets, Trees, Trie, or Bloom-Filter.

The fourth layer is graph and numeric work. Read Graphs for graph structure and graph algorithms. Read Numerics-and-Optimization when the problem is dense numeric state or linear programming, then continue to Matrix-and-Vector or Linear-Programming-Solver.

Clone this wiki locally