You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tellico/src/translators/pilotdb/libpalm/Record.h

169 lines
4.0 KiB

/*
* palm-db-tools: Raw PalmOS Records
* Copyright (C) 2000 by Tom Dyas (tdyas@users.sourceforge.net)
*/
#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