00001 #ifndef IOKERNEL__FIELD_DESCRIPTION_H 00002 #define IOKERNEL__FIELD_DESCRIPTION_H 00003 00004 #include "iokernel_forwarders.h" 00005 00006 typedef suif_vector<FieldDescription*> FieldDescriptionList; 00007 00008 class FieldDescription { 00009 friend class ObjectFactory; 00010 size_t offset; 00011 const MetaClass* metaClass; 00012 LString memberName; 00013 ObjectWrapper build_object(Address base_address) const; 00014 00015 public: 00016 // FieldDescription() : offset(0), metaClass(0), memberName() {} 00017 FieldDescription(size_t off, const MetaClass *mc, LString memberName); 00018 const LString &get_member_name() const; 00019 const MetaClass *get_meta_class() const; 00020 size_t get_offset() const; 00021 00022 // Mutators. This should RARELY be needed. 00023 void set_offset(size_t off); 00024 00025 00026 // utility functionality 00027 ObjectWrapper build_object(const AggregateWrapper &base_obj) const; 00028 ObjectWrapper build_object(Object *base_obj) const; 00029 00030 // get_address should go away too. build the object and get the address. 00031 Address get_address(Address base_address) const; 00032 void print_debug() const; 00033 String get_debug_text() const; 00034 00035 // the following two declarations do not have a definition 00036 FieldDescription(const FieldDescription &other); 00037 FieldDescription &operator=(const FieldDescription &other); 00038 }; 00039 00040 #endif