Skip to content

Static Networks

StaticNetwork encodes the entire topology at compile time using a make_network() builder. Nodes and channel types are verified statically with zero runtime overhead.

Usage

#include <kpn/kpn.hpp>
using namespace kpn;

static int  produce()        { return 42; }
static int  double_it(int x) { return x * 2; }
static void print_it(int x)  { std::cout << x << '\n'; }

int main() {
    auto src = make_node<produce>  ();
    auto dbl = make_node<double_it>();
    auto prn = make_node<print_it> ();

    auto net = make_network(
        edge(src, src.output<0>(), dbl, dbl.input<0>()),
        edge(dbl, dbl.output<0>(), prn, prn.input<0>())
    );

    net.set_event_handler([](std::string_view name, NodeEvent ev, auto ts) {
        // same API as Network
    });

    net.start();
    std::this_thread::sleep_for(std::chrono::milliseconds(100));
    net.stop();
}

See examples/10_static_hello_pipeline and examples/11_static_fanout.

When to use

Network StaticNetwork
Topology known at Runtime Compile time
Type checking Runtime (dynamic_cast) Compile time
Overhead Minimal Zero
Flexibility Add nodes dynamically Fixed at compile time

For most applications Network is sufficient. Use StaticNetwork when you need the absolute minimum overhead or want compile-time topology verification.