| |
| /*--------------------------------------------------------------------*/ |
| /*--- An sparse array (of words) implementation. ---*/ |
| /*--- pub_tool_sparsewa.h ---*/ |
| /*--------------------------------------------------------------------*/ |
| |
| /* |
| This file is part of Valgrind, a dynamic binary instrumentation |
| framework. |
| |
| Copyright (C) 2008-2011 OpenWorks Ltd |
| info@open-works.co.uk |
| |
| 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 2 of the |
| License, 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, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| The GNU General Public License is contained in the file COPYING. |
| */ |
| |
| #ifndef __PUB_TOOL_SPARSEWA_H |
| #define __PUB_TOOL_SPARSEWA_H |
| |
| //-------------------------------------------------------------------- |
| // PURPOSE: (see coregrind/pub_core_sparsewa.h for details) |
| //-------------------------------------------------------------------- |
| |
| ///////////////////////////////////////////////////////// |
| // // |
| // SparseWA: Interface // |
| // // |
| ///////////////////////////////////////////////////////// |
| |
| // This interface is a very cut-down version of WordFM. |
| // If you understand how to use WordFM then it should be |
| // trivial to use SparseWA. |
| |
| typedef struct _SparseWA SparseWA; /* opaque */ |
| |
| // Create a new one, using the specified allocator/deallocator |
| SparseWA* VG_(newSWA) ( void*(*alloc_nofail)(HChar* cc, SizeT), |
| HChar* cc, |
| void(*dealloc)(void*) ); |
| |
| // Delete one, and free all associated storage |
| void VG_(deleteSWA) ( SparseWA* swa ); |
| |
| // Add the binding key -> val to this swa. Any existing binding is |
| // overwritten. Returned Bool is True iff a previous binding existed. |
| Bool VG_(addToSWA) ( SparseWA* swa, UWord key, UWord val ); |
| |
| // Delete key from swa, returning associated key and val if found. |
| // Note: returning associated key is stupid (it can only be the |
| // key you just specified). This behaviour is retained to make it |
| // easier to migrate from WordFM. Returned Bool is True iff |
| // the key was actually bound in the mapping. |
| Bool VG_(delFromSWA) ( SparseWA* swa, |
| /*OUT*/UWord* oldK, /*OUT*/UWord* oldV, |
| UWord key ); |
| |
| // Indexes swa at 'key' (or, if you like, looks up 'key' in the |
| // mapping), and returns the associated value, if any, in *valP. For |
| // compatibility with WordFM, 'key' is also returned in *keyP. Returned |
| // Bool is True iff a binding for 'key' actually existed. |
| Bool VG_(lookupSWA) ( SparseWA* swa, |
| /*OUT*/UWord* keyP, /*OUT*/UWord* valP, |
| UWord key ); |
| |
| // Set up 'swa' for iteration. |
| void VG_(initIterSWA) ( SparseWA* swa ); |
| |
| // Get the next key/val pair. Behaviour undefined (highly likely |
| // to segfault) if 'swa' has been modified since initIterSWA was |
| // called. Returned Bool is False iff there are no more pairs |
| // that can be extracted. |
| Bool VG_(nextIterSWA)( SparseWA* swa, |
| /*OUT*/UWord* keyP, /*OUT*/UWord* valP ); |
| |
| // How many elements are there in 'swa'? NOTE: dangerous in the |
| // sense that this is not an O(1) operation but rather O(N), |
| // since it involves walking the whole tree. |
| UWord VG_(sizeSWA) ( SparseWA* swa ); |
| |
| #endif // __PUB_TOOL_SPARSEWA_H |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- end pub_tool_sparsewa.h ---*/ |
| /*--------------------------------------------------------------------*/ |