sl@0: //-----------------------------------------------------------------------------
sl@0: // boost-libs variant/libs/test/class_a.h header file
sl@0: // See http://www.boost.org for updates, documentation, and revision history.
sl@0: //-----------------------------------------------------------------------------
sl@0: //
sl@0: // Copyright (c) 2003
sl@0: // Eric Friedman, Itay Maman
sl@0: //
sl@0: // Distributed under the Boost Software License, Version 1.0. (See
sl@0: // accompanying file LICENSE_1_0.txt or copy at
sl@0: // http://www.boost.org/LICENSE_1_0.txt)
sl@0: 
sl@0: #ifndef _CLASSA_H_INC_
sl@0: #define _CLASSA_H_INC_
sl@0: 
sl@0: #include <algorithm> // for std::swap
sl@0: #include <sstream>
sl@0: #include <iostream>
sl@0: #include <assert.h>
sl@0: #include <iosfwd>
sl@0: 
sl@0: struct class_a
sl@0: {
sl@0:    ~class_a();
sl@0:    class_a(int n = 5511);
sl@0:    class_a(const class_a& other);
sl@0: 
sl@0:    class_a& operator=(const class_a& rhs);
sl@0:    void swap(class_a& other);
sl@0: 
sl@0:    int get() const;
sl@0: 
sl@0: private:
sl@0:    int n_;
sl@0:    class_a* self_p_;
sl@0: 
sl@0: }; //Class_a
sl@0: 
sl@0: std::ostream& operator<<(std::ostream& strm, const class_a& a);
sl@0: 
sl@0: using namespace std;
sl@0: class_a::~class_a()
sl@0: {
sl@0:    assert(self_p_ == this);
sl@0: }
sl@0: 
sl@0: class_a::class_a(int n)
sl@0: {
sl@0:    n_ = n;
sl@0:    self_p_ = this;
sl@0: }
sl@0: 
sl@0: class_a::class_a(const class_a& other)
sl@0: {
sl@0:    n_ = other.n_;
sl@0:    self_p_ = this;
sl@0: }
sl@0: 
sl@0: 
sl@0: class_a& class_a::operator=(const class_a& rhs)
sl@0: {
sl@0:    class_a temp(rhs);
sl@0:    swap(temp);
sl@0: 
sl@0:    return *this;
sl@0: }
sl@0: 
sl@0: void class_a::swap(class_a& other)
sl@0: {
sl@0:    std::swap(n_, other.n_);
sl@0: }
sl@0: 
sl@0: int class_a::get() const
sl@0: {
sl@0:    return n_;
sl@0: }
sl@0: 
sl@0: std::ostream& operator<<(std::ostream& strm, const class_a& a)
sl@0: {
sl@0:    return strm << "class_a(" << a.get() << ")";
sl@0: }
sl@0: 
sl@0: #endif //_CLASSA_H_INC_