00001 #ifndef __XRDXROOTDREQID_HH_
00002 #define __XRDXROOTDREQID_HH_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <string.h>
00034
00035 class XrdXrootdReqID
00036 {
00037 public:
00038
00039 inline unsigned long long getID() {return Req.ID;}
00040
00041 inline void getID(unsigned char *sid, int &lid,unsigned int &linst)
00042 {memcpy(sid, Req.ids.Sid, sizeof(Req.ids.Sid));
00043 lid = static_cast<int>(Req.ids.Lid);
00044 linst = Req.ids.Linst;
00045 }
00046
00047 inline void setID(unsigned long long id) {Req.ID = id;}
00048
00049 inline void setID(const unsigned char *sid,int lid,unsigned int linst)
00050 {memcpy(Req.ids.Sid, sid, sizeof(Req.ids.Sid));
00051 Req.ids.Lid = static_cast<unsigned short>(lid);
00052 Req.ids.Linst = linst;
00053 }
00054
00055 inline unsigned long long setID(const unsigned char *sid)
00056 {memcpy(Req.ids.Sid, sid, sizeof(Req.ids.Sid));
00057 return Req.ID;
00058 }
00059
00060 inline unsigned char *Stream() {return Req.ids.Sid;}
00061
00062 XrdXrootdReqID(unsigned long long id) {setID(id);}
00063 XrdXrootdReqID(const unsigned char *sid, int lid, unsigned int linst)
00064 {setID(sid ? (unsigned char *)"\0\0" : sid, lid, linst);}
00065 XrdXrootdReqID() {}
00066
00067 private:
00068
00069 union {unsigned long long ID;
00070 struct {unsigned int Linst;
00071 unsigned short Lid;
00072 unsigned char Sid[2];
00073 } ids;
00074 } Req;
00075 };
00076 #endif