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 _INDEXOBJECT_H 22 #define _INDEXOBJECT_H 23 24 #include "Histable.h" 25 #include "Expression.h" 26 27 class IndexObject : public Histable 28 { 29 public: 30 IndexObject (int _indextype, uint64_t _index); 31 IndexObject (int _indextype, Histable *_obj); 32 bool requires_string_sort (); // name column should be sorted using name text 33 34 virtual Histable_type get_type()35 get_type () 36 { 37 return INDEXOBJ; 38 } 39 40 virtual char *get_name (NameFormat = NA); 41 virtual void set_name (char*); 42 virtual void set_name_from_context (Expression::Context *); 43 virtual Histable *convertto (Histable_type, Histable* = NULL); 44 45 virtual uint64_t get_addr()46 get_addr () 47 { 48 return id; 49 } 50 51 uint64_t get_index()52 get_index () 53 { 54 return id; 55 } 56 57 Histable * get_obj()58 get_obj () 59 { 60 return obj; 61 } 62 63 // for use in index object definitions 64 static const uint64_t INDXOBJ_EXPGRID_SHIFT = 60; 65 static const uint64_t INDXOBJ_EXPID_SHIFT = 32; 66 static const uint64_t INDXOBJ_PAYLOAD_SHIFT = 0; 67 static const uint64_t INDXOBJ_EXPGRID_MASK = 68 ((1LLU << (64 - INDXOBJ_EXPGRID_SHIFT)) - 1); 69 static const uint64_t INDXOBJ_EXPID_MASK = 70 ((1LLU << (INDXOBJ_EXPGRID_SHIFT - INDXOBJ_EXPID_SHIFT)) - 1); 71 static const uint64_t INDXOBJ_PAYLOAD_MASK = 72 ((1LLU << (INDXOBJ_EXPID_SHIFT - INDXOBJ_PAYLOAD_SHIFT)) - 1); 73 74 private: 75 76 int indextype; 77 Histable *obj; 78 bool nameIsFinal; 79 }; 80 81 typedef enum IndexObjTypes 82 { 83 INDEX_THREADS = 0, 84 INDEX_CPUS, 85 INDEX_SAMPLES, 86 INDEX_GCEVENTS, 87 INDEX_SECONDS, 88 INDEX_PROCESSES, 89 INDEX_EXPERIMENTS, 90 INDEX_BYTES, 91 INDEX_DURATION, 92 INDEX_LAST // never used; marks the count of precompiled items 93 } IndexObjTypes_t; 94 95 class IndexObjType_t 96 { 97 public: 98 IndexObjType_t (); 99 ~IndexObjType_t (); 100 int type; 101 char *name; // used as input 102 char *i18n_name; // used for output 103 char *index_expr_str; 104 Expression *index_expr; 105 char mnemonic; 106 char *short_description; 107 char *long_description; 108 MemObjType_t *memObj; 109 }; 110 111 #endif /* _INDEXOBJECT_H */ 112