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.
169 lines
4.0 KiB
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
|