highlighter application  1.1
HCE project utils : highlighter
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
ContentsStorageBase.cpp
Go to the documentation of this file.
1 
13 #include <unistd.h>
14 
15 #include "ContentsStorageBase.hpp"
16 
17 #define DESTRUCTOR_TIME_WAIT 32000
18 
23 {
24  RefinePtrType ret = nullptr;
25  while(ret.isNull())
26  {
27  refinesVectorMutex.lock();
28  for(unsigned int i = 0; i < refinesVector.size(); i++)
29  {
30  if(!(refinesVector[i].second))
31  {
32  ret = refinesVector[i].first;
33  refinesVector[i].second = true;
34  break;
35  }
36  }
37  refinesVectorMutex.unlock();
38  if(ret.isNull())
39  {
40  componentMutex.lock();
41  conditionVar.wait(componentMutex);
42  componentMutex.unlock();
43  }
44  }
45  return ret;
46 }
47 
52 {
53  refinesVectorMutex.lock();
54  for(unsigned int i = 0; i < refinesVector.size(); i++)
55  {
56  if(refinesVector[i].first == refinePtr)
57  {
58  refinesVector[i].second = false;
59  break;
60  }
61  }
62  refinesVectorMutex.unlock();
63  componentMutex.lock();
64  conditionVar.signal();
65  componentMutex.unlock();
66  refinePtr = nullptr;
67 }
68 
71 ContentsStorageBase::ContentsStorageBase(unsigned int refinesCount)
72 {
73  for(unsigned int i = 0; i < refinesCount; i++)
74  {
75  refinesVector.push_back(std::pair<RefinePtrType, bool>(RefinePtrType(new HCE::component::Refine(HCE::CT_REFINE)), false));
76  }
77 }
78 
82 {
83  bool isExit = false;
84  do
85  {
86  isExit = true;
87  refinesVectorMutex.lock();
88  for(unsigned int i = 0; i < refinesVector.size(); i++)
89  {
90  if(refinesVector[i].second)
91  {
92  isExit = false;
93  break;
94  }
95  }
96  refinesVectorMutex.unlock();
97  usleep(DESTRUCTOR_TIME_WAIT);
98  }
99  while(!isExit);
100 }