OULY Documentation

C++20 License: MIT CI

OULY (Optimized Utility Library) is a modern C++20 high-performance utility library providing memory allocators, containers, ECS (Entity Component System), task scheduler, and serialization components for performance-critical applications.

Quick Start

Installation

OULY is a header-only library that can be easily integrated into your project:

# Using CMake FetchContent
include(FetchContent)
FetchContent_Declare(
  ouly
  GIT_REPOSITORY https://github.com/obhi-d/ouly.git
  GIT_TAG        main
)
FetchContent_MakeAvailable(ouly)

# Link to your target
target_link_libraries(your_target PRIVATE ouly::ouly)

Basic Usage

#include <ouly/ouly.hpp>

int main() {
    // Memory allocators
    ouly::linear_arena_allocator<> allocator(1024 * 1024);
    void* data = allocator.allocate(1024);

    // Containers
    ouly::small_vector<int, 16> vec = {1, 2, 3, 4};
    vec.push_back(5);

    // ECS
    ouly::ecs::registry<> registry;
    auto entity = registry.emplace();

    // Task scheduler
    ouly::scheduler scheduler(4);
    auto workgroup = scheduler.create_workgroup();
    scheduler.begin_execution();

    scheduler.submit(workgroup, []() {
        return 42;
    }).wait();

    scheduler.end_execution();
    scheduler.shutdown();

    return 0;
}

Key Features

🧠 Memory Management

Efficient memory allocators for different use cases including linear, arena, pool, and thread-safe variants.

📦 Containers

Modern containers with STL-like interfaces but improved performance including small_vector, dynamic_array, and more.

🎮 Entity Component System

High-performance ECS framework for game development and simulation applications.

Task Scheduler

Work-stealing task scheduler with coroutine support for parallel processing.

💾 Serialization

Flexible serialization framework supporting binary and YAML formats.

🔧 Utilities

Various utility components including reflection, DSL helpers, and more.

Requirements

  • C++20 compatible compiler (GCC 10+, Clang 12+, MSVC 2019+)

  • CMake 3.20 or later

  • Optional: Doxygen for documentation generation

Indices and tables