00001 #ifndef QPID_CLUSTER_TYPES_H
00002 #define QPID_CLUSTER_TYPES_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <qpid/Url.h>
00026
00027 #include <utility>
00028 #include <iosfwd>
00029 #include <string>
00030
00031 #include <stdint.h>
00032
00033 extern "C" {
00034 #include <openais/cpg.h>
00035 }
00036
00037 namespace qpid {
00038 namespace cluster {
00039
00040 class Connection;
00041
00043 enum EventType { DATA, CONTROL };
00044
00046 struct MemberId : std::pair<uint32_t, uint32_t> {
00047 explicit MemberId(uint64_t n) : std::pair<uint32_t,uint32_t>( n >> 32, n & 0xffffffff) {}
00048 explicit MemberId(uint32_t node=0, uint32_t pid=0) : std::pair<uint32_t,uint32_t>(node, pid) {}
00049 MemberId(const cpg_address& caddr) : std::pair<uint32_t,uint32_t>(caddr.nodeid, caddr.pid) {}
00050 MemberId(const std::string&);
00051 uint32_t getNode() const { return first; }
00052 uint32_t getPid() const { return second; }
00053 operator uint64_t() const { return (uint64_t(first)<<32ull) + second; }
00054
00055
00056 std::string str() const;
00057 };
00058
00059 inline bool operator==(const cpg_address& caddr, const MemberId& id) { return id == MemberId(caddr); }
00060
00061 std::ostream& operator<<(std::ostream&, const MemberId&);
00062
00063 struct ConnectionId : public std::pair<MemberId, Connection*> {
00064 ConnectionId(const MemberId& m=MemberId(), Connection* c=0) : std::pair<MemberId, Connection*> (m,c) {}
00065 ConnectionId(uint64_t m, uint64_t c)
00066 : std::pair<MemberId, Connection*>(MemberId(m), reinterpret_cast<Connection*>(c)) {}
00067 MemberId getMember() const { return first; }
00068 Connection* getPointer() const { return second; }
00069 };
00070
00071 std::ostream& operator<<(std::ostream&, const ConnectionId&);
00072
00073 }}
00074
00075 #endif