diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2010-08-22 00:59:46 +0000 | 
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2010-08-22 00:59:46 +0000 | 
| commit | 94b2dd0998230c758abd92c99d3700c971f7a31a (patch) | |
| tree | 1b9f66ba0b4f8fd99fc02a112d4b7a30c4afe0f6 /libcxx/test/utilities/memory/unique.ptr/deleter.h | |
| parent | d9c6c0b583ac1f1efeec3db571a1028a3c9b7a99 (diff) | |
| download | bcm5719-llvm-94b2dd0998230c758abd92c99d3700c971f7a31a.tar.gz bcm5719-llvm-94b2dd0998230c758abd92c99d3700c971f7a31a.zip  | |
Fixing whitespace problems
llvm-svn: 111767
Diffstat (limited to 'libcxx/test/utilities/memory/unique.ptr/deleter.h')
| -rw-r--r-- | libcxx/test/utilities/memory/unique.ptr/deleter.h | 182 | 
1 files changed, 181 insertions, 1 deletions
diff --git a/libcxx/test/utilities/memory/unique.ptr/deleter.h b/libcxx/test/utilities/memory/unique.ptr/deleter.h index df8b894e1e2..f14c74f87d1 100644 --- a/libcxx/test/utilities/memory/unique.ptr/deleter.h +++ b/libcxx/test/utilities/memory/unique.ptr/deleter.h @@ -1 +1,181 @@ -//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// <memory>
// unique_ptr
// Example move-only deleter
#ifndef DELETER_H
#define DELETER_H
#include <type_traits>
#include <cassert>
template <class T>
class Deleter
{
    int state_;
#ifdef _LIBCPP_MOVE
    Deleter(const Deleter&);
    Deleter& operator=(const Deleter&);
#else
    Deleter(Deleter&);
    Deleter& operator=(Deleter&);
#endif
public:
#ifdef _LIBCPP_MOVE
    Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;}
    Deleter& operator=(Deleter&& r)
    {
        state_ = r.state_;
        r.state_ = 0;
        return *this;
    }
#else
    operator std::__rv<Deleter>() {return std::__rv<Deleter>(*this);}
    Deleter(std::__rv<Deleter> r) : state_(r->state_) {r->state_ = 0;}
    Deleter& operator=(std::__rv<Deleter> r)
    {
        state_ = r->state_;
        r->state_ = 0;
        return *this;
    }
#endif
    Deleter() : state_(0) {}
    explicit Deleter(int s) : state_(s) {}
    ~Deleter() {assert(state_ >= 0); state_ = -1;}
#ifdef _LIBCPP_MOVE
    template <class U>
        Deleter(Deleter<U>&& d,
            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0)
            : state_(d.state()) {d.set_state(0);}
private:
    template <class U>
        Deleter(const Deleter<U>& d,
            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0);
#else
    template <class U>
        Deleter(Deleter<U> d,
            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0)
            : state_(d.state()) {}
#endif
public:
    int state() const {return state_;}
    void set_state(int i) {state_ = i;}
    void operator()(T* p) {delete p;}
};
template <class T>
class Deleter<T[]>
{
    int state_;
#ifdef _LIBCPP_MOVE
    Deleter(const Deleter&);
    Deleter& operator=(const Deleter&);
#else
    Deleter(Deleter&);
    Deleter& operator=(Deleter&);
#endif
public:
#ifdef _LIBCPP_MOVE
    Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;}
    Deleter& operator=(Deleter&& r)
    {
        state_ = r.state_;
        r.state_ = 0;
        return *this;
    }
#else
    operator std::__rv<Deleter>() {return std::__rv<Deleter>(*this);}
    Deleter(std::__rv<Deleter> r) : state_(r->state_) {r->state_ = 0;}
    Deleter& operator=(std::__rv<Deleter> r)
    {
        state_ = r->state_;
        r->state_ = 0;
        return *this;
    }
