source: imaps-frontend/node_modules/@parcel/watcher/src/Event.hh

main
Last change on this file was 0c6b92a, checked in by stefan toskovski <stefantoska84@…>, 5 weeks ago

Pred finalna verzija

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#ifndef EVENT_H
2#define EVENT_H
3
4#include <string>
5#include <node_api.h>
6#include "wasm/include.h"
7#include <napi.h>
8#include <mutex>
9#include <map>
10
11using namespace Napi;
12
13struct Event {
14 std::string path;
15 bool isCreated;
16 bool isDeleted;
17 Event(std::string path) : path(path), isCreated(false), isDeleted(false) {}
18
19 Value toJS(const Env& env) {
20 EscapableHandleScope scope(env);
21 Object res = Object::New(env);
22 std::string type = isCreated ? "create" : isDeleted ? "delete" : "update";
23 res.Set(String::New(env, "path"), String::New(env, path.c_str()));
24 res.Set(String::New(env, "type"), String::New(env, type.c_str()));
25 return scope.Escape(res);
26 }
27};
28
29class EventList {
30public:
31 void create(std::string path) {
32 std::lock_guard<std::mutex> l(mMutex);
33 Event *event = internalUpdate(path);
34 if (event->isDeleted) {
35 // Assume update event when rapidly removed and created
36 // https://github.com/parcel-bundler/watcher/issues/72
37 event->isDeleted = false;
38 } else {
39 event->isCreated = true;
40 }
41 }
42
43 Event *update(std::string path) {
44 std::lock_guard<std::mutex> l(mMutex);
45 return internalUpdate(path);
46 }
47
48 void remove(std::string path) {
49 std::lock_guard<std::mutex> l(mMutex);
50 Event *event = internalUpdate(path);
51 event->isDeleted = true;
52 }
53
54 size_t size() {
55 std::lock_guard<std::mutex> l(mMutex);
56 return mEvents.size();
57 }
58
59 std::vector<Event> getEvents() {
60 std::lock_guard<std::mutex> l(mMutex);
61 std::vector<Event> eventsCloneVector;
62 for(auto it = mEvents.begin(); it != mEvents.end(); ++it) {
63 if (!(it->second.isCreated && it->second.isDeleted)) {
64 eventsCloneVector.push_back(it->second);
65 }
66 }
67 return eventsCloneVector;
68 }
69
70 void clear() {
71 std::lock_guard<std::mutex> l(mMutex);
72 mEvents.clear();
73 }
74
75private:
76 mutable std::mutex mMutex;
77 std::map<std::string, Event> mEvents;
78 Event *internalUpdate(std::string path) {
79 auto found = mEvents.find(path);
80 if (found == mEvents.end()) {
81 auto it = mEvents.emplace(path, Event(path));
82 return &it.first->second;
83 }
84
85 return &found->second;
86 }
87};
88
89#endif
Note: See TracBrowser for help on using the repository browser.