1/* Copyright (C) 2021 Free Software Foundation, Inc. 2 Contributed by Oracle. 3 4 This file is part of GNU Binutils. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, 51 Franklin Street - Fifth Floor, Boston, 19 MA 02110-1301, USA. */ 20 21#ifndef _FILTER_H 22#define _FILTER_H 23 24// A sample selection specifies a set of samples the user is interested in 25// viewing as a whole. 26 27#include "vec.h" 28#include "data_pckts.h" 29 30class Experiment; 31 32class FilterNumeric 33{ 34public: 35 FilterNumeric (Experiment *, const char *, const char *); 36 ~FilterNumeric (); 37 38 // set or update the range of items first and last 39 void set_range (uint64_t findex, uint64_t lindex, uint64_t total); 40 41 // Return a string representation of the current ranges 42 // E.g. "1-5,7,9,10,12-13,73" 43 char *get_pattern (); 44 45 // Return a string for the current status: %, range, ... 46 // E.g. "100%" "100% [1-7]" "25% [1-4]" 47 char *get_status (); 48 49 char *get_advanced_filter (); 50 51 // Sets selection according to the string representation 52 // See above for return values and error handling 53 bool set_pattern (char *, bool *); 54 55 // Return true if "number" is included in selection 56 bool is_selected (uint64_t number); 57 58 char * 59 get_cmd () 60 { 61 return cmd; 62 }; 63 64 char * 65 get_name () 66 { 67 return name; 68 }; 69 70 uint64_t 71 nelem () 72 { 73 return nitems; 74 }; 75 76 char *prop_name; // name in advanced filter 77 78private: 79 80 typedef struct 81 { 82 uint64_t first; 83 uint64_t last; 84 } RangePair; 85 86 void update_status (); 87 void update_range (); 88 89 // Include "range" in selection 90 bool include_range (uint64_t findex, uint64_t lindex); 91 92 // Parse a number from the string 93 uint64_t get_next_number (char *s, char **e, bool *fail); 94 95 // Data 96 Vector<RangePair *> *items; // sorted array of items 97 uint64_t nselected; 98 uint64_t nitems; 99 100 Experiment *exp; 101 char *cmd; 102 char *name; 103 char *pattern; 104 char *status; 105 106 // First and Last items in selection 107 uint64_t first; 108 uint64_t last; 109}; 110 111#endif /* _FILTER_H */ 112