Arkanjo 0.1
A tool for find code duplicated functions in codebases
Loading...
Searching...
No Matches
random_selector.cpp
Go to the documentation of this file.
1#include "random_selector.hpp"
2
3Utils::COLOR Random_Selector::choose_text_color(){
5 if(processed_results%2 == 0){
7 }
8 return ret;
9}
10
11string Random_Selector::format_path_message_in_pair(Path path){
12 string ret = path.build_relative_path() + BETWEEN_RELATIVE_AND_FUNCTION_NAME + path.build_function_name();
13 return ret;
14}
15
16bool Random_Selector::is_valid_pair(tuple<double,Path,Path> path_pair){
17 auto [similarity,path1,path2] = path_pair;
18 if(similarity < minimum_similarity) return false;
19 if(similarity > maximum_similarity) return false;
20 return true;
21}
22
23vector<tuple<double,Path,Path>> Random_Selector::get_similarity_pairs_filtered(){
24 auto path_pairs = similarity_table->get_all_path_pairs_and_similarity_sorted_by_similarity();
25 vector<tuple<double,Path,Path>> ret;
26 for(auto path_pair : path_pairs){
27 if(is_valid_pair(path_pair)){
28 ret.push_back(path_pair);
29 }
30 }
31 return ret;
32}
33
34vector<tuple<double,Path,Path>> Random_Selector::make_random_selection(vector<tuple<double,Path,Path>> path_pairs){
35 shuffle(path_pairs.begin(),path_pairs.end(), rng);
36 while( int(path_pairs.size()) > maximum_quantity){
37 path_pairs.pop_back();
38 }
39 return path_pairs;
40}
41
42void Random_Selector::print_path_pair(tuple<double,Path,Path> path_pair){
43 auto [similarity,path1,path2] = path_pair;
44 string line;
45 line += START_LINE_COMPARATION_PRINT;
46 line += format_path_message_in_pair(path1);
47 line += BETWEEN_TWO_FUNCTION;
48 line += format_path_message_in_pair(path2);
49 line += SIMILARITY_MESSAGE;
50 line += to_string(similarity);
51 Utils::COLOR color = choose_text_color();
52 cout << Utils::format_colored_message(line,color) << '\n';
53}
54
55void Random_Selector::print_path_pairs(vector<tuple<double,Path,Path>> path_pairs){
56 for(auto path_pair : path_pairs){
57 print_path_pair(path_pair);
58 }
59}
60
62 Similarity_Table *_similarity_table,
63 double _minimum_similarity,
64 double _maximum_similarity,
65 double _maximum_quantity
66 ){
67 similarity_table = _similarity_table;
68 similarity_table->update_similarity(0);
69 minimum_similarity = _minimum_similarity;
70 maximum_similarity = _maximum_similarity;
71 maximum_quantity = _maximum_quantity;
72
73 auto path_pairs = get_similarity_pairs_filtered();
74 path_pairs = make_random_selection(path_pairs);
75 print_path_pairs(path_pairs);
76}
Path manipulation class for tool-specific directory structure.
Definition path.hpp:27
string build_relative_path()
Builds relative path portion.
Definition path.cpp:112
string build_function_name()
Extracts function name from path.
Definition path.cpp:121
Random_Selector(Similarity_Table *_similarity_table, double _minimum_similarity, double _maximum_similarity, double _maximum_quantity)
Constructs selector with configuration.
Manages and analyzes function similarity relationships.
void update_similarity(double new_similarity_threshold)
Updates similarity threshold.
vector< tuple< double, Path, Path > > get_all_path_pairs_and_similarity_sorted_by_similarity()
Gets all similar path pairs with scores, sorted.
return ret
Definition sum.c:3
NLOHMANN_BASIC_JSON_TPL_DECLARATION std::string to_string(const NLOHMANN_BASIC_JSON_TPL &j)
user-defined to_string function for JSON values
Definition json.hpp:25317
COLOR
Enumeration of available colors for formatted messages.
Definition utils.hpp:103
@ GRAY
Gray color.
Definition utils.hpp:111
@ CYAN
Cyan color.
Definition utils.hpp:110
string format_colored_message(string message, COLOR color)
Formats a message with ANSI color codes.
Definition utils.cpp:84
Random selection of similar code pairs.