[llvm-commits] [llvm] r136233 - in /llvm/trunk/include/llvm: ADT/DenseMap.h ADT/SmallVector.h Support/Capacity.h
Chris Lattner
clattner at apple.com
Wed Jul 27 12:45:01 PDT 2011
On Jul 27, 2011, at 11:40 AM, Ted Kremenek wrote:
> Author: kremenek
> Date: Wed Jul 27 13:40:45 2011
> New Revision: 136233
>
> URL: http://llvm.org/viewvc/llvm-project?rev=136233&view=rev
> Log:
> Add a generic 'capacity_in_bytes' function to allow inspection of memory usage of various data structures.
Cool, how about adding this to STLExtras.h instead of a new header?
-Chris
>
> Added:
> llvm/trunk/include/llvm/Support/Capacity.h
> Modified:
> llvm/trunk/include/llvm/ADT/DenseMap.h
> llvm/trunk/include/llvm/ADT/SmallVector.h
>
> Modified: llvm/trunk/include/llvm/ADT/DenseMap.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/DenseMap.h?rev=136233&r1=136232&r2=136233&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/DenseMap.h (original)
> +++ llvm/trunk/include/llvm/ADT/DenseMap.h Wed Jul 27 13:40:45 2011
> @@ -540,6 +540,12 @@
> ++Ptr;
> }
> };
> +
> +template<typename KeyT, typename ValueT, typename KeyInfoT, typename ValueInfoT>
> +static inline size_t
> +capacity_in_bytes(const DenseMap<KeyT, ValueT, KeyInfoT, ValueInfoT> &X) {
> + return X.getMemorySize();
> +}
>
> } // end namespace llvm
>
>
> Modified: llvm/trunk/include/llvm/ADT/SmallVector.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/SmallVector.h?rev=136233&r1=136232&r2=136233&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/ADT/SmallVector.h (original)
> +++ llvm/trunk/include/llvm/ADT/SmallVector.h Wed Jul 27 13:40:45 2011
> @@ -78,21 +78,21 @@
> return BeginX == static_cast<const void*>(&FirstEl);
> }
>
> + /// grow_pod - This is an implementation of the grow() method which only works
> + /// on POD-like data types and is out of line to reduce code duplication.
> + void grow_pod(size_t MinSizeInBytes, size_t TSize);
> +
> +public:
> /// size_in_bytes - This returns size()*sizeof(T).
> size_t size_in_bytes() const {
> return size_t((char*)EndX - (char*)BeginX);
> }
> -
> +
> /// capacity_in_bytes - This returns capacity()*sizeof(T).
> size_t capacity_in_bytes() const {
> return size_t((char*)CapacityX - (char*)BeginX);
> }
>
> - /// grow_pod - This is an implementation of the grow() method which only works
> - /// on POD-like data types and is out of line to reduce code duplication.
> - void grow_pod(size_t MinSizeInBytes, size_t TSize);
> -
> -public:
> bool empty() const { return BeginX == EndX; }
> };
>
> @@ -738,6 +738,11 @@
>
> };
>
> +template<typename T, unsigned N>
> +static inline size_t capacity_in_bytes(const SmallVector<T, N> &X) {
> + return X.capacity_in_bytes();
> +}
> +
> } // End llvm namespace
>
> namespace std {
>
> Added: llvm/trunk/include/llvm/Support/Capacity.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Capacity.h?rev=136233&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Capacity.h (added)
> +++ llvm/trunk/include/llvm/Support/Capacity.h Wed Jul 27 13:40:45 2011
> @@ -0,0 +1,30 @@
> +//===--- Capacity.h - Generic computation of ADT memory use -----*- C++ -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This file defines the capacity function that computes the amount of
> +// memory used by an ADT.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_SUPPORT_CAPACITY_H
> +#define LLVM_SUPPORT_CAPACITY_H
> +
> +namespace llvm {
> +
> +template <typename T>
> +static inline size_t capacity_in_bytes(const T &x) {
> + // This default definition of capacity should work for things like std::vector
> + // and friends. More specialized versions will work for others.
> + return x.capacity() * sizeof(typename T::value_type);
> +}
> +
> +} // end namespace llvm
> +
> +#endif
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list