Aktualizr
C++ SOTA Client
iterator.h
1 #ifndef AKTUALIZR_UPTANE_ITERATOR_H_
2 #define AKTUALIZR_UPTANE_ITERATOR_H_
3 
4 #include "fetcher.h"
5 #include "imagerepository.h"
6 
7 namespace Uptane {
8 
9 Targets getTrustedDelegation(const Role &delegate_role, const Targets &parent_targets,
10  const ImageRepository &image_repo, INvStorage &storage, Fetcher &fetcher, bool offline);
11 
13  public:
15  Role role{Role::Targets()};
16  DelegatedTargetTreeNode *parent{nullptr};
17  std::vector<std::shared_ptr<DelegatedTargetTreeNode>>::size_type parent_idx{0};
18  std::vector<std::shared_ptr<DelegatedTargetTreeNode>> children;
19  };
20 
22  using iterator_category = std::input_iterator_tag;
23  using value_type = Uptane::Target;
24  using difference_type = int;
25  using pointer = Uptane::Target *;
26  using reference = Uptane::Target &;
27 
28  public:
29  explicit DelegationIterator(const ImageRepository &repo, std::shared_ptr<INvStorage> storage,
30  std::shared_ptr<Uptane::Fetcher> fetcher, bool is_end = false);
31  DelegationIterator operator++();
32  bool operator==(const DelegationIterator &other) const;
33  bool operator!=(const DelegationIterator &other) const { return !(*this == other); }
34  const Uptane::Target &operator*();
35 
36  private:
37  std::shared_ptr<DelegatedTargetTreeNode> tree_;
38  DelegatedTargetTreeNode *tree_node_;
39  const ImageRepository &repo_;
40  std::shared_ptr<INvStorage> storage_;
41  std::shared_ptr<Fetcher> fetcher_;
42  std::shared_ptr<const Targets> cur_targets_;
43  std::vector<Targets>::size_type target_idx_{0};
44  std::vector<std::shared_ptr<DelegatedTargetTreeNode>>::size_type children_idx_{0};
45  bool terminating_{false};
46  int level_{0};
47  bool is_end_;
48 
49  void renewTargetsData();
50  };
51 
52  explicit LazyTargetsList(const ImageRepository &repo, std::shared_ptr<INvStorage> storage,
53  std::shared_ptr<Fetcher> fetcher)
54  : repo_{repo}, storage_{std::move(storage)}, fetcher_{std::move(fetcher)} {}
55  DelegationIterator begin() { return DelegationIterator(repo_, storage_, fetcher_); }
56  DelegationIterator end() { return DelegationIterator(repo_, storage_, fetcher_, true); }
57 
58  private:
59  const ImageRepository &repo_;
60  std::shared_ptr<INvStorage> storage_;
61  std::shared_ptr<Uptane::Fetcher> fetcher_;
62 };
63 } // namespace Uptane
64 
65 #endif // AKTUALIZR_UPTANE_ITERATOR_H_
Uptane::ImageRepository
Definition: imagerepository.h:13
Uptane::LazyTargetsList
Definition: iterator.h:12
Uptane::LazyTargetsList::DelegatedTargetTreeNode
Definition: iterator.h:14
Uptane::LazyTargetsList::DelegationIterator
Definition: iterator.h:21
Uptane::Role
TUF Roles.
Definition: tuf.h:61
Uptane::Target
Definition: types.h:379
Uptane
Base data types that are used in The Update Framework (TUF), part of Uptane.
Definition: packagemanagerinterface.h:18
INvStorage
Definition: invstorage.h:43