diff options
Diffstat (limited to 'src/translators/pilotdb/libpalm/Record.h')
-rw-r--r-- | src/translators/pilotdb/libpalm/Record.h | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/src/translators/pilotdb/libpalm/Record.h b/src/translators/pilotdb/libpalm/Record.h new file mode 100644 index 0000000..ecf19e3 --- /dev/null +++ b/src/translators/pilotdb/libpalm/Record.h @@ -0,0 +1,168 @@ +/* + * palm-db-tools: Raw PalmOS Records + * Copyright (C) 2000 by Tom Dyas ([email protected]) + */ + +#ifndef __PALMLIB_RECORD_H__ +#define __PALMLIB_RECORD_H__ + +#include "Block.h" + +namespace PalmLib { + + class Record : public Block { + public: +#ifdef __GNUG__ + static const pi_char_t FLAG_ATTR_DELETED = 0x80; + static const pi_char_t FLAG_ATTR_DIRTY = 0x40; + static const pi_char_t FLAG_ATTR_BUSY = 0x20; + static const pi_char_t FLAG_ATTR_SECRET = 0x10; +#else + static const pi_char_t FLAG_ATTR_DELETED; + static const pi_char_t FLAG_ATTR_DIRTY; + static const pi_char_t FLAG_ATTR_BUSY; + static const pi_char_t FLAG_ATTR_SECRET; +#endif + + /** + * Default constructor. + */ + Record() : Block(), m_attrs(0), m_unique_id(0) { } + + /** + * Copy constructor. + */ + Record(const Record& rhs) : Block(rhs.data(), rhs.size()) { + m_attrs = rhs.attrs(); + m_unique_id = rhs.unique_id(); + } + + /** + * Destructor. + */ + virtual ~Record() { } + + /** + * Constructor which lets the caller specify all the + * parameters. + * + * @param attrs Attribute byte (flags + category). + * @param unique_id Unique ID for this record. + * @param data Start of buffer to copy (or 0 for empty). + * @param size Size of the buffer to copy. + */ + Record(pi_char_t attrs, pi_uint32_t unique_id, + Block::const_pointer data, const Block::size_type size) + : Block(data, size), m_attrs(attrs), m_unique_id(unique_id) { } + + /** + * Constructor which lets the caller use the default fill + * constructor. + * @param attrs Attribute byte (flags + category). + * @param unique_id Unique ID for this record. + * @param size Size of buffer to generate. + * @param value Value to fill buffer with. + */ + Record(pi_char_t attrs, pi_uint32_t unique_id, + const size_type size, const value_type value = 0) + : Block(size, value), m_attrs(attrs), m_unique_id(unique_id) { } + + /** + * Assignment operator. + * + * @param rhs The PalmLib::Record we should become. */ + Record& operator = (const Record& rhs) { + Block::operator = (rhs); + m_attrs = rhs.attrs(); + m_unique_id = rhs.unique_id(); + return *this; + } + + /** + * Return the attributes byte which contains the category and + * flags. + */ + pi_char_t attrs() const { return m_attrs; } + + /** + * Return the state of the record's "deleted" flag. + */ + bool deleted() const { return (m_attrs & FLAG_ATTR_DELETED) != 0; } + + /** + * Set the state of the record's "deleted" flag. + * + * @param state New state of the "deleted" flag. + */ + void deleted(bool state) { + if (state) + m_attrs |= FLAG_ATTR_DELETED; + else + m_attrs &= ~(FLAG_ATTR_DELETED); + } + + /** + * Return the state of the record's "dirty" flag. + */ + bool dirty() const { return (m_attrs & FLAG_ATTR_DIRTY) != 0; } + + /** + * Set the state of the record's "dirty" flag. + * + * @param state New state of the "dirty" flag. + */ + void dirty(bool state) { + if (state) + m_attrs |= FLAG_ATTR_DIRTY; + else + m_attrs &= ~(FLAG_ATTR_DIRTY); + } + + /** + * Return the state of the record's "secret" flag. + */ + bool secret() const { return (m_attrs & FLAG_ATTR_SECRET) != 0; } + + /** + * Set the state of the record's "secret" flag. + * + * @param state New state of the "secret" flag. + */ + void secret(bool state) { + if (state) + m_attrs |= FLAG_ATTR_SECRET; + else + m_attrs &= ~(FLAG_ATTR_SECRET); + } + + /** + * Return the category of this record. + */ + pi_char_t category() const { return (m_attrs & 0x0F); } + + /** + * Set the category of this record. + */ + void category(pi_char_t cat) + { m_attrs &= ~(0x0F); m_attrs |= (cat & 0x0F); } + + /** + * Return the unique ID of this record. + */ + pi_uint32_t unique_id() const { return m_unique_id; } + + /** + * Set the unique ID of this record to uid. + * + * @param uid New unique ID for this record. + */ + void unique_id(pi_uint32_t uid) { m_unique_id = uid; } + + private: + pi_char_t m_attrs; + pi_uint32_t m_unique_id; + }; + +} + +#endif |