Getting started

Serialization usage example

#include <cstdio>

#include <batprotocol.hpp>

int main()
{
    // The whole library is in the batprotocol namespace.
    // The sub-namespace batprotocol::fb contains
    // code automatically generated by flatbuffers.
    using namespace batprotocol;

    // This is the main class to interact with.
    // It handles the message serialization.
    MessageBuilder builder;

    // Let us create a first message.
    // It only contains a single event.
    builder.add_edc_hello("example-msg-builder", "0.1.0");
    builder.finish_message(0);
    printf("Message serialized. Buffer at %p with size=%u\n",
        builder.buffer_pointer(), builder.buffer_size());

    // You can reuse the same MessageBuilder for another message by calling clear().
    builder.clear(0);
    builder.add_execute_job("w0!0", "0-3");
    builder.add_reject_job("w0!1");
    builder.finish_message(0);
    printf("Message serialized. Buffer at %p with size=%u\n",
        builder.buffer_pointer(), builder.buffer_size());

    // An API is provided to generate complex types,
    // such as advanced job execution options or profile registration.
    builder.clear(0);
    builder.add_execute_job("w0!2", "0", ExecuteJobOptions()
        .set_predefined_placement_strategy(
            fb::PredefinedExecutorPlacementStrategy_FillOneHostCoresFirst)
        .override_storage_placement("pfs", 11)
    );
    builder.add_register_profile("dyn!0", Profile::make_parallel_task_homogeneous(
        fb::HomogeneousParallelTaskGenerationStrategy_DefinedAmountsSpreadUniformly,
        1e10,
        0
    ));
    builder.finish_message(0);
    printf("Message serialized. Buffer at %p with size=%u\n",
        builder.buffer_pointer(), builder.buffer_size());

    // You can control the timestamps of events and of the message
    // by giving parameters to clear(), finish_message() and set_current_time().
    builder.clear(10);
    builder.add_reject_job("w1!0"); // event at timestamp=10
    builder.set_current_time(11);
    builder.add_reject_job("w2!0"); // event at timestamp=11
    builder.finish_message(12); // message at timestamp=12
    printf("Message serialized. Buffer at %p with size=%u\n",
        builder.buffer_pointer(), builder.buffer_size());

    return 0;
}

Scheduler example (FCFS)

Todo

Write an FCFS example using the library.