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
00109 virtual const FieldType& type() const;
00110
00112 virtual void set_type( const FieldType& );
00113
00120 virtual Encoding encoding() const;
00121
00123 virtual void set_encoding( Encoding en );
00124
00125 virtual const std::string& xml();
00126
00127 virtual FieldBase::pointer clone();
00128
00129 virtual Container container_type() { return FIELD; }
00130
00131 protected:
00132 std::string m_name;
00133 size_t m_length;
00134 size_t m_length_units;
00135 int m_offset;
00136 size_t m_offset_units;
00137 std::string m_description;
00138 FieldType m_type;
00139 Encoding m_encoding;
00140 };
00141
00142 }
00143
00144 #endif