00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef BIT_FIELD_H
00020 #define BIT_FIELD_H
00021
00022 #include <string>
00023 #include <vector>
00024
00025 #include <libxml++/libxml++.h>
00026
00027 #include <bit/fieldbase.h>
00028
00029 namespace bit
00030 {
00031
00040 class Field: public FieldBase
00041 {
00042 public:
00043
00044 typedef BitPointer<Field> pointer;
00045
00046 Field( std::string name="",
00047 size_t length=0,
00048 size_t length_units=BITS,
00049 int offset=0,
00050 size_t offset_units=BITS,
00051 std::string descr=""
00052 );
00053
00054 static Field::pointer create( std::string name="",
00055 size_t length=0,
00056 size_t length_units=BITS,
00057 int offset=0,
00058 size_t offset_units=BITS,
00059 std::string descr=""
00060 );
00061
00062 virtual ~Field();
00063
00064
00065
00067 virtual size_t length() const;
00068
00069 virtual size_t length( size_t units ) const;
00070
00071 virtual void set_length(size_t length);
00072
00073 virtual size_t length_units() const;
00074
00075 virtual void set_length_units(size_t units);
00076
00078 virtual int offset() const;
00079
00080 virtual int offset( size_t units ) const;
00081
00082 virtual void set_offset(int offset);
00083
00084 virtual size_t offset_units() const;
00085
00086 virtual void set_offset_units(size_t units);
00087
00095 virtual std::string name() const;
00096
00097 virtual std::string name(int depth) const;
00098
00099 virtual void set_name(const std::string& name);
00100
00104 virtual std::string description() const;
00105
00106 virtual void set_description(const std::string& description);
00107
00108 virtual const std::string& xml();
00109
00110 virtual FieldBase::pointer clone();
00111
00112 virtual Container container_type() { return FIELD; }
00113
00114 protected:
00115 std::string m_name;
00116 size_t m_length;
00117 size_t m_length_units;
00118 int m_offset;
00119 size_t m_offset_units;
00120 std::string m_description;
00121 };
00122
00123 }
00124
00125 #endif