Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <iostream>
00022 #include <vector>
00023 #include <boost/shared_ptr.hpp>
00024 #include <boost/shared_array.hpp>
00025 #include <map>
00026 #include "qpid/framing/amqp_types.h"
00027 #include "qpid/CommonImportExport.h"
00028
00029 #ifndef _FieldTable_
00030 #define _FieldTable_
00031
00032 namespace qpid {
00037 namespace framing {
00038
00039 class Array;
00040 class FieldValue;
00041 class Buffer;
00042
00049 class FieldTable
00050 {
00051 public:
00052 typedef boost::shared_ptr<FieldValue> ValuePtr;
00053 typedef std::map<std::string, ValuePtr> ValueMap;
00054 typedef ValueMap::iterator iterator;
00055 typedef ValueMap::const_iterator const_iterator;
00056 typedef ValueMap::const_reference const_reference;
00057 typedef ValueMap::reference reference;
00058 typedef ValueMap::value_type value_type;
00059
00060 QPID_COMMON_EXTERN FieldTable();
00061 QPID_COMMON_EXTERN FieldTable(const FieldTable&);
00062 QPID_COMMON_EXTERN FieldTable& operator=(const FieldTable&);
00063
00064 QPID_COMMON_EXTERN uint32_t encodedSize() const;
00065 QPID_COMMON_EXTERN void encode(Buffer& buffer) const;
00066 QPID_COMMON_EXTERN void decode(Buffer& buffer);
00067
00068 QPID_COMMON_EXTERN int count() const;
00069 QPID_COMMON_INLINE_EXTERN size_t size() const { return values.size(); }
00070 QPID_COMMON_INLINE_EXTERN bool empty() { return size() == 0; }
00071 QPID_COMMON_EXTERN void set(const std::string& name, const ValuePtr& value);
00072 QPID_COMMON_EXTERN ValuePtr get(const std::string& name) const;
00073 QPID_COMMON_INLINE_EXTERN bool isSet(const std::string& name) const { return get(name).get() != 0; }
00074
00075 QPID_COMMON_EXTERN void setString(const std::string& name, const std::string& value);
00076 QPID_COMMON_EXTERN void setInt(const std::string& name, const int value);
00077 QPID_COMMON_EXTERN void setInt64(const std::string& name, const int64_t value);
00078 QPID_COMMON_EXTERN void setTimestamp(const std::string& name, const uint64_t value);
00079 QPID_COMMON_EXTERN void setUInt64(const std::string& name, const uint64_t value);
00080 QPID_COMMON_EXTERN void setTable(const std::string& name, const FieldTable& value);
00081 QPID_COMMON_EXTERN void setArray(const std::string& name, const Array& value);
00082 QPID_COMMON_EXTERN void setFloat(const std::string& name, const float value);
00083 QPID_COMMON_EXTERN void setDouble(const std::string& name, const double value);
00084
00085
00086 QPID_COMMON_EXTERN int getAsInt(const std::string& name) const;
00087 QPID_COMMON_EXTERN uint64_t getAsUInt64(const std::string& name) const;
00088 QPID_COMMON_EXTERN int64_t getAsInt64(const std::string& name) const;
00089 QPID_COMMON_EXTERN std::string getAsString(const std::string& name) const;
00090
00091 QPID_COMMON_EXTERN bool getTable(const std::string& name, FieldTable& value) const;
00092 QPID_COMMON_EXTERN bool getArray(const std::string& name, Array& value) const;
00093 QPID_COMMON_EXTERN bool getFloat(const std::string& name, float& value) const;
00094 QPID_COMMON_EXTERN bool getDouble(const std::string& name, double& value) const;
00095
00096
00097 QPID_COMMON_EXTERN void erase(const std::string& name);
00098
00099
00100 QPID_COMMON_EXTERN bool operator==(const FieldTable& other) const;
00101
00102
00103 QPID_COMMON_EXTERN ValueMap::const_iterator begin() const;
00104 QPID_COMMON_EXTERN ValueMap::const_iterator end() const;
00105 QPID_COMMON_EXTERN ValueMap::const_iterator find(const std::string& s) const;
00106
00107 QPID_COMMON_EXTERN ValueMap::iterator begin();
00108 QPID_COMMON_EXTERN ValueMap::iterator end();
00109 QPID_COMMON_EXTERN ValueMap::iterator find(const std::string& s);
00110
00111 QPID_COMMON_EXTERN std::pair <ValueMap::iterator, bool> insert(const ValueMap::value_type&);
00112 QPID_COMMON_EXTERN ValueMap::iterator insert(ValueMap::iterator, const ValueMap::value_type&);
00113 QPID_COMMON_EXTERN void clear();
00114
00115 private:
00116 void realDecode() const;
00117 void flushRawCache() const;
00118
00119 mutable ValueMap values;
00120 mutable boost::shared_array<uint8_t> cachedBytes;
00121 mutable uint32_t cachedSize;
00122
00123 QPID_COMMON_EXTERN friend std::ostream& operator<<(std::ostream& out, const FieldTable& body);
00124 };
00125
00126
00127
00128
00129 }
00130 }
00131
00132
00133 #endif