Enrico Granata f2bbf717f7 Python summary strings:
- you can use a Python script to write a summary string for data-types, in one of
   three ways:
    -P option and typing the script a line at a time
    -s option and passing a one-line Python script
    -F option and passing the name of a Python function
   these options all work for the "type summary add" command
   your Python code (if provided through -P or -s) is wrapped in a function
   that accepts two parameters: valobj (a ValueObject) and dict (an LLDB
   internal dictionary object). if you use -F and give a function name,
   you're expected to define the function on your own and with the right
   prototype. your function, however defined, must return a Python string
 - test case for the Python summary feature
 - a few quirks:
  Python summaries cannot have names, and cannot use regex as type names
  both issues will be fixed ASAP
major redesign of type summary code:
 - type summary working with strings and type summary working with Python code
   are two classes, with a common base class SummaryFormat
 - SummaryFormat classes now are able to actively format objects rather than
   just aggregating data
 - cleaner code to print descriptions for summaries
the public API now exports a method to easily navigate a ValueObject hierarchy
New InputReaderEZ and PriorityPointerPair classes
Several minor fixes and improvements

llvm-svn: 135238
2011-07-15 02:26:42 +00:00

57 lines
1.5 KiB
C++

//===-- RefCounter.h --------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef liblldb_RefCounter_h_
#define liblldb_RefCounter_h_
#include "lldb/lldb-public.h"
namespace lldb_utility {
//----------------------------------------------------------------------
// A simple reference counter object. You need an uint32_t* to use it
// Once that is in place, everyone who needs to ref-count, can say
// RefCounter ref(ptr);
// (of course, the pointer is a shared resource, and must be accessible to
// everyone who needs it). Synchronization is handled by RefCounter itself
// The counter is decreased each time a RefCounter to it goes out of scope
//----------------------------------------------------------------------
class RefCounter
{
public:
typedef uint32_t value_type;
RefCounter(value_type* ctr);
~RefCounter();
private:
value_type* m_counter;
DISALLOW_COPY_AND_ASSIGN (RefCounter);
template <class T>
inline T
increment(T* t)
{
return __sync_fetch_and_add(t, 1);
}
template <class T>
inline T
decrement(T* t)
{
return __sync_fetch_and_add(t, -1);
}
};
} // namespace lldb_utility
#endif // #ifndef liblldb_RefCounter_h_