11 #ifndef ROOT_RConcurrentHashColl 
   12 #define ROOT_RConcurrentHashColl 
   26 class RConcurrentHashColl {
 
   28    mutable std::unique_ptr<RHashSet> fHashSet;
 
   29    mutable std::unique_ptr<ROOT::TRWSpinLock> fRWLock;
 
   33        friend std::ostream &operator<<(std::ostream &os, 
const RConcurrentHashColl::HashValue &h);
 
   35       ULong64_t fDigest[4] = {0, 0, 0, 0};
 
   38       HashValue() = 
default;
 
   39       HashValue(
const char *data, 
int len);
 
   40       ULong64_t 
const *Get()
 const { 
return fDigest; }
 
   43    RConcurrentHashColl();
 
   44    ~RConcurrentHashColl();
 
   47    bool Find(
const HashValue &hash) 
const;
 
   50    bool Insert(
char *buf, 
int len) 
const;
 
   53    bool Insert(
const HashValue &hash) 
const;
 
   56    static HashValue Hash(
char *buf, 
int len);
 
   59 inline bool operator==(
const RConcurrentHashColl::HashValue &lhs, 
const RConcurrentHashColl::HashValue &rhs)
 
   63    return l[0] == r[0] && l[1] == r[1] && l[2] == r[2] && l[3] == r[3];
 
   71 struct less<ROOT::Internal::RConcurrentHashColl::HashValue> {
 
   72    bool operator()(
const ROOT::Internal::RConcurrentHashColl::HashValue &lhs, 
const ROOT::Internal::RConcurrentHashColl::HashValue &rhs)
 const 
   78       return l[0] < r[0] ? 
true :
 
   84                          l[3] < r[3] ? 
true : 
false;