C++ Server-Side SDK
LaunchDarkly SDK
Loading...
Searching...
No Matches
expiration_tracker.hpp
1#pragma once
2
3#include "../dependency_tracker/data_kind.hpp"
4#include "../dependency_tracker/tagged_data.hpp"
5
6#include <array>
7#include <chrono>
8#include <optional>
9#include <ostream>
10#include <string>
11#include <unordered_map>
12#include <vector>
13
14namespace launchdarkly::server_side::data_components {
15
17 public:
18 using TimePoint = std::chrono::time_point<std::chrono::steady_clock>;
19
23 enum class TrackState {
27 kFresh,
31 kStale,
36 };
37
45 void Add(std::string const& key, TimePoint expiration);
46
52 void Remove(std::string const& key);
53
61 TrackState State(std::string const& key, TimePoint current_time) const;
62
70 void Add(DataKind kind, std::string const& key, TimePoint expiration);
71
78 void Remove(DataKind kind, std::string const& key);
79
87 TrackState State(DataKind kind,
88 std::string const& key,
89 TimePoint current_time) const;
90
94 void Clear();
95
102 std::vector<std::pair<std::optional<DataKind>, std::string>> Prune(
103 TimePoint current_time);
104
105 private:
106 using TtlMap = std::unordered_map<std::string, TimePoint>;
107
108 TtlMap unscoped_;
109
110 static TrackState State(TimePoint expiration, TimePoint current_time);
111
112 class ScopedTtls {
113 public:
114 ScopedTtls();
115
116 using DataType =
117 std::array<TaggedData<TtlMap>,
118 static_cast<std::underlying_type_t<DataKind>>(
119 DataKind::kKindCount)>;
120 void Set(DataKind kind, std::string const& key, TimePoint expiration);
121 void Remove(DataKind kind, std::string const& key);
122 std::optional<TimePoint> Get(DataKind kind,
123 std::string const& key) const;
124 void Clear();
125
126 [[nodiscard]] typename DataType::iterator begin();
127
128 [[nodiscard]] typename DataType::iterator end();
129
130 private:
131 DataType data_;
132 };
133
134 ScopedTtls scoped_;
135};
136
137std::ostream& operator<<(std::ostream& out,
138 ExpirationTracker::TrackState const& state);
139
140} // namespace launchdarkly::server_side::data_components
std::vector< std::pair< std::optional< DataKind >, std::string > > Prune(TimePoint current_time)
Definition expiration_tracker.cpp:52
void Remove(std::string const &key)
Definition expiration_tracker.cpp:11
TrackState State(std::string const &key, TimePoint current_time) const
Definition expiration_tracker.cpp:15
void Clear()
Definition expiration_tracker.cpp:47
void Add(std::string const &key, TimePoint expiration)
Definition expiration_tracker.cpp:7