Skip to content

Commit

Permalink
make as many args as possible references and constants
Browse files Browse the repository at this point in the history
  • Loading branch information
mairas committed Oct 14, 2018
1 parent ff3b2b4 commit a4502d5
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 55 deletions.
2 changes: 1 addition & 1 deletion examples/torture_test/src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ void setup_io_pins(Reactduino &app) {
}

void setup_serial(Reactduino &app) {
app.onAvailable(&Serial, [&app] () {
app.onAvailable(Serial, [&app] () {
static reaction_idx led_off = INVALID_REACTION;

Serial.write(Serial.read());
Expand Down
51 changes: 26 additions & 25 deletions src/Reactduino.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,36 @@
// Reaction classes define the behaviour of each particular
// Reaction

Reaction* Reaction::free(Reactduino* app, reaction_idx r) {
void Reaction::free(Reactduino& app, const reaction_idx r) {
this->disable();
app->_table[r] = nullptr;
app._table[r] = nullptr;

// Move the top of the stack pointer down if we free from the top
if (app->_top == r + 1) {
app->_top--;
if (app._top == r + 1) {
app._top--;
}

return this;
return;
}

DelayReaction::DelayReaction(uint32_t interval, react_callback callback)
DelayReaction::DelayReaction(uint32_t interval, const react_callback callback)
: TimedReaction(interval, callback) {
this->last_trigger_time = millis();
}

void DelayReaction::tick(Reactduino *app, reaction_idx r_pos) {
void DelayReaction::tick(Reactduino& app, const reaction_idx r_pos) {
uint32_t elapsed;
uint32_t now = millis();
elapsed = now - this->last_trigger_time;
if (elapsed >= this->interval) {
this->last_trigger_time = now;
app->free(r_pos);
app.free(r_pos);
this->callback();
delete this;
}
}

void RepeatReaction::tick(Reactduino *app, reaction_idx r_pos) {
void RepeatReaction::tick(Reactduino& app, const reaction_idx r_pos) {
uint32_t elapsed;
uint32_t now = millis();
elapsed = now - this->last_trigger_time;
Expand All @@ -47,17 +47,17 @@ void RepeatReaction::tick(Reactduino *app, reaction_idx r_pos) {
}
}

void StreamReaction::tick(Reactduino *app, reaction_idx r_pos) {
if (stream->available()) {
void StreamReaction::tick(Reactduino& app, const reaction_idx r_pos) {
if (stream.available()) {
this->callback();
}
}

void TickReaction::tick(Reactduino *app, reaction_idx r_pos) {
void TickReaction::tick(Reactduino& app, const reaction_idx r_pos) {
this->callback();
}

void ISRReaction::tick(Reactduino *app, reaction_idx r_pos) {
void ISRReaction::tick(Reactduino& app, const reaction_idx r_pos) {
if (react_isr_check(this->pin_number)) {
this->callback();
}
Expand All @@ -82,7 +82,7 @@ void loop(void)
yield();
}

Reactduino::Reactduino(react_callback cb) : _setup(cb)
Reactduino::Reactduino(const react_callback cb) : _setup(cb)
{
app = this;
}
Expand All @@ -103,24 +103,24 @@ void Reactduino::tick(void)
continue;
}

r_entry->tick(app, r);
r_entry->tick(*app, r);
}
}

reaction_idx Reactduino::onDelay(uint32_t t, react_callback cb) {
reaction_idx Reactduino::onDelay(const uint32_t t, const react_callback cb) {
return alloc(new DelayReaction(t, cb));
}

reaction_idx Reactduino::onRepeat(uint32_t t, react_callback cb) {
reaction_idx Reactduino::onRepeat(const uint32_t t, const react_callback cb) {
return alloc(new RepeatReaction(t, cb));
}

reaction_idx Reactduino::onAvailable(Stream *stream, react_callback cb)
reaction_idx Reactduino::onAvailable(Stream& stream, const react_callback cb)
{
return alloc(new StreamReaction(stream, cb));
}

reaction_idx Reactduino::onInterrupt(uint8_t number, react_callback cb, int mode)
reaction_idx Reactduino::onInterrupt(const uint8_t number, const react_callback cb, int mode)
{
reaction_idx r;
int8_t isr;
Expand All @@ -145,27 +145,27 @@ reaction_idx Reactduino::onInterrupt(uint8_t number, react_callback cb, int mode
return r;
}

reaction_idx Reactduino::onPinRising(uint8_t pin, react_callback cb)
reaction_idx Reactduino::onPinRising(const uint8_t pin, const react_callback cb)
{
return onInterrupt(digitalPinToInterrupt(pin), cb, RISING);
}

reaction_idx Reactduino::onPinFalling(uint8_t pin, react_callback cb)
reaction_idx Reactduino::onPinFalling(const uint8_t pin, const react_callback cb)
{
return onInterrupt(digitalPinToInterrupt(pin), cb, FALLING);
}

reaction_idx Reactduino::onPinChange(uint8_t pin, react_callback cb)
reaction_idx Reactduino::onPinChange(const uint8_t pin, const react_callback cb)
{
return onInterrupt(digitalPinToInterrupt(pin), cb, CHANGE);
}

reaction_idx Reactduino::onTick(react_callback cb)
reaction_idx Reactduino::onTick(const react_callback cb)
{
return alloc(new TickReaction(cb));
}

Reaction* Reactduino::free(reaction_idx r)
Reaction* Reactduino::free(const reaction_idx r)
{
if (r == INVALID_REACTION) {
return nullptr;
Expand All @@ -177,7 +177,8 @@ Reaction* Reactduino::free(reaction_idx r)
return nullptr;
}

return re->free(app, r);
re->free(*app, r);
return re;
}

reaction_idx Reactduino::alloc(Reaction *re)
Expand Down
59 changes: 30 additions & 29 deletions src/Reactduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,19 +41,20 @@ class Reactduino;

class Reaction {
protected:
react_callback callback;
const react_callback callback;
public:
Reaction(react_callback callback)
Reaction(const react_callback callback)
: callback(callback) {}
Reaction* free(Reactduino* app, reaction_idx r);
virtual void alloc(Reactduino& app);
void free(Reactduino& app, reaction_idx r);
virtual void disable() {}
uint8_t flags;
virtual void tick(Reactduino* app, reaction_idx r_pos) {}
virtual void tick(Reactduino& app, const reaction_idx r_pos) {}
};

class TimedReaction : public Reaction {
protected:
uint32_t interval;
const uint32_t interval;
uint32_t last_trigger_time;
public:
TimedReaction(uint32_t interval, react_callback callback)
Expand All @@ -62,48 +63,48 @@ class TimedReaction : public Reaction {

class DelayReaction : public TimedReaction {
public:
DelayReaction(uint32_t interval, react_callback callback);
void tick(Reactduino *app, reaction_idx r_pos);
DelayReaction(const uint32_t interval, const react_callback callback);
void tick(Reactduino& app, const reaction_idx r_pos);
};

class RepeatReaction: public TimedReaction {
public:
RepeatReaction(uint32_t interval, react_callback callback)
RepeatReaction(const uint32_t interval, const react_callback callback)
: TimedReaction(interval, callback) {}
void tick(Reactduino *app, reaction_idx r_pos);
void tick(Reactduino& app, const reaction_idx r_pos);
};

class UntimedReaction : public Reaction {
public:
UntimedReaction(react_callback callback)
UntimedReaction(const react_callback callback)
: Reaction(callback) {}
};

class StreamReaction : public UntimedReaction {
private:
Stream *stream;
Stream& stream;
public:
StreamReaction(Stream *stream, react_callback callback)
StreamReaction(Stream& stream, const react_callback callback)
: stream(stream), UntimedReaction(callback) {}
void tick(Reactduino *app, reaction_idx r_pos);
void tick(Reactduino& app, const reaction_idx r_pos);
};

class TickReaction : public UntimedReaction {
public:
TickReaction(react_callback callback)
TickReaction(const react_callback callback)
: UntimedReaction(callback) {}
void tick(Reactduino *app, reaction_idx r_pos);
void tick(Reactduino& app, const reaction_idx r_pos);
};

class ISRReaction : public UntimedReaction {
private:
uint32_t pin_number;
const uint32_t pin_number;
public:
ISRReaction(uint32_t pin_number, int8_t isr, react_callback callback)
: pin_number(pin_number), isr(isr), UntimedReaction(callback) {}
int8_t isr;
void disable();
void tick(Reactduino *app, reaction_idx r_pos);
void tick(Reactduino& app, const reaction_idx r_pos);
};


Expand All @@ -122,23 +123,23 @@ class Reactduino
static Reactduino* app;

// Public API
reaction_idx onDelay(uint32_t t, react_callback cb);
reaction_idx onRepeat(uint32_t t, react_callback cb);
reaction_idx onAvailable(Stream *stream, react_callback cb);
reaction_idx onInterrupt(uint8_t number, react_callback cb, int mode);
reaction_idx onPinRising(uint8_t pin, react_callback cb);
reaction_idx onPinFalling(uint8_t pin, react_callback cb);
reaction_idx onPinChange(uint8_t pin, react_callback cb);
reaction_idx onTick(react_callback cb);
reaction_idx onDelay(const uint32_t t, const react_callback cb);
reaction_idx onRepeat(const uint32_t t, const react_callback cb);
reaction_idx onAvailable(Stream& stream, const react_callback cb);
reaction_idx onInterrupt(const uint8_t number, const react_callback cb, int mode);
reaction_idx onPinRising(const uint8_t pin, const react_callback cb);
reaction_idx onPinFalling(const uint8_t pin, const react_callback cb);
reaction_idx onPinChange(const uint8_t pin, const react_callback cb);
reaction_idx onTick(const react_callback cb);

Reaction* free(reaction_idx r);
Reaction* free(const reaction_idx r);

private:
react_callback _setup;
Reaction *_table[REACTDUINO_MAX_REACTIONS];
const react_callback _setup;
Reaction* _table[REACTDUINO_MAX_REACTIONS];
reaction_idx _top = 0;

reaction_idx alloc(Reaction *re);
void alloc(Reaction* re);

};

Expand Down

0 comments on commit a4502d5

Please sign in to comment.