| /** |
| * @file utility.h |
| * General purpose C++ utility |
| * |
| * @remark Copyright 2002 OProfile authors |
| * @remark Read the file COPYING |
| * |
| * @author Philippe Elie |
| * @author John Levon |
| */ |
| |
| #ifndef UTILITY_H |
| #define UTILITY_H |
| |
| #include <cstddef> |
| |
| /** noncopyable : object of class derived from this class can't be copied |
| * and isn't copy-constructible */ |
| class noncopyable { |
| protected: |
| noncopyable() {} |
| ~noncopyable() {} |
| private: |
| noncopyable(noncopyable const &); |
| noncopyable const & operator=(noncopyable const &); |
| }; |
| |
| |
| template<typename T> class scoped_ptr { |
| public: |
| explicit scoped_ptr(T * p = 0) : p_(p) {} |
| ~scoped_ptr() { delete p_; } |
| |
| void reset(T * p = 0) { |
| if (p == p_) |
| return; |
| delete p_; |
| p_ = p; |
| } |
| |
| T & operator*() const { return *p_; } |
| T * operator->() const { return p_; } |
| T * get() const { return p_; } |
| |
| void swap(scoped_ptr & sp) { |
| T * tmp = sp.p_; |
| sp.p_ = p_; |
| p_ = tmp; |
| } |
| |
| private: |
| scoped_ptr & operator=(scoped_ptr const &); |
| scoped_ptr(scoped_ptr const &); |
| T * p_; |
| }; |
| |
| template<typename T> class scoped_array { |
| public: |
| explicit scoped_array(T * p = 0) : p_(p) {} |
| ~scoped_array() { delete [] p_; } |
| |
| void reset(T * p = 0) { |
| if (p == p_) |
| return; |
| delete [] p_; |
| p_ = p; |
| } |
| |
| T & operator[](std::ptrdiff_t i) const { return p_[i]; } |
| T * get() const { return p_; } |
| |
| void swap(scoped_array & sp) { |
| T * tmp = sp.p_; |
| sp.p_ = p_; |
| p_ = tmp; |
| } |
| |
| private: |
| scoped_array & operator=(scoped_array const &); |
| scoped_array(scoped_array const &); |
| T * p_; |
| }; |
| |
| /** |
| * @param count |
| * @param total |
| * |
| * return total == 0 ? 1.0 : (count / total); |
| */ |
| inline double op_ratio(double count, double total) |
| { |
| return total == 0 ? 0.0 : (count / total); |
| } |
| |
| // Part copyright: |
| // (C) Copyright boost.org 1999. Permission to copy, use, modify, sell |
| // and distribute this software is granted provided this copyright |
| // notice appears in all copies. This software is provided "as is" without |
| // express or implied warranty, and with no claim as to its suitability for |
| // any purpose. |
| |
| #endif /* !UTILITY_H */ |