/* flaneth - flash and ethernet
   Copyright (C) 2007-2012 Stefan Schuermans <stefan@blinkenarea.org>
   Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
   a BlinkenArea project - http://www.blinkenarea.org/ */

#ifndef INC_macros
#define INC_macros

// minimum and maximum
#define min( a, b ) ((a) < (b) ? (a) : (b))
#define max( a, b ) ((a) > (b) ? (a) : (b))

// number of entries in an array
#define count( array ) (sizeof( (array) ) / sizeof( (array)[0] ))

// waiting
#define nop( ) { __asm__ __volatile__ ("nop"::); }

// bit manipulation
#define bit_set( var, bit ) ((var) |= (1 << (bit)))
#define bit_clear( var, bit ) ((var) &= ~(1 << (bit)))
#define bit_toggle( var, bit ) ((var) ^= (1 << (bit)))
#define is_bit_clear( var, bit ) (!(((var) >> (bit)) & 1))
#define is_bit_set( var, bit ) (((var) >> (bit)) & 1)

#endif // #ifndef INC_macros
