xref: /haiku/src/add-ons/kernel/file_systems/netfs/headers/shared/ServerNodeID.h (revision 5a1d355fdf2747f80f8c46e2539f844a0b813346)
1*5a1d355fSStephan Aßmus // ServerNodeID.h
2*5a1d355fSStephan Aßmus 
3*5a1d355fSStephan Aßmus #ifndef NET_FS_SERVER_NODE_ID_H
4*5a1d355fSStephan Aßmus #define NET_FS_SERVER_NODE_ID_H
5*5a1d355fSStephan Aßmus 
6*5a1d355fSStephan Aßmus #include <SupportDefs.h>
7*5a1d355fSStephan Aßmus 
8*5a1d355fSStephan Aßmus #include "Request.h"
9*5a1d355fSStephan Aßmus 
10*5a1d355fSStephan Aßmus // NodeID
11*5a1d355fSStephan Aßmus struct NodeID {
NodeIDNodeID12*5a1d355fSStephan Aßmus 	NodeID()
13*5a1d355fSStephan Aßmus 		: volumeID(-1),
14*5a1d355fSStephan Aßmus 		  nodeID(-1)
15*5a1d355fSStephan Aßmus 	{
16*5a1d355fSStephan Aßmus 	}
17*5a1d355fSStephan Aßmus 
NodeIDNodeID18*5a1d355fSStephan Aßmus 	NodeID(dev_t volumeID, ino_t nodeID)
19*5a1d355fSStephan Aßmus 		: volumeID(volumeID),
20*5a1d355fSStephan Aßmus 		  nodeID(nodeID)
21*5a1d355fSStephan Aßmus 	{
22*5a1d355fSStephan Aßmus 	}
23*5a1d355fSStephan Aßmus 
NodeIDNodeID24*5a1d355fSStephan Aßmus 	NodeID(const NodeID& other)
25*5a1d355fSStephan Aßmus 		: volumeID(other.volumeID),
26*5a1d355fSStephan Aßmus 		  nodeID(other.nodeID)
27*5a1d355fSStephan Aßmus 	{
28*5a1d355fSStephan Aßmus 	}
29*5a1d355fSStephan Aßmus 
GetHashCodeNodeID30*5a1d355fSStephan Aßmus 	uint32 GetHashCode() const
31*5a1d355fSStephan Aßmus 	{
32*5a1d355fSStephan Aßmus 		uint64 v = (uint64)nodeID;
33*5a1d355fSStephan Aßmus 		return (uint32)(v >> 32) ^ (uint32)v ^ (uint32)volumeID;
34*5a1d355fSStephan Aßmus 	}
35*5a1d355fSStephan Aßmus 
36*5a1d355fSStephan Aßmus 	NodeID& operator=(const NodeID& other)
37*5a1d355fSStephan Aßmus 	{
38*5a1d355fSStephan Aßmus 		volumeID = other.volumeID;
39*5a1d355fSStephan Aßmus 		nodeID = other.nodeID;
40*5a1d355fSStephan Aßmus 		return *this;
41*5a1d355fSStephan Aßmus 	}
42*5a1d355fSStephan Aßmus 
43*5a1d355fSStephan Aßmus 	bool operator==(const NodeID& other) const
44*5a1d355fSStephan Aßmus 	{
45*5a1d355fSStephan Aßmus 		return (volumeID == other.volumeID && nodeID == other.nodeID);
46*5a1d355fSStephan Aßmus 	}
47*5a1d355fSStephan Aßmus 
48*5a1d355fSStephan Aßmus 	bool operator!=(const NodeID& other) const
49*5a1d355fSStephan Aßmus 	{
50*5a1d355fSStephan Aßmus 		return !(*this == other);
51*5a1d355fSStephan Aßmus 	}
52*5a1d355fSStephan Aßmus 
53*5a1d355fSStephan Aßmus 	dev_t volumeID;
54*5a1d355fSStephan Aßmus 	ino_t nodeID;
55*5a1d355fSStephan Aßmus };
56*5a1d355fSStephan Aßmus 
57*5a1d355fSStephan Aßmus // ServerNodeID
58*5a1d355fSStephan Aßmus struct ServerNodeID : RequestMember, NodeID {
59*5a1d355fSStephan Aßmus 								ServerNodeID();
60*5a1d355fSStephan Aßmus 								ServerNodeID(dev_t volumeID, ino_t nodeID);
61*5a1d355fSStephan Aßmus 	virtual						~ServerNodeID();
62*5a1d355fSStephan Aßmus 
63*5a1d355fSStephan Aßmus 	virtual	void				ShowAround(RequestMemberVisitor* visitor);
64*5a1d355fSStephan Aßmus 
65*5a1d355fSStephan Aßmus 	inline	ServerNodeID&		operator=(const NodeID& other);
66*5a1d355fSStephan Aßmus };
67*5a1d355fSStephan Aßmus 
68*5a1d355fSStephan Aßmus // =
69*5a1d355fSStephan Aßmus inline
70*5a1d355fSStephan Aßmus ServerNodeID&
71*5a1d355fSStephan Aßmus ServerNodeID::operator=(const NodeID& other)
72*5a1d355fSStephan Aßmus {
73*5a1d355fSStephan Aßmus 	NodeID::operator=(other);
74*5a1d355fSStephan Aßmus 	return *this;
75*5a1d355fSStephan Aßmus }
76*5a1d355fSStephan Aßmus 
77*5a1d355fSStephan Aßmus #endif	// NET_FS_SERVER_NODE_ID_H
78