mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-19 16:46:11 -04:00
+ 0.1.01 refactor (archive only)
This commit is contained in:
parent
2500ca6539
commit
7060dc7f00
@ -1,12 +1,13 @@
|
||||
//
|
||||
// FILE: set.cpp
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.00
|
||||
// VERSION: 0.1.01
|
||||
// PURPOSE: SET library for Arduino
|
||||
// URL:
|
||||
//
|
||||
// HISTORY:
|
||||
// 0.1.00 by Rob Tillaart 09/11/2014
|
||||
// 0.1.01 extending/refactor etc (09/11/2014)
|
||||
// 0.1.00 initial version by Rob Tillaart (09/11/2014)
|
||||
//
|
||||
// Released to the public domain
|
||||
//
|
||||
@ -15,11 +16,9 @@
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//
|
||||
// PUBLIC
|
||||
// CONSTRUCTORS
|
||||
//
|
||||
|
||||
////////////////////////////
|
||||
set::set()
|
||||
set::set() // TODO size param
|
||||
{
|
||||
clr();
|
||||
}
|
||||
@ -32,9 +31,10 @@ set::set(set &t)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//
|
||||
// METHODS
|
||||
//
|
||||
void set::add(uint8_t v)
|
||||
{
|
||||
uint8_t mask = 1 << (v & 7);
|
||||
@ -49,13 +49,6 @@ void set::sub(uint8_t v)
|
||||
_mem[idx] &= ~mask;
|
||||
}
|
||||
|
||||
bool set::has(uint8_t v)
|
||||
{
|
||||
uint8_t mask = 1 << (v & 7);
|
||||
uint8_t idx = v / 8;
|
||||
return (_mem[idx] & mask) > 0;
|
||||
}
|
||||
|
||||
void set::invert(uint8_t v)
|
||||
{
|
||||
uint8_t mask = 1 << (v & 7);
|
||||
@ -63,8 +56,12 @@ void set::invert(uint8_t v)
|
||||
_mem[idx] ^= mask;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////
|
||||
bool set::has(uint8_t v)
|
||||
{
|
||||
uint8_t mask = 1 << (v & 7);
|
||||
uint8_t idx = v / 8;
|
||||
return (_mem[idx] & mask) > 0;
|
||||
}
|
||||
|
||||
// TODO OPTIMIZE COUNT
|
||||
uint8_t set::count()
|
||||
@ -77,11 +74,6 @@ uint8_t set::count()
|
||||
return cnt;
|
||||
}
|
||||
|
||||
uint8_t set::size()
|
||||
{
|
||||
return 256; // TODO _size;
|
||||
}
|
||||
|
||||
void set::clr()
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
@ -98,9 +90,76 @@ void set::invert()
|
||||
}
|
||||
}
|
||||
|
||||
int set::first()
|
||||
{
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
if (has(i))
|
||||
{
|
||||
_current = i;
|
||||
return _current;
|
||||
}
|
||||
}
|
||||
_current = -1;
|
||||
return _current;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
void set::operator = (set &t)
|
||||
int set::next()
|
||||
{
|
||||
if (_current != -1)
|
||||
{
|
||||
_current++;
|
||||
for (int i = _current; i < 256; i++)
|
||||
{
|
||||
if (has(i))
|
||||
{
|
||||
_current = i;
|
||||
return _current;
|
||||
}
|
||||
}
|
||||
}
|
||||
_current = -1;
|
||||
return _current;
|
||||
}
|
||||
|
||||
int set::prev()
|
||||
{
|
||||
if (_current != -1)
|
||||
{
|
||||
_current--;
|
||||
for (int i = _current; i > -1; --i)
|
||||
{
|
||||
if (has(i))
|
||||
{
|
||||
_current = i;
|
||||
return _current;
|
||||
}
|
||||
}
|
||||
}
|
||||
_current = -1;
|
||||
return _current;
|
||||
}
|
||||
|
||||
int set::last()
|
||||
{
|
||||
_current = -1;
|
||||
for (int i = 255; i >-1; --i)
|
||||
{
|
||||
if (has(i))
|
||||
{
|
||||
_current = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return _current;
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////
|
||||
//
|
||||
// OPERATORS
|
||||
//
|
||||
void set::operator = (set &t) // assign
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
@ -108,23 +167,7 @@ void set::operator = (set &t)
|
||||
}
|
||||
}
|
||||
|
||||
void set::operator -= (set &t)
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
_mem[i] &= ~t._mem[i];
|
||||
}
|
||||
}
|
||||
|
||||
void set::operator &= (set &t)
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
_mem[i] &= t._mem[i];
|
||||
}
|
||||
}
|
||||
|
||||
void set::operator |= (set &t)
|
||||
void set::operator += (set &t) // union
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
@ -132,15 +175,23 @@ void set::operator |= (set &t)
|
||||
}
|
||||
}
|
||||
|
||||
void set::operator ^= (set &t)
|
||||
void set::operator -= (set &t) // diff
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
_mem[i] ^= t._mem[i];
|
||||
_mem[i] &= ~t._mem[i];
|
||||
}
|
||||
}
|
||||
|
||||
bool set::operator == (set &t)
|
||||
void set::operator &= (set &t) // intersection
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
_mem[i] &= t._mem[i];
|
||||
}
|
||||
}
|
||||
|
||||
bool set::operator == (set &t) // equal
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
@ -149,11 +200,20 @@ bool set::operator == (set &t)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool set::operator < (set &t)
|
||||
bool set::operator != (set &t) // not equal
|
||||
{
|
||||
for (int i=0; i<32; i++)
|
||||
{
|
||||
if (_mem[i] ^= t._mem[i]) return false;
|
||||
if (_mem[i] != t._mem[i]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool set::operator <= (set &t) // subset
|
||||
{
|
||||
for (int i=0; i<256; i++)
|
||||
{
|
||||
if ( has(i) && !t.has(i) ) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
//
|
||||
// FILE: set.h
|
||||
// AUTHOR: Rob Tillaart
|
||||
// VERSION: 0.1.00
|
||||
// VERSION: 0.1.01
|
||||
// PURPOSE: SET library for Arduino
|
||||
// URL:
|
||||
//
|
||||
@ -18,47 +18,53 @@
|
||||
#include <Arduino.h>
|
||||
#endif
|
||||
|
||||
#define SET_LIB_VERSION "0.1.00"
|
||||
#define SET_LIB_VERSION "0.1.01"
|
||||
|
||||
class set
|
||||
{
|
||||
public:
|
||||
set(); // TODO size
|
||||
set();
|
||||
set(set&);
|
||||
|
||||
void add(uint8_t);
|
||||
void sub(uint8_t);
|
||||
bool has(uint8_t);
|
||||
|
||||
void invert(uint8_t);
|
||||
|
||||
void clr();
|
||||
void invert();
|
||||
uint8_t count();
|
||||
uint8_t size();
|
||||
|
||||
// uint8_t max();
|
||||
// uint8_t min();
|
||||
|
||||
// inline bool empty() { return count() == 0; };
|
||||
// inline bool full() { return count() == 256; };
|
||||
void add(uint8_t);
|
||||
void sub(uint8_t);
|
||||
void invert(uint8_t);
|
||||
bool has(uint8_t);
|
||||
|
||||
void operator = (set &t); // assign
|
||||
void operator += (set &t);
|
||||
void operator -= (set &t);
|
||||
void operator &= (set &t);
|
||||
void operator |= (set &t);
|
||||
|
||||
bool operator == (set&);
|
||||
bool operator != (set&);
|
||||
bool operator < (set&);
|
||||
bool operator <= (set&);
|
||||
|
||||
int first();
|
||||
int next();
|
||||
int prev();
|
||||
int last();
|
||||
|
||||
// TODO
|
||||
// set(uint8_t*, uint8_t); // constructor from uint8_t array
|
||||
// uint8_t size();
|
||||
// iterator - begin, next
|
||||
|
||||
// iterator
|
||||
// uint8_t max();
|
||||
// uint8_t min();
|
||||
// inline bool empty() { return count() == 0; };
|
||||
// inline bool full() { return count() == 256; };
|
||||
|
||||
private:
|
||||
uint8_t _mem[32]; // TODO SIZE PARAM enough to hold 0..255
|
||||
uint8_t _mem[32]; // can hold 0..255
|
||||
// uint8_t _cnt;
|
||||
// uint8_t _size;
|
||||
int _current;
|
||||
|
||||
};
|
||||
#endif
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user