[llvm-commits] CVS: llvm/include/Support/DenseMap.h
Alkis Evlogimenos
alkis at niobe.cs.uiuc.edu
Wed Feb 25 15:57:07 PST 2004
Changes in directory llvm/include/Support:
DenseMap.h added (r1.1)
---
Log message:
Add DenseMap template and actually use it for for mapping virtual regs
to objects.
---
Diffs of the changes: (+61 -0)
Index: llvm/include/Support/DenseMap.h
diff -c /dev/null llvm/include/Support/DenseMap.h:1.1
*** /dev/null Wed Feb 25 15:55:56 2004
--- llvm/include/Support/DenseMap.h Wed Feb 25 15:55:45 2004
***************
*** 0 ****
--- 1,61 ----
+ //===- DenseMap.h - A dense map implmentation -------------------*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file implements a dense map. A dense map template takes two
+ // types. The first is the mapped type and the second is a functor
+ // that maps its argument to a size_t. On instanciation a "null" value
+ // can be provided to be used as a "does not exist" indicator in the
+ // map. A member function grow() is provided that given the value of
+ // the maximally indexed key (the argument of the functor) makes sure
+ // the map has enough space for it.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef SUPPORT_DENSEMAP_H
+ #define SUPPORT_DENSEMAP_H
+
+ #include <vector>
+
+ namespace llvm {
+
+ template <typename T, typename ToIndexT>
+ class DenseMap {
+ typedef typename ToIndexT::argument_type IndexT;
+ typedef std::vector<T> StorageT;
+ StorageT storage_;
+ T nullVal_;
+ ToIndexT toIndex_;
+
+ public:
+ DenseMap() { }
+
+ explicit DenseMap(const T& val) : nullVal_(val) { }
+
+ typename StorageT::reference operator[](IndexT n) {
+ assert(toIndex_(n) < storage_.size() && "index out of bounds!");
+ return storage_[toIndex_(n)];
+ }
+
+ typename StorageT::const_reference operator[](IndexT n) const {
+ assert(toIndex_(n) < storage_.size() && "index out of bounds!");
+ return storage_[toIndex_(n)];
+ }
+
+ void clear() {
+ storage_.assign(storage_.size(), nullVal_);
+ }
+
+ void grow(IndexT n) {
+ storage_.resize(toIndex_(n) + 1, nullVal_);
+ }
+ };
+
+ } // End llvm namespace
+
+ #endif
More information about the llvm-commits
mailing list