haiku/headers/os/app/PropertyInfo.h

106 lines
2.3 KiB
C++

/*
* Copyright 2009-2010, Haiku Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*/
#ifndef _PROPERTY_INFO_H
#define _PROPERTY_INFO_H
#include <BeBuild.h>
#include <Flattenable.h>
#include <SupportDefs.h>
#include <TypeConstants.h>
class BMessage;
struct compound_type {
struct field_pair {
const char* name;
type_code type;
};
field_pair pairs[5];
};
struct property_info {
const char* name;
uint32 commands[10];
uint32 specifiers[10];
const char* usage;
uint32 extra_data;
uint32 types[10];
compound_type ctypes[3];
uint32 _reserved[10];
};
enum value_kind {
B_COMMAND_KIND = 0,
B_TYPE_CODE_KIND = 1
};
struct value_info {
const char* name;
uint32 value;
value_kind kind;
const char* usage;
uint32 extra_data;
uint32 _reserved[10];
};
class BPropertyInfo : public BFlattenable {
public:
BPropertyInfo(property_info* prop = NULL,
value_info* value = NULL,
bool freeOnDelete = false);
virtual ~BPropertyInfo();
virtual int32 FindMatch(BMessage* msg, int32 index,
BMessage* specifier, int32 form,
const char* prop, void* data = NULL) const;
virtual bool IsFixedSize() const;
virtual type_code TypeCode() const;
virtual ssize_t FlattenedSize() const;
virtual status_t Flatten(void* buffer, ssize_t size) const;
virtual bool AllowsTypeCode(type_code code) const;
virtual status_t Unflatten(type_code code, const void* buffer,
ssize_t size);
const property_info* Properties() const;
const value_info* Values() const;
int32 CountProperties() const;
int32 CountValues() const;
void PrintToStream() const;
protected:
static bool FindCommand(uint32 what, int32 index,
property_info* info);
static bool FindSpecifier(uint32 form, property_info* info);
private:
virtual void _ReservedPropertyInfo1();
virtual void _ReservedPropertyInfo2();
virtual void _ReservedPropertyInfo3();
virtual void _ReservedPropertyInfo4();
BPropertyInfo(const BPropertyInfo& other);
BPropertyInfo& operator=(const BPropertyInfo& other);
void FreeMem();
property_info* fPropInfo;
value_info* fValueInfo;
int32 fPropCount;
bool fInHeap;
uint16 fValueCount;
uint32 _reserved[4];
};
#endif /* _PROPERTY_INFO_H */