#endif
    Deleter() : state_(0) {}
    explicit Deleter(int s) : state_(s) {}
    ~Deleter() {assert(state_ >= 0); state_ = -1;}
    int state() const {return state_;}
    void set_state(int i) {state_ = i;}
    void operator()(T* p) {delete [] p;}
};
template <class T>
void
swap(Deleter<T>& x, Deleter<T>& y)
{
    Deleter<T> t(std::move(x));
    x = std::move(y);
    y = std::move(t);
}
template <class T>
class CDeleter
{
    int state_;
public:
    CDeleter() : state_(0) {}
    explicit CDeleter(int s) : state_(s) {}
    ~CDeleter() {assert(state_ >= 0); state_ = -1;}
    template <class U>
        CDeleter(const CDeleter<U>& d)
            : state_(d.state()) {}
    int state() const {return state_;}
    void set_state(int i) {state_ = i;}
    void operator()(T* p) {delete p;}
};
template <class T>
class CDeleter<T[]>
{
    int state_;
public:
    CDeleter() : state_(0) {}
    explicit CDeleter(int s) : state_(s) {}
    ~CDeleter() {assert(state_ >= 0); state_ = -1;}
    int state() const {return state_;}
    void set_state(int i) {state_ = i;}
    void operator()(T* p) {delete [] p;}
};
template <class T>
void
swap(CDeleter<T>& x, CDeleter<T>& y)
{
    CDeleter<T> t(std::move(x));
    x = std::move(y);
    y = std::move(t);
}
#endif
\ No newline at end of file +//===----------------------------------------------------------------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// <memory> + +// unique_ptr + +// Example move-only deleter + +#ifndef DELETER_H +#define DELETER_H + +#include <type_traits> +#include <cassert> + +template <class T> +class Deleter +{ +    int state_; + +#ifdef _LIBCPP_MOVE +    Deleter(const Deleter&); +    Deleter& operator=(const Deleter&); +#else  // _LIBCPP_MOVE +    Deleter(Deleter&); +    Deleter& operator=(Deleter&); +#endif  // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE +    Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} +    Deleter& operator=(Deleter&& r) +    { +        state_ = r.state_; +        r.state_ = 0; +        return *this; +    } +#else  // _LIBCPP_MOVE +    operator std::__rv<Deleter>() {return std::__rv<Deleter>(*this);} +    Deleter(std::__rv<Deleter> r) : state_(r->state_) {r->state_ = 0;} +    Deleter& operator=(std::__rv<Deleter> r) +    { +        state_ = r->state_; +        r->state_ = 0; +        return *this; +    } +#endif  // _LIBCPP_MOVE + +    Deleter() : state_(0) {} +    explicit Deleter(int s) : state_(s) {} +    ~Deleter() {assert(state_ >= 0); state_ = -1;} + +#ifdef _LIBCPP_MOVE +    template <class U> +        Deleter(Deleter<U>&& d, +            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0) +            : state_(d.state()) {d.set_state(0);} + +private: +    template <class U> +        Deleter(const Deleter<U>& d, +            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0); +#else  // _LIBCPP_MOVE +    template <class U> +        Deleter(Deleter<U> d, +            typename std::enable_if<!std::is_same<U, T>::value>::type* = 0) +            : state_(d.state()) {} +#endif  // _LIBCPP_MOVE +public: +    int state() const {return state_;} +    void set_state(int i) {state_ = i;} + +    void operator()(T* p) {delete p;} +}; + +template <class T> +class Deleter<T[]> +{ +    int state_; + +#ifdef _LIBCPP_MOVE +    Deleter(const Deleter&); +    Deleter& operator=(const Deleter&); +#else  // _LIBCPP_MOVE +    Deleter(Deleter&); +    Deleter& operator=(Deleter&); +#endif  // _LIBCPP_MOVE + +public: +#ifdef _LIBCPP_MOVE +    Deleter(Deleter&& r) : state_(r.state_) {r.state_ = 0;} +    Deleter& operator=(Deleter&& r) +    { +        state_ = r.state_; +        r.state_ = 0; +        return *this; +    } +#else  // _LIBCPP_MOVE +    operator std::__rv<Deleter>() {return std::__rv<Deleter>(*this);} +    Deleter(std::__rv<Deleter> r) : state_(r->state_) {r->state_ = 0;} +    Deleter& operator=(std::__rv<Deleter> r) +    { +        state_ = r->state_; +        r->state_ = 0; +        return *this; +    } +#endif  // _LIBCPP_MOVE + +    Deleter() : state_(0) {} +    explicit Deleter(int s) : state_(s) {} +    ~Deleter() {assert(state_ >= 0); state_ = -1;} + +    int state() const {return state_;} +    void set_state(int i) {state_ = i;} + +    void operator()(T* p) {delete [] p;} +}; + +template <class T> +void +swap(Deleter<T>& x, Deleter<T>& y) +{ +    Deleter<T> t(std::move(x)); +    x = std::move(y); +    y = std::move(t); +} + +template <class T> +class CDeleter +{ +    int state_; + +public: + +    CDeleter() : state_(0) {} +    explicit CDeleter(int s) : state_(s) {} +    ~CDeleter() {assert(state_ >= 0); state_ = -1;} + +    template <class U> +        CDeleter(const CDeleter<U>& d) +            : state_(d.state()) {} + +    int state() const {return state_;} +    void set_state(int i) {state_ = i;} + +    void operator()(T* p) {delete p;} +}; + +template <class T> +class CDeleter<T[]> +{ +    int state_; + +public: + +    CDeleter() : state_(0) {} +    explicit CDeleter(int s) : state_(s) {} +    ~CDeleter() {assert(state_ >= 0); state_ = -1;} + +    int state() const {return state_;} +    void set_state(int i) {state_ = i;} + +    void operator()(T* p) {delete [] p;} +}; + +template <class T> +void +swap(CDeleter<T>& x, CDeleter<T>& y) +{ +    CDeleter<T> t(std::move(x)); +    x = std::move(y); +    y = std::move(t); +} + +#endif  // DELETER_H  | 

