#include "proglang.h"
#include <stdbool.h>
#include <stddef.h>


MAYBE_EXTERN_C (

    // driver.c defines

    extern enum bobs_op_movement_t { stack, queue } bobs_op_movement;
    extern enum bobs_op_polarity_t { insfirst, inslast } bobs_op_polarity;

    void   bobs_seek(size_t);
    void   bobs_moveNext();
    void   bobs_movePrev();
    bool   bobs_hasCurrent();
    void * bobs_getCurrentLoc();
    size_t bobs_getCurrentVal();

    extern volatile size_t bobs_ops_completed;
    extern volatile size_t bobs_prog_inserting;
    extern volatile size_t bobs_prog_removing;
    extern volatile size_t bobs_prog_removing_end;
    extern volatile size_t bobs_prog_rollover_flag;
    extern volatile size_t const * bobs_prog_rem_pos;

    // signed values allows representating empty range as from=0, to=-1
    ptrdiff_t bobs_first_valid();
    ptrdiff_t bobs_last_valid();

    // observation.c defines

    void bobs_init(size_t NumNodes);
    void bobs_report(void);
)
