| /* Copyright (C) 2021-2023 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 */ |