graph LR VDC("van der Corput\n(Base b)") --> HAL("Halton\n(2D, bases bโ,bโ)") VDC --> CIR("Circle\n(2D points on circle)") VDC --> DISK("Disk\n(2D points in disc)") VDC --> SPH("Sphere\n(3D on sphere)") VDC --> S3H("Sphere3Hopf\n(4D on 3-sphere)") HAL --> HALN("HaltonN\n(N-dimensional)") CIR --> SPH SPH --> SPH3("Sphere3\n(4D via recursion)") SPH3 --> SPHN("SphereN\n(N-D via recursion)") style VDC fill:#ff9800,color:#fff style HAL fill:#2196f3,color:#fff style CIR fill:#2196f3,color:#fff style DISK fill:#2196f3,color:#fff style SPH fill:#2196f3,color:#fff style S3H fill:#2196f3,color:#fff style HALN fill:#9c27b0,color:#fff style SPH3 fill:#9c27b0,color:#fff style SPHN fill:#9c27b0,color:#fff
graph LR A("*it") --> B("reseed(index)") B --> C("pop()") C --> D("reseed(saved_index)") D --> E("return value") style A fill:#f44336,color:#fff style B fill:#ffcdd2 style C fill:#ffcdd2 style D fill:#ffcdd2 style E fill:#ffcdd2
graph LR A("*it") --> B("gen->pop()") B --> C("return value") style A fill:#4caf50,color:#fff style B fill:#c8e6c9 style C fill:#c8e6c9
graph LR A("log() call") --> B("spdlog::drop()") B --> C("basic_logger_mt()") C --> D("set_level()") D --> E("set_pattern()") E --> F("log message") F --> G("flush()") style A fill:#f44336,color:#fff style B fill:#ffcdd2 style C fill:#ffcdd2 style D fill:#ffcdd2 style E fill:#ffcdd2 style F fill:#ffcdd2 style G fill:#ffcdd2
graph LR A("log() call") --> B("static logger") B --> C("log message") C --> D("flush()") style A fill:#4caf50,color:#fff style B fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px style C fill:#c8e6c9 style D fill:#c8e6c9
graph TD A("get_tp(5)") --> B("get_tp(3)") A --> C("copy 300 elements") B --> D("get_tp(1)") B --> E("copy 300 elements") D --> F("NEG_COSINE") style A fill:#f44336,color:#fff style B fill:#ffcdd2 style C fill:#ffcdd2 style D fill:#ffcdd2 style E fill:#ffcdd2 style F fill:#c8e6c9
graph LR subgraph lds_cpp["lds-cpp (this project)"] A1("constexpr pop()") --> B1("unsigned long count") B1 --> C1("No internal thread safety") C1 --> D1("External mutex required") end subgraph lds_gen_cpp["lds-gen-cpp (sibling)"] A2("atomic<unsigned long> count") --> B2("No constexpr pop()") B2 --> C2("Thread-safe internally") C2 --> D2("No compile-time eval") end style lds_cpp fill:#e3f2fd,color:#1565c0 style lds_gen_cpp fill:#e8f5e9,color:#2e7d32 style A1 fill:#bbdefb style B1 fill:#bbdefb style C1 fill:#bbdefb style D1 fill:#bbdefb style A2 fill:#c8e6c9 style B2 fill:#c8e6c9 style C2 fill:#c8e6c9 style D2 fill:#c8e6c9
graph TD A("Your Use Case") --> B{"Need compile-time\nsequence eval?"} B -->|"Yes"| C{"Multi-threaded\naccess?"} B -->|"No"| D{"Multi-threaded\naccess?"} C -->|"No"| E("lds-cpp โ \nconstexpr wins") C -->|"Yes"| F("External mutex\n(manual sync)") D -->|"No"| G("Either project\n(performance)") D -->|"Yes"| H("lds-gen-cpp โ \natomic built-in") style A fill:#e3f2fd style B fill:#fff9c4 style C fill:#fff9c4 style D fill:#fff9c4 style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px style F fill:#ffecb3 style G fill:#c8e6c9 style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
graph LR A("๐ฌ C++20\nconstexpr") --> B("๐ C++23\natomic constexpr") B --> C("๐ Future\nCompilers catch up") C --> D("๐ฏ Best of both\nworlds") style A fill:#fff9c4 style B fill:#e3f2fd style C fill:#e8f5e9 style D fill:#f3e5f5,stroke:#9c27b0,stroke-width:3px