| /* Copyright (C) 2021-2025 Free Software Foundation, Inc. | 
 |    Contributed by Oracle. | 
 |  | 
 |    This file is part of GNU Binutils. | 
 |  | 
 |    This program is free software; you can redistribute it and/or modify | 
 |    it under the terms of the GNU General Public License as published by | 
 |    the Free Software Foundation; either version 3, or (at your option) | 
 |    any later version. | 
 |  | 
 |    This program is distributed in the hope that it will be useful, | 
 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |    GNU General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU General Public License | 
 |    along with this program; if not, write to the Free Software | 
 |    Foundation, 51 Franklin Street - Fifth Floor, Boston, | 
 |    MA 02110-1301, USA.  */ | 
 |  | 
 | #ifndef _INDEXOBJECT_H | 
 | #define _INDEXOBJECT_H | 
 |  | 
 | #include "Histable.h" | 
 | #include "Expression.h" | 
 |  | 
 | class IndexObject : public Histable | 
 | { | 
 | public: | 
 |   IndexObject (int _indextype, uint64_t _index); | 
 |   IndexObject (int _indextype, Histable *_obj); | 
 |   bool requires_string_sort (); // name column should be sorted using name text | 
 |  | 
 |   virtual Histable_type | 
 |   get_type () | 
 |   { | 
 |     return INDEXOBJ; | 
 |   } | 
 |  | 
 |   virtual char *get_name (NameFormat = NA); | 
 |   virtual void set_name (char*); | 
 |   virtual void set_name_from_context (Expression::Context *); | 
 |   virtual Histable *convertto (Histable_type, Histable* = NULL); | 
 |  | 
 |   virtual uint64_t | 
 |   get_addr () | 
 |   { | 
 |     return id; | 
 |   } | 
 |  | 
 |   uint64_t | 
 |   get_index () | 
 |   { | 
 |     return id; | 
 |   } | 
 |  | 
 |   Histable * | 
 |   get_obj () | 
 |   { | 
 |     return obj; | 
 |   } | 
 |  | 
 |   // for use in index object definitions | 
 |   static const uint64_t INDXOBJ_EXPGRID_SHIFT   = 60; | 
 |   static const uint64_t INDXOBJ_EXPID_SHIFT     = 32; | 
 |   static const uint64_t INDXOBJ_PAYLOAD_SHIFT   = 0; | 
 |   static const uint64_t INDXOBJ_EXPGRID_MASK    = | 
 | 	((1LLU << (64 - INDXOBJ_EXPGRID_SHIFT)) - 1); | 
 |   static const uint64_t INDXOBJ_EXPID_MASK      = | 
 | 	((1LLU << (INDXOBJ_EXPGRID_SHIFT - INDXOBJ_EXPID_SHIFT)) - 1); | 
 |   static const uint64_t INDXOBJ_PAYLOAD_MASK    = | 
 | 	((1LLU << (INDXOBJ_EXPID_SHIFT - INDXOBJ_PAYLOAD_SHIFT)) - 1); | 
 |  | 
 | private: | 
 |  | 
 |   int indextype; | 
 |   Histable *obj; | 
 |   bool nameIsFinal; | 
 | }; | 
 |  | 
 | typedef enum IndexObjTypes | 
 | { | 
 |   INDEX_THREADS = 0, | 
 |   INDEX_CPUS, | 
 |   INDEX_SAMPLES, | 
 |   INDEX_GCEVENTS, | 
 |   INDEX_SECONDS, | 
 |   INDEX_PROCESSES, | 
 |   INDEX_EXPERIMENTS, | 
 |   INDEX_BYTES, | 
 |   INDEX_DURATION, | 
 |   INDEX_LAST    // never used; marks the count of precompiled items | 
 | } IndexObjTypes_t; | 
 |  | 
 | class IndexObjType_t | 
 | { | 
 | public: | 
 |   IndexObjType_t (); | 
 |   ~IndexObjType_t (); | 
 |   int type; | 
 |   char *name;           // used as input | 
 |   char *i18n_name;      // used for output | 
 |   char *index_expr_str; | 
 |   Expression *index_expr; | 
 |   char mnemonic; | 
 |   char *short_description; | 
 |   char *long_description; | 
 |   MemObjType_t *memObj; | 
 | }; | 
 |  | 
 | #endif  /* _INDEXOBJECT_H */ |