+ 0.1.01 refactor (archive only)

This commit is contained in:
rob tillaart 2014-11-16 18:51:03 +01:00
parent 2500ca6539
commit 7060dc7f00
2 changed files with 132 additions and 66 deletions

View File

@ -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;
}

View File

@ -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
//