#ifndef _HTMLTAGSTATESTORE_H #define _HTMLTAGSTATESTORE_H #include "HTMLParser.h" #define STORESIZE 256 class HTMLTagStore { bitset m_bits; bool test(unsigned int b) const {return m_bits.test(b);} //HTMLTagStore& changes(const HTMLTagStore &from, const HTMLTagStore &to) const; public: HTMLTagStore(): m_bits(0) {} HTMLTagStore(HTMLTag *t): m_bits(0) {set(t);} HTMLTagStore(vector *tags); HTMLTagStore(vector *tags); void set( HTMLTag* t) {m_bits.set( t->id()+1);} void reset(HTMLTag* t) {m_bits.reset(t->id()+1);} bool test( HTMLTag* t) const {return test( t->id()+1);} HTMLTagStore& operator||(const HTMLTagStore &from) {} void open( char *out); void close(char *out); class iterator; iterator begin(); iterator end(); class iterator { HTMLTagStore *m_ts; unsigned int m_bit; iterator(HTMLTagStore *_ts, unsigned int _bit): m_ts(_ts), m_bit(_bit) {} friend iterator HTMLTagStore::begin(); friend iterator HTMLTagStore::end(); friend ostream& operator<<(ostream &out, HTMLTagStore::iterator i); public: void operator++() {if (m_bit < STORESIZE) do {m_bit++;} while (m_bit < STORESIZE && !m_ts->test(m_bit));} void operator++(int) {if (m_bit < STORESIZE) do {m_bit++;} while (m_bit < STORESIZE && !m_ts->test(m_bit));} void operator--() {if (m_bit) do {m_bit--;} while (m_bit && !m_ts->test(m_bit));} void operator--(int) {if (m_bit) do {m_bit--;} while (m_bit && !m_ts->test(m_bit));} bool operator==(iterator other) {return other.m_bit == m_bit;} bool operator!=(iterator other) {return other.m_bit != m_bit;} HTMLTag *operator*() {return HTMLTag::tag(m_bit-1);} }; }; #endif