Files
TheRock/debug-tools/rocgdb/source/gprofng/src/PRBTree.h
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

107 lines
2.5 KiB
C++

/* Copyright (C) 2021-2024 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. */
//
// The Persistent Red-Black Tree
//
#ifndef _PRBTREE_H
#define _PRBTREE_H
#include "dbe_types.h"
template <class ITEM> class Vector;
// The number of pointers in a node must be set greater than 2.
// The higher the number the faster the search seems to be and
// the more memory the tree takes.
#define NPTRS 5
class PRBTree
{
public:
typedef Vaddr Key_t;
typedef hrtime_t Time_t;
PRBTree ();
~PRBTree ();
bool insert (Key_t key, Time_t ts, void *item);
bool remove (Key_t key, Time_t ts);
void *locate (Key_t key, Time_t ts);
void *locate_exact_match (Key_t key, Time_t ts);
void *locate_up (Key_t key, Time_t ts);
Vector<void *> *values ();
private:
enum Color
{
Red,
Black
};
enum Direction
{
None,
Left,
Right
};
struct LMap
{
Key_t key;
void *item;
LMap *parent;
LMap *chld[NPTRS];
Time_t time[NPTRS];
char dir[NPTRS];
char color;
LMap *next;
LMap (Key_t _key, void *_item);
LMap (const LMap& lm);
};
friend struct LMap;
LMap *mlist; // The master list of all nodes
Vector<LMap*> *roots;
Vector<Time_t> *times;
Vector<void *> *vals;
LMap *root;
Time_t rtts; // root timestamp
Time_t curts; // last update timestamp
LMap *rb_locate (Key_t key, Time_t ts, bool low);
LMap *rb_new_node (Key_t key, void *item);
LMap *rb_new_node (LMap *lm);
LMap *rb_copy_node (LMap *lm, Direction d);
LMap *rb_fix_chld (LMap *prnt, LMap *lm, Direction d);
LMap *rb_rotate (LMap *x, Direction d);
void rb_remove_fixup (LMap *x, LMap *prnt, Direction d0);
static LMap *rb_child (LMap *lm, Direction d, Time_t ts);
static Direction rb_which_chld (LMap *lm);
static LMap *rb_neighbor (LMap *lm, Time_t ts);
};
#endif /* _PRBTREE_H */