bob-base

Base C++ virtual class header for the BOB streaming protocol.

Usage no npm install needed!

<script type="module">
  import bobBase from 'https://cdn.skypack.dev/bob-base';
</script>

README

BOB Base

C++ base class & status codes enum for the BOB streaming protocol.

In your binding.gyp:

  "include_dirs": [
    "<!(node -e \"require('bob-base')\")"
  ]

In your C++:

#include <bob.h>

Usage

Base class

All C++ BOB interfaces must inherit from BOB::Base and implement its virtual functions:

class My_Sink : public BOB::Base {
 public:
  My_Sink(<options>);
  virtual ~My_Sink();

  virtual BOB::Base* BindSource(BOB::Base* source);
  virtual void BindSink(BOB::Base* sink);
  virtual void Next(int status, void** error, char* data, size_t bytes);
  virtual void Pull(void** error, char* data, size_t size);

 private:
  BOB::Base* source_;
};

Sinks should implement BindSource roughly as so:

BOB::Base* My_Sink::BindSource(BOB::Base* source) {
  source->BindSink(static_cast<BOB::Base*>(this));
  source_ = source;

  return this;
}

Sources should implement BindSink roughly as so:

void FS_Source::BindSink(BOB::Base* sink) {
  sink_ = sink;
}

Functions specific to sources or sinks may exit the program if invoked:

void My_Sink::Pull(void** error, char* data, size_t size) {
  printf("Sinks do not have a public ::Pull!");
  abort();
}

Status enum

  • Send Status::CONTINUE as the first argument to a BOB sink's next() method in most cases.
  • Send Status::END as the first argument to a BOB sink's next() to end the stream.
  • Send Status::ERROR as the first argument to a BOB sink's next() if there is an error.

License

MIT LicensedContributions via DCO 1.1