diff options
author | Vladimir Mezentsev <vladimir.mezentsev@oracle.com> | 2022-03-11 08:58:31 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2022-03-11 08:58:31 +0000 |
commit | bb368aad297fe3ad40cf397e6fc85aa471429a28 (patch) | |
tree | 0ab25909b8fe789d676bbdb00d501d4d485e4afe /gprofng/src/DbeCacheMap.h | |
parent | a655f19af95eb685ba64f48ee8fc2b3b7a3d886a (diff) | |
download | gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.zip gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.tar.gz gdb-bb368aad297fe3ad40cf397e6fc85aa471429a28.tar.bz2 |
gprofng: a new GNU profiler
top-level
* Makefile.def: Add gprofng module.
* configure.ac: Add --enable-gprofng option.
* src-release.sh: Add gprofng.
* Makefile.in: Regenerate.
* configure: Regenerate.
* gprofng: New directory.
binutils
* MAINTAINERS: Add gprofng maintainer.
* README-how-to-make-a-release: Add gprofng.
include.
* collectorAPI.h: New file.
* libcollector.h: New file.
* libfcollector.h: New file.
Diffstat (limited to 'gprofng/src/DbeCacheMap.h')
-rw-r--r-- | gprofng/src/DbeCacheMap.h | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/gprofng/src/DbeCacheMap.h b/gprofng/src/DbeCacheMap.h new file mode 100644 index 0000000..4c51a34 --- /dev/null +++ b/gprofng/src/DbeCacheMap.h @@ -0,0 +1,109 @@ +/* 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. */ + +/* + * Dbe Cache Map implementation. + * + * Simple Cache Map makes the following assumptions: + * - Cache Map is used for very fast but not guaranteed mapping; + * - No Relations can be used; + * - all objects used as keys or values has to be managed + * outside CacheMap (f.e. deletion); + */ + +#ifndef _DbeCacheMap_h +#define _DbeCacheMap_h + +#include <Map.h> + +template <typename Key_t, class ITEM> +class DbeCacheMap : public Map<Key_t, ITEM *> +{ +public: + + DbeCacheMap (int _size = DefaultSize) + { // _size should be 2 ** N + size = _size; + table = new DbeCache_T[size]; + memset (table, 0, size * sizeof (DbeCache_T)); + }; + + ~DbeCacheMap () + { + delete[] table; + }; + + void + put (Key_t key, ITEM *val) + { + int ind = get_hash (key); + table[ind].key = key; + table[ind].value = val; + }; + + ITEM * + get (Key_t key) + { + int ind = get_hash (key); + if (table[ind].key == key) + return table[ind].value; + return (ITEM *) NULL; + }; + + ITEM * + remove (Key_t key) + { + int ind = get_hash (key); + ITEM *v = table[ind].value; + table[ind].value = (ITEM *) NULL; + return v; + }; + + ITEM * + get (Key_t /* key */, typename Map<Key_t, ITEM *>::Relation /* rel */) + { + return (ITEM *) NULL; + }; + +private: + + enum + { + DefaultSize = (1 << 13) + }; + + typedef struct DbeCache_S + { + Key_t key; + ITEM *value; + } DbeCache_T; + DbeCache_T *table; + int size; + + int + get_hash (Key_t key) + { + unsigned long long h = (unsigned long long) key; + h ^= (h >> 20) ^ (h >> 12); + return (h ^ (h >> 7) ^ (h >> 4)) & (size - 1); + } +}; + +#endif |