Logo ROOT   6.14/05
Reference Guide
RConcurrentHashColl.cxx
Go to the documentation of this file.
2 #include <ROOT/RMakeUnique.hxx>
3 #include <ROOT/TRWSpinLock.hxx>
4 #include <ROOT/TSeq.hxx>
5 #include <ROOT/RSha256.hxx>
6 
7 #include <set>
8 
9 namespace ROOT {
10 namespace Internal {
11 
12 
13 std::ostream &operator<<(std::ostream &os, const RConcurrentHashColl::HashValue &h)
14 {
15  auto digest = h.Get();
16  os << digest[0] << "-" << digest[1] << "-" << digest[2] << "-" << digest[3];
17  return os;
18 }
19 
21 {
22  // The cast here is because in the TBuffer ecosystem, the type used is char*
23  Sha256(reinterpret_cast<const unsigned char *>(data), len, fDigest);
24 }
25 
26 struct RHashSet {
27  std::set<ROOT::Internal::RConcurrentHashColl::HashValue> fSet;
28 };
29 
31  : fHashSet(std::make_unique<RHashSet>()), fRWLock(std::make_unique<ROOT::TRWSpinLock>()){};
32 
34 
35 /// Return true if the hash is already in already there
36 bool RConcurrentHashColl::Find(const HashValue &hash) const
37 {
39  return (fHashSet->fSet.end() != fHashSet->fSet.find(hash));
40 }
41 
42 /// If the buffer is there, return false. Otherwise, insert the hash and return true
44 {
45  return HashValue(buffer, len);
46 }
47 
48 /// If the buffer is there, return false. Otherwise, insert the hash and return true
49 bool RConcurrentHashColl::Insert(char *buffer, int len) const
50 {
51  HashValue hash(buffer, len);
52 
53  {
55  if (fHashSet->fSet.end() != fHashSet->fSet.find(hash))
56  return false;
57  }
58  {
60  fHashSet->fSet.insert(hash);
61  return true;
62  }
63 }
64 
65 /// If the buffer is there, return false. Otherwise, insert the hash and return true
66 bool RConcurrentHashColl::Insert(const HashValue &hash) const
67 {
69  auto ret = fHashSet->fSet.insert(hash);
70  return ret.second;
71 }
72 
73 } // End NS Internal
74 } // End NS ROOT
std::unique_ptr< ROOT::TRWSpinLock > fRWLock
std::ostream & operator<<(std::ostream &os, const RConcurrentHashColl::HashValue &h)
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
STL namespace.
static HashValue Hash(char *buf, int len)
Return the hash object corresponding to the buffer.
void Sha256(const unsigned char *data, int len, ULong64_t *fDigest)
Definition: RSha256.hxx:267
bool Find(const HashValue &hash) const
Return true if the hash is already in already there.
#define h(i)
Definition: RSha256.hxx:106
bool Insert(char *buf, int len) const
If the hash is there, return false. Otherwise, insert the hash and return true;.
std::unique_ptr< RHashSet > fHashSet