diff options
Diffstat (limited to 'gprofng/src/DbeArray.h')
-rw-r--r-- | gprofng/src/DbeArray.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/gprofng/src/DbeArray.h b/gprofng/src/DbeArray.h new file mode 100644 index 0000000..af7c36e --- /dev/null +++ b/gprofng/src/DbeArray.h @@ -0,0 +1,99 @@ +/* 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 _DbeArray_H +#define _DbeArray_H + +template <typename ITEM> class DbeArray +{ +public: + + DbeArray (long sz) + { + count = 0; + limit = sz; + data = new ITEM[limit]; + }; + + virtual + ~DbeArray () + { + delete[] data; + } + + int + append (const ITEM &item) + { + int n = allocate (1); + ITEM *p = get (n); + *p = item; + return n; + }; + + ITEM * + get (long index) + { + return (index < count && index >= 0) ? data + index : (ITEM *) NULL; + }; + + int + allocate (int cnt) + { + count += cnt; + resize (count); + return count - cnt; + }; + + int + size () + { + return (int) count; + }; + + void + reset () + { + count = 0; + }; + +private: + + void + resize (long cnt) + { + if (limit <= cnt) + { + limit *= 2; + if (limit < cnt) + limit = cnt + 1; + ITEM *d = new ITEM[limit]; + if (count > 0) + memcpy (d, data, sizeof (ITEM) * count); + delete[] data; + data = d; + } + }; + + ITEM *data; // Pointer to data vector + long count; // Number of items + long limit; // Array length +}; + +#endif /* _DbeArray_H */ |