PokittoLib with changes to lcd refresh etc.

Dependents:   Pokittris

Fork of Pokitto by Pokitto Community Team

This is a fork by user @Spinal, and is used in Pokittris for testing. Do not import this to your own program.

Committer:
spinal
Date:
Sun Oct 15 18:03:02 2017 +0000
Revision:
11:02ad9c807a21
Parent:
5:7e5c566b1760
fixed 4color refreshRegion code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Pokitto 5:7e5c566b1760 1 #include "CallChain.h"
Pokitto 5:7e5c566b1760 2 #include "cmsis.h"
Pokitto 5:7e5c566b1760 3
Pokitto 5:7e5c566b1760 4 namespace mbed {
Pokitto 5:7e5c566b1760 5
Pokitto 5:7e5c566b1760 6 CallChain::CallChain(int size) : _chain(), _size(size), _elements(0) {
Pokitto 5:7e5c566b1760 7 _chain = new pFunctionPointer_t[size]();
Pokitto 5:7e5c566b1760 8 }
Pokitto 5:7e5c566b1760 9
Pokitto 5:7e5c566b1760 10 CallChain::~CallChain() {
Pokitto 5:7e5c566b1760 11 clear();
Pokitto 5:7e5c566b1760 12 delete _chain;
Pokitto 5:7e5c566b1760 13 }
Pokitto 5:7e5c566b1760 14
Pokitto 5:7e5c566b1760 15 pFunctionPointer_t CallChain::add(void (*function)(void)) {
Pokitto 5:7e5c566b1760 16 return common_add(new FunctionPointer(function));
Pokitto 5:7e5c566b1760 17 }
Pokitto 5:7e5c566b1760 18
Pokitto 5:7e5c566b1760 19 pFunctionPointer_t CallChain::add_front(void (*function)(void)) {
Pokitto 5:7e5c566b1760 20 return common_add_front(new FunctionPointer(function));
Pokitto 5:7e5c566b1760 21 }
Pokitto 5:7e5c566b1760 22
Pokitto 5:7e5c566b1760 23 int CallChain::size() const {
Pokitto 5:7e5c566b1760 24 return _elements;
Pokitto 5:7e5c566b1760 25 }
Pokitto 5:7e5c566b1760 26
Pokitto 5:7e5c566b1760 27 pFunctionPointer_t CallChain::get(int i) const {
Pokitto 5:7e5c566b1760 28 if (i < 0 || i >= _elements)
Pokitto 5:7e5c566b1760 29 return NULL;
Pokitto 5:7e5c566b1760 30 return _chain[i];
Pokitto 5:7e5c566b1760 31 }
Pokitto 5:7e5c566b1760 32
Pokitto 5:7e5c566b1760 33 int CallChain::find(pFunctionPointer_t f) const {
Pokitto 5:7e5c566b1760 34 for (int i = 0; i < _elements; i++)
Pokitto 5:7e5c566b1760 35 if (f == _chain[i])
Pokitto 5:7e5c566b1760 36 return i;
Pokitto 5:7e5c566b1760 37 return -1;
Pokitto 5:7e5c566b1760 38 }
Pokitto 5:7e5c566b1760 39
Pokitto 5:7e5c566b1760 40 void CallChain::clear() {
Pokitto 5:7e5c566b1760 41 for(int i = 0; i < _elements; i ++) {
Pokitto 5:7e5c566b1760 42 delete _chain[i];
Pokitto 5:7e5c566b1760 43 _chain[i] = NULL;
Pokitto 5:7e5c566b1760 44 }
Pokitto 5:7e5c566b1760 45 _elements = 0;
Pokitto 5:7e5c566b1760 46 }
Pokitto 5:7e5c566b1760 47
Pokitto 5:7e5c566b1760 48 bool CallChain::remove(pFunctionPointer_t f) {
Pokitto 5:7e5c566b1760 49 int i;
Pokitto 5:7e5c566b1760 50
Pokitto 5:7e5c566b1760 51 if ((i = find(f)) == -1)
Pokitto 5:7e5c566b1760 52 return false;
Pokitto 5:7e5c566b1760 53 if (i != _elements - 1)
Pokitto 5:7e5c566b1760 54 memmove(_chain + i, _chain + i + 1, (_elements - i - 1) * sizeof(pFunctionPointer_t));
Pokitto 5:7e5c566b1760 55 delete f;
Pokitto 5:7e5c566b1760 56 _elements --;
Pokitto 5:7e5c566b1760 57 return true;
Pokitto 5:7e5c566b1760 58 }
Pokitto 5:7e5c566b1760 59
Pokitto 5:7e5c566b1760 60 void CallChain::call() {
Pokitto 5:7e5c566b1760 61 for(int i = 0; i < _elements; i++)
Pokitto 5:7e5c566b1760 62 _chain[i]->call();
Pokitto 5:7e5c566b1760 63 }
Pokitto 5:7e5c566b1760 64
Pokitto 5:7e5c566b1760 65 void CallChain::_check_size() {
Pokitto 5:7e5c566b1760 66 if (_elements < _size)
Pokitto 5:7e5c566b1760 67 return;
Pokitto 5:7e5c566b1760 68 _size = (_size < 4) ? 4 : _size + 4;
Pokitto 5:7e5c566b1760 69 pFunctionPointer_t* new_chain = new pFunctionPointer_t[_size]();
Pokitto 5:7e5c566b1760 70 memcpy(new_chain, _chain, _elements * sizeof(pFunctionPointer_t));
Pokitto 5:7e5c566b1760 71 delete _chain;
Pokitto 5:7e5c566b1760 72 _chain = new_chain;
Pokitto 5:7e5c566b1760 73 }
Pokitto 5:7e5c566b1760 74
Pokitto 5:7e5c566b1760 75 pFunctionPointer_t CallChain::common_add(pFunctionPointer_t pf) {
Pokitto 5:7e5c566b1760 76 _check_size();
Pokitto 5:7e5c566b1760 77 _chain[_elements] = pf;
Pokitto 5:7e5c566b1760 78 _elements ++;
Pokitto 5:7e5c566b1760 79 return pf;
Pokitto 5:7e5c566b1760 80 }
Pokitto 5:7e5c566b1760 81
Pokitto 5:7e5c566b1760 82 pFunctionPointer_t CallChain::common_add_front(pFunctionPointer_t pf) {
Pokitto 5:7e5c566b1760 83 _check_size();
Pokitto 5:7e5c566b1760 84 memmove(_chain + 1, _chain, _elements * sizeof(pFunctionPointer_t));
Pokitto 5:7e5c566b1760 85 _chain[0] = pf;
Pokitto 5:7e5c566b1760 86 _elements ++;
Pokitto 5:7e5c566b1760 87 return pf;
Pokitto 5:7e5c566b1760 88 }
Pokitto 5:7e5c566b1760 89
Pokitto 5:7e5c566b1760 90 } // namespace mbed