All pastes #218562 Raw Edit

Thib

public cpp v1 · immutable
#218562 ·published 2006-10-24 07:24 UTC
rendered paste body
// Copyright (C) 1993-2002 David R. Cheriton.  All rights reserved.#ifndef __PTR_H_#define __PTR_H_template <class T>class Ptr {public:    Ptr(T* rawPtr = 0);    Ptr(const Ptr<T>& ptr);    ~Ptr();    void operator =(const Ptr<T>& ptr);    bool operator ==(const Ptr<T>& ptr) const {        return rawPtr_ == ptr.rawPtr_;    }    bool operator !=(const Ptr<T>& ptr) const {        return rawPtr_ != ptr.rawPtr_;    }    const T* operator ->() const {        return rawPtr_;    }    T* operator ->() {        return rawPtr_;    }    T* value() const {        return rawPtr_;    }    template <class OtherType>    operator Ptr<OtherType>() const {        return Ptr<OtherType>(rawPtr_);    }protected:    T* rawPtr_;};template <class T,class U>Ptr<T> ptr_cast(Ptr<U> other) {    return dynamic_cast<T*>(other.value());}#endif// Copyright (C) 1993-2002 David R. Cheriton.  All rights reserved.#ifndef __PTR_IN_#define __PTR_IN_#include "Ptr.h"template<class T>Ptr<T>::Ptr(T* rawPtr) : rawPtr_(rawPtr) {    if (rawPtr != 0) {        rawPtr_->newRef();    }}template<class T>Ptr<T>::Ptr(const Ptr<T>& ptr) : rawPtr_(ptr.rawPtr_) {    if (rawPtr_ != 0) {        rawPtr_->newRef();    }}template<class T>Ptr<T>::~Ptr() {    if (rawPtr_ != 0) {        rawPtr_->deleteRef();    }}template<class T> voidPtr<T>::operator =(const Ptr<T>& ptr) {    const T* save = rawPtr_;    rawPtr_ = ptr.rawPtr_;     if (rawPtr_ != 0) {        rawPtr_->newRef();    }    if (save != 0) {        save->deleteRef();    }}#endif