SlHelpers
Loading...
Searching...
No Matches
CveShaMap.h
1// SPDX-License-Identifier: GPL-2.0-only
2
3#pragma once
4
5#include <algorithm>
6#include <filesystem>
7#include <set>
8#include <string>
9#include <string_view>
10#include <unordered_map>
11#include <vector>
12
13#include "../helpers/String.h"
14
15namespace SlCVEs {
16
20class CveShaMap {
21public:
23 using CveShaMapTy = std::unordered_multimap<std::string, std::string,
26 using ShaCveMapTy = std::unordered_map<std::string, std::string,
28
30 enum struct ShaSize {
31 Long,
32 Short
33 };
34
35 CveShaMap() = delete;
36
37 CveShaMap(const CveShaMap &) = delete;
38 CveShaMap &operator=(const CveShaMap &) = delete;
39
41 CveShaMap(CveShaMap &&) = default;
43 CveShaMap &operator=(CveShaMap &&) = default;
44
53 CveShaMap(const std::filesystem::path &vsource = {},
54 ShaSize shaSize = ShaSize::Long,
55 const std::string &branch = "origin/master",
56 unsigned year = 0,
57 bool rejected = false);
58
64 std::string_view getCve(std::string_view shaCommit) const {
65 const auto it = m_shaCveMap.find(shaCommit);
66 if (it != m_shaCveMap.cend())
67 return it->second;
68
69 return {};
70 }
71
77 std::vector<std::string> getShas(std::string_view cveNumber) const { //requires (S == ShaSize::Long)
78 std::vector<std::string> ret;
79 const auto range = m_cveShaMap.equal_range(cveNumber);
80 std::transform(range.first, range.second, std::back_inserter(ret),
81 [](const auto &p) { return p.second; });
82 return ret;
83 }
84
89 std::set<std::string> getAllCves() const { //requires (S == ShaSize::Long)
90 std::set<std::string> ret;
91 std::transform(m_cveShaMap.cbegin(), m_cveShaMap.cend(),
92 std::inserter(ret, ret.end()),
93 [](const auto &p) { return p.first; });
94 return ret;
95 }
96
97private:
98 CveShaMapTy m_cveShaMap;
99 ShaCveMapTy m_shaCveMap;
100};
101
102}
A map between CVE numbers and upstream SHAs.
Definition CveShaMap.h:20
std::unordered_multimap< std::string, std::string, SlHelpers::String::Hash, SlHelpers::String::Eq > CveShaMapTy
CVE -> upstream SHA mapping.
Definition CveShaMap.h:23
std::unordered_map< std::string, std::string, SlHelpers::String::Hash, SlHelpers::String::Eq > ShaCveMapTy
Upstream SHA -> CVE mapping.
Definition CveShaMap.h:26
std::string_view getCve(std::string_view shaCommit) const
Get CVE number for shaCommit.
Definition CveShaMap.h:64
CveShaMap(const std::filesystem::path &vsource={}, ShaSize shaSize=ShaSize::Long, const std::string &branch="origin/master", unsigned year=0, bool rejected=false)
Create a new CveShaMap.
std::vector< std::string > getShas(std::string_view cveNumber) const
Get SHAs for cveNumber.
Definition CveShaMap.h:77
CveShaMap(CveShaMap &&)=default
Move constructor.
CveShaMap & operator=(CveShaMap &&)=default
Move assignment operator.
ShaSize
Store Long or Short SHAs.
Definition CveShaMap.h:30
std::set< std::string > getAllCves() const
Get all stored CVE numbers.
Definition CveShaMap.h:89
Equality test for string and string_view to be used in containers.
Definition String.h:281
Hash for string and string_view to be used in hashing containers.
Definition String.h:254