C++ Server-Side SDK
LaunchDarkly SDK
Loading...
Searching...
No Matches
dependency_tracker.hpp
1#pragma once
2
3#include "data_kind.hpp"
4#include "tagged_data.hpp"
5
6#include <launchdarkly/data_model/descriptors.hpp>
7#include <launchdarkly/data_model/flag.hpp>
8#include <launchdarkly/data_model/rule_clause.hpp>
9#include <launchdarkly/data_model/segment.hpp>
10
11#include <array>
12#include <set>
13#include <string>
14
15namespace launchdarkly::server_side::data_components {
16
27 public:
29 using DataType = std::array<TaggedData<std::set<std::string>>,
30 static_cast<std::size_t>(DataKind::kKindCount)>;
31 void Set(DataKind kind, std::string key);
32
33 void Remove(DataKind kind, std::string const& key);
34
35 [[nodiscard]] bool Contains(DataKind kind, std::string const& key) const;
36
37 [[nodiscard]] std::set<std::string> const& SetForKind(DataKind kind);
38
43 [[nodiscard]] std::size_t Size() const;
44
45 [[nodiscard]] typename DataType::const_iterator begin() const;
46
47 [[nodiscard]] typename DataType::const_iterator end() const;
48
49 private:
50 [[nodiscard]] std::set<std::string> const& Data(DataKind kind) const;
51
52 [[nodiscard]] std::set<std::string>& Data(DataKind kind);
53
54 DataType data_;
55};
56
68 public:
70 using DataType =
71 std::array<TaggedData<std::unordered_map<std::string, DependencySet>>,
72 static_cast<std::size_t>(DataKind::kKindCount)>;
73 void Set(DataKind kind, std::string key, DependencySet val);
74
75 [[nodiscard]] std::optional<DependencySet> Get(
76 DataKind kind,
77 std::string const& key) const;
78
79 void Clear();
80
81 [[nodiscard]] typename DataType::const_iterator begin() const;
82
83 [[nodiscard]] typename DataType::const_iterator end() const;
84
85 private:
86 DataType data_;
87};
88
95 public:
102 void UpdateDependencies(std::string const& key,
103 data_model::FlagDescriptor const& flag);
104
111 void UpdateDependencies(std::string const& key,
112 data_model::SegmentDescriptor const& segment);
113
123 void CalculateChanges(DataKind kind,
124 std::string const& key,
125 DependencySet& dependency_set);
126
130 void Clear();
131
132 private:
136 void UpdateDependencies(DataKind kind,
137 std::string const& key,
138 DependencySet const& deps);
139
140 DependencyMap dependencies_from_;
141 DependencyMap dependencies_to_;
142
148 static void CalculateClauseDeps(
149 DependencySet& dependencies,
150 std::vector<data_model::Clause> const& clauses);
151};
152
153} // namespace launchdarkly::server_side::data_components
std::size_t Size() const
Definition dependency_tracker.cpp:27
void UpdateDependencies(std::string const &key, data_model::FlagDescriptor const &flag)
Definition dependency_tracker.cpp:99
void Clear()
Definition dependency_tracker.cpp:193
void CalculateChanges(DataKind kind, std::string const &key, DependencySet &dependency_set)
Definition dependency_tracker.cpp:130