Logo ROOT  
Reference Guide
RSlotStack.cxx
Go to the documentation of this file.
1// Author: Enrico Guiraud, Danilo Piparo CERN 03/2017
2
3/*************************************************************************
4 * Copyright (C) 1995-2018, Rene Brun and Fons Rademakers. *
5 * All rights reserved. *
6 * *
7 * For the licensing terms see $ROOTSYS/LICENSE. *
8 * For the list of contributors see $ROOTSYS/README/CREDITS. *
9 *************************************************************************/
10
11#include <ROOT/TSeq.hxx>
13#include <TError.h> // R__ASSERT
14
15#include <mutex> // std::lock_guard
16
17ROOT::Internal::RDF::RSlotStack::RSlotStack(unsigned int size) : fSize(size)
18{
19 for (auto i : ROOT::TSeqU(size))
20 fStack.push(i);
21}
22
24{
25 std::lock_guard<ROOT::TSpinMutex> guard(fMutex);
26 R__ASSERT(fStack.size() < fSize && "Trying to put back a slot to a full stack!");
27 fStack.push(slot);
28}
29
31{
32 std::lock_guard<ROOT::TSpinMutex> guard(fMutex);
33 R__ASSERT(!fStack.empty() && "Trying to pop a slot from an empty stack!");
34 const auto slot = fStack.top();
35 fStack.pop();
36 return slot;
37}
#define R__ASSERT(e)
Definition: TError.h:96
void ReturnSlot(unsigned int slotNumber)
Definition: RSlotStack.cxx:23
std::stack< unsigned int > fStack
Definition: RSlotStack.hxx:29
A pseudo container class which is a generator of indices.
Definition: TSeq.hxx:66