SegmenterIdsManager.cpp
Go to the documentation of this file.
1 #include "SegmenterIdsManager.h"
2 
3 namespace te
4 {
5  namespace rp
6  {
7 
9  {
11  }
12 
14 
16  {
18 
19  m_mutex.lock();
20 
21  if( m_freeIDs.empty() )
22  {
23  if( m_segmentsIdsCounter < std::numeric_limits<
25  {
27  newId = m_segmentsIdsCounter;
28  }
29  }
30  else
31  {
32  newId = m_freeIDs.front();
33  m_freeIDs.pop_front();
34  }
35 
36  m_mutex.unlock();
37 
38  return newId;
39  }
40 
42  const unsigned int& idsNumber,
43  std::vector< SegmenterSegmentsBlock::SegmentIdDataType >& ids )
44  {
45  ids.resize( idsNumber );
46 
47  m_mutex.lock();
48 
49  for( unsigned int genIds = 0 ; genIds < idsNumber ; ++genIds )
50  {
51  if( m_freeIDs.empty() )
52  {
53  if( m_segmentsIdsCounter == std::numeric_limits<
55  {
56  m_mutex.unlock();
57  return false;
58  }
59  else
60  {
62  ids[ genIds ] = m_segmentsIdsCounter;
63  }
64  }
65  else
66  {
67  ids[ genIds ] = m_freeIDs.front();
68  m_freeIDs.pop_front();
69  }
70  }
71 
72  m_mutex.unlock();
73 
74  return true;
75  }
76 
78  {
79  m_mutex.lock();
80 
81  m_freeIDs.push_back( id );
82 
83  m_mutex.unlock();
84  }
85 
87  const std::vector< SegmenterSegmentsBlock::SegmentIdDataType >& ids )
88  {
89  m_mutex.lock();
90 
91  const unsigned int idsSize = (unsigned int)ids.size();
92 
93  for( unsigned int idsIdx = 0 ; idsIdx < idsSize ; ++idsIdx )
94  {
95  m_freeIDs.push_back( ids[ idsIdx ] );
96  }
97 
98  m_mutex.unlock();
99  }
100 
102  const std::list< SegmenterSegmentsBlock::SegmentIdDataType >& ids )
103  {
104  m_mutex.lock();
105 
106  std::list< SegmenterSegmentsBlock::SegmentIdDataType >::const_iterator
107  it = ids.begin();
108  std::list< SegmenterSegmentsBlock::SegmentIdDataType >::const_iterator
109  itEnd = ids.end();
110 
111  while( it != itEnd )
112  {
113  m_freeIDs.push_back( *it );
114  ++it;
115  }
116 
117  m_mutex.unlock();
118  }
119 
120  } // namespace rp
121 } // namespace te
void addFreeID(const SegmenterSegmentsBlock::SegmentIdDataType &id)
Stores a free unique ID for later use.
Segments IDs manager.
volatile SegmenterSegmentsBlock::SegmentIdDataType m_segmentsIdsCounter
URI C++ Library.
Definition: Attributes.h:37
std::list< SegmenterSegmentsBlock::SegmentIdDataType > m_freeIDs
void addFreeIDs(const std::vector< SegmenterSegmentsBlock::SegmentIdDataType > &ids)
Stores free unique IDs for later use.
SegmenterSegmentsBlock::SegmentIdDataType getNewID()
Returns a new segment unique ID.
bool getNewIDs(const unsigned int &idsNumber, std::vector< SegmenterSegmentsBlock::SegmentIdDataType > &ids)
Returns new segment unique IDs.