ArKanjo 0.5.1
A tool for find code duplicated functions in codebases
random_selector.hpp
Go to the documentation of this file.
1
13#pragma once
14
15#include <arkanjo/base/path.hpp>
17#include <random>
18#include <string>
19#include <vector>
20
23
31class RandomSelector : public CommandBase<RandomSelector> {
32 static constexpr const char* TEMPLATE_RANDOM_ENTRY =
33 "Functions: {path_a} AND {path_b}. Similarity: {similarity} ";
34
35 Similarity_Table* similarity_table;
36 double minimum_similarity;
37 double maximum_similarity;
38 double maximum_quantity;
39
40 const int seed = 123456789;
41 std::mt19937 rng = std::mt19937(seed);
42
48 bool is_valid_pair(SimilarPair path_pair);
49
54 std::vector<SimilarPair> get_similarity_pairs_filtered();
55
61 std::vector<SimilarPair> make_random_selection(std::vector<SimilarPair> path_pairs);
62
67 void print_path_pairs(std::vector<SimilarPair> path_pairs);
68
69 public:
70 static constexpr CliOption options_[] = {
71 {"minimum_similarity", 0, PositionalArgument, nullptr},
72 {"maximum_similarity", 0, PositionalArgument, nullptr},
73 {"maximum_quantity", 0, PositionalArgument, nullptr},
75 };
77 "Select random pairs of functions within a specified similarity range. "
78 "The provided MIN_SIMILARITY and MAX_SIMILARITY parameters define the "
79 "inclusive similarity interval, and up to MAX_QUANTITY pairs are randomly "
80 "selected and displayed.")
81
82
89 explicit RandomSelector(Similarity_Table* _similarity_table);
90
91 bool validate(const ParsedOptions& options) override;
92
96 bool run(const ParsedOptions& options) override;
97};
const CliOption * options() const final
Random pair selector for similar code segments.
bool validate(const ParsedOptions &options) override
Validate the arguments already analyzed.
bool run(const ParsedOptions &options) override
Handles random selection command.
static constexpr CliOption options_[]
COMMAND_DESCRIPTION("Select random pairs of functions within a specified similarity range. " "The provided MIN_SIMILARITY and MAX_SIMILARITY parameters define the " "inclusive similarity interval, and up to MAX_QUANTITY pairs are randomly " "selected and displayed.") explicit RandomSelector(Similarity_Table *_similarity_table)
Constructs selector with configuration.
Represents a similarity graph between functions (paths).
#define OPTION_END
This marks the end of a long array of options.
@ PositionalArgument
Logical path abstraction for source code elements.
Similarity relationships storage and analysis.