summaryrefslogtreecommitdiff
path: root/gprofng/src/IndexObject.h
blob: 23f21d364818049c962df459eb1d9b64dd2e6f98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* Copyright (C) 2021 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 */