ewmscp  ..
renameEventHandler.h
Go to the documentation of this file.
1 #ifndef __renameEventHandler_h_
2 #define __renameEventHandler_h_
3 
4 #include "requestProvider.h"
5 
7  public:
8  typedef long cookieType;
9  typedef std::chrono::system_clock timeType;
10  typedef std::string pathType;
11  typedef std::map<cookieType, renameHalfEvent> mapType;
12  static bool cmp(const renameHalfEvent* lhs, const renameHalfEvent* rhs) {
13  return lhs->timestamp < rhs->timestamp;
14  };
15  typedef std::multiset<renameHalfEvent*, decltype(cmp)*> setType;
16  enum class moveTypeEnum {
17  moveFrom,
18  moveTo
19  };
20  public:
26  timeType::time_point timestamp;
27  setType::iterator setIterator;
29  const pathType& aSrcPath,
30  const pathType& aDstPath,
31  moveTypeEnum aMoveType,
32  const singleMap& aMapEntry,
33  timeType::time_point aTimestamp):
34  cookie(aCookie), srcPath(aSrcPath), dstPath(aDstPath),
35  moveType(aMoveType), mapEntry(aMapEntry), timestamp(aTimestamp) {};
36 };
37 
41  public:
42  renameEventHandler() = default;
44  const renameHalfEvent::pathType& aSrcPath,
45  const renameHalfEvent::pathType& aDstPath,
47  const singleMap& aMapEntry,
48  renameHalfEvent::timeType::time_point aTimestamp) {
49  auto result = renameEventMap.emplace(std::piecewise_construct,
50  std::forward_as_tuple(cookie),
51  std::forward_as_tuple(cookie,
52  aSrcPath,
53  aDstPath,
54  aIsMoveFrom,
55  aMapEntry,
56  aTimestamp));
57  auto& event = result.first->second;
58  if (result.second) { // no partner found, event is new
59  event.setIterator = renameEventSet.emplace(&event);
60  return nullptr;
61  } else { // partner found, event is old
62  renameEventSet.erase(event.setIterator);
63  return &event;
64  }
65  }
66  void forgetRenameEvent(const renameHalfEvent* what) {
67  renameEventMap.erase(what->cookie);
68  }
69  const renameHalfEvent *getNextStaleSingle(renameHalfEvent::timeType::duration timeout) {
70  auto it = renameEventSet.begin();
71  renameHalfEvent::timeType::time_point age_limit = renameHalfEvent::timeType::now() -
72  timeout;
73  if (it != renameEventSet.end() &&
74  (*it)->timestamp < age_limit) {
75  auto retval = *it;
76  renameEventSet.erase(it);
77  return retval;
78  }
79  return nullptr;
80  }
81 };
82 #endif
renameHalfEvent::mapType
std::map< cookieType, renameHalfEvent > mapType
Definition: renameEventHandler.h:11
renameHalfEvent::moveType
moveTypeEnum moveType
Definition: renameEventHandler.h:24
renameEventHandler::forgetRenameEvent
void forgetRenameEvent(const renameHalfEvent *what)
Definition: renameEventHandler.h:66
renameHalfEvent::srcPath
pathType srcPath
Definition: renameEventHandler.h:22
renameHalfEvent::moveTypeEnum::moveTo
@ moveTo
renameHalfEvent::setIterator
setType::iterator setIterator
Definition: renameEventHandler.h:27
renameHalfEvent::cookie
cookieType cookie
Definition: renameEventHandler.h:21
renameHalfEvent
Definition: renameEventHandler.h:6
renameEventHandler::renameEventMap
renameHalfEvent::mapType renameEventMap
Definition: renameEventHandler.h:39
renameEventHandler::getNextStaleSingle
const renameHalfEvent * getNextStaleSingle(renameHalfEvent::timeType::duration timeout)
Definition: renameEventHandler.h:69
renameHalfEvent::setType
std::multiset< renameHalfEvent *, decltype(cmp) * > setType
Definition: renameEventHandler.h:14
renameHalfEvent::moveTypeEnum::moveFrom
@ moveFrom
renameEventHandler
Definition: renameEventHandler.h:38
requestProvider.h
renameHalfEvent::dstPath
pathType dstPath
Definition: renameEventHandler.h:23
renameHalfEvent::timestamp
timeType::time_point timestamp
Definition: renameEventHandler.h:26
renameHalfEvent::renameHalfEvent
renameHalfEvent(cookieType aCookie, const pathType &aSrcPath, const pathType &aDstPath, moveTypeEnum aMoveType, const singleMap &aMapEntry, timeType::time_point aTimestamp)
Definition: renameEventHandler.h:28
renameHalfEvent::cmp
static bool cmp(const renameHalfEvent *lhs, const renameHalfEvent *rhs)
Definition: renameEventHandler.h:12
renameEventHandler::getRenamePartner
const renameHalfEvent * getRenamePartner(renameHalfEvent::cookieType cookie, const renameHalfEvent::pathType &aSrcPath, const renameHalfEvent::pathType &aDstPath, renameHalfEvent::moveTypeEnum aIsMoveFrom, const singleMap &aMapEntry, renameHalfEvent::timeType::time_point aTimestamp)
Definition: renameEventHandler.h:43
singleMap
std::pair< std::string, std::string > singleMap
Definition: copyRequest.h:52
renameEventHandler::renameEventSet
renameHalfEvent::setType renameEventSet
Definition: renameEventHandler.h:40
renameHalfEvent::mapEntry
const singleMap & mapEntry
Definition: renameEventHandler.h:25
renameHalfEvent::moveTypeEnum
moveTypeEnum
Definition: renameEventHandler.h:16
renameEventHandler::renameEventHandler
renameEventHandler()=default
renameHalfEvent::cookieType
long cookieType
Definition: renameEventHandler.h:8
renameHalfEvent::timeType
std::chrono::system_clock timeType
Definition: renameEventHandler.h:9
renameHalfEvent::pathType
std::string pathType
Definition: renameEventHandler.h:10