C++ Server-Side SDK
LaunchDarkly SDK
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 
15 namespace launchdarkly::server_side::data_components {
16 
27  public:
28  DependencySet();
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:
69  DependencyMap();
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