00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "amqp_types.h"
00022 #include "FieldValue.h"
00023 #include "qpid/framing/TypeCode.h"
00024 #include <boost/shared_ptr.hpp>
00025 #include <iostream>
00026 #include <vector>
00027 #include "qpid/CommonImportExport.h"
00028
00029 #ifndef _Array_
00030 #define _Array_
00031
00032 namespace qpid {
00033 namespace framing {
00034
00035 class Buffer;
00036
00037 class Array
00038 {
00039 public:
00040 typedef boost::shared_ptr<FieldValue> ValuePtr;
00041 typedef std::vector<ValuePtr> ValueVector;
00042 typedef ValueVector::const_iterator const_iterator;
00043 typedef ValueVector::iterator iterator;
00044
00045 QPID_COMMON_EXTERN uint32_t encodedSize() const;
00046 QPID_COMMON_EXTERN void encode(Buffer& buffer) const;
00047 QPID_COMMON_EXTERN void decode(Buffer& buffer);
00048
00049 QPID_COMMON_EXTERN int count() const;
00050 QPID_COMMON_EXTERN bool operator==(const Array& other) const;
00051
00052 QPID_COMMON_EXTERN Array();
00053 QPID_COMMON_EXTERN Array(TypeCode type);
00054 QPID_COMMON_EXTERN Array(uint8_t type);
00055
00056 QPID_COMMON_EXTERN Array(const std::vector<std::string>& in);
00057
00058 QPID_COMMON_EXTERN TypeCode getType() const { return type; }
00059
00060
00061 QPID_COMMON_EXTERN const_iterator begin() const { return values.begin(); }
00062 QPID_COMMON_EXTERN const_iterator end() const { return values.end(); }
00063 QPID_COMMON_EXTERN iterator begin() { return values.begin(); }
00064 QPID_COMMON_EXTERN iterator end(){ return values.end(); }
00065
00066 QPID_COMMON_EXTERN ValuePtr front() const { return values.front(); }
00067 QPID_COMMON_EXTERN ValuePtr back() const { return values.back(); }
00068 QPID_COMMON_EXTERN size_t size() const { return values.size(); }
00069
00070 QPID_COMMON_EXTERN void insert(iterator i, ValuePtr value);
00071 QPID_COMMON_EXTERN void erase(iterator i) { values.erase(i); }
00072 QPID_COMMON_EXTERN void push_back(ValuePtr value) { values.insert(end(), value); }
00073 QPID_COMMON_EXTERN void pop_back() { values.pop_back(); }
00074
00075
00076 QPID_COMMON_EXTERN void add(ValuePtr value) { push_back(value); }
00077
00078 template <class T>
00079 void collect(std::vector<T>& out) const
00080 {
00081 for (ValueVector::const_iterator i = values.begin(); i != values.end(); ++i) {
00082 out.push_back((*i)->get<T>());
00083 }
00084 }
00085
00086 private:
00087 TypeCode type;
00088 ValueVector values;
00089
00090 friend QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream& out, const Array& body);
00091 };
00092
00093 }
00094 }
00095
00096
00097 #endif