📄 testclass.h
字号:
/*********************************************************************************** TestClass.h * Copyright (c) 1997-1998 * Mark of the Unicorn, Inc. * * Permission to use, copy, modify, distribute and sell this software * and its documentation for any purpose is hereby granted without fee, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. Mark of the Unicorn makes no * representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied warranty. SUMMARY: TestClass simulates a class that uses resources. It is designed to cause exceptions when it is constructed or copied.***********************************************************************************/#ifndef INCLUDED_MOTU_TestClass#define INCLUDED_MOTU_TestClass 1# include "Prefix.h"# include <functional># include <utility># include <climits>#include <iosfwd>#include "random_number.h"#include "nc_alloc.h"class TestClass{public: inline TestClass(); inline TestClass( int value ); inline TestClass( const TestClass& rhs ); inline ~TestClass(); inline TestClass& operator=( const TestClass& rhs ); inline int value() const; inline TestClass operator!() const; bool operator==( const TestClass& rhs ) const { return value() == rhs.value(); } bool operator<( const TestClass& rhs ) const { return value() < rhs.value(); }protected: static inline unsigned int get_random(unsigned range = UINT_MAX);private: inline void Init( int value );#if TESTCLASS_DEEP_DATA int *p;#else int v;#endif};#if defined( __MWERKS__ ) && __MWERKS__ <= 0x3000 && !__SGI_STL# if defined( __MSL__ ) && __MSL__ < 0x2406# include <iterator.h>__MSL_FIX_ITERATORS__(TestClass);__MSL_FIX_ITERATORS__(const TestClass);typedef EH_STD::pair<const TestClass, TestClass> pair_testclass_testclass;__MSL_FIX_ITERATORS__( pair_testclass_testclass );__MSL_FIX_ITERATORS__( const pair_testclass_testclass );# endif#endifinline void TestClass::Init( int value ){#if TESTCLASS_DEEP_DATA p = _CHECK_PTR(new int( value ));#else simulate_constructor(); v = value;#endif}inline TestClass::TestClass(){ Init( int(get_random()) );}inline TestClass::TestClass( int value ){ Init( value );}inline TestClass::TestClass( const TestClass& rhs ){ Init( rhs.value() );}inline TestClass::~TestClass(){#if TESTCLASS_DEEP_DATA delete p;#else simulate_destructor();#endif}inline TestClass& TestClass::operator=( const TestClass& rhs ){#if TESTCLASS_DEEP_DATA int *newP = _CHECK_PTR(new int( rhs.value() )); delete p; p = newP;#else simulate_possible_failure(); v = rhs.value();#endif return *this;}inline int TestClass::value() const{#if TESTCLASS_DEEP_DATA return *p;#else return v;#endif}inline TestClass TestClass::operator!() const{ return TestClass( value()+1 );}inline bool operator>( const TestClass& lhs, const TestClass& rhs ) { return rhs < lhs;}inline bool operator>=( const TestClass& lhs, const TestClass& rhs ) { return !(lhs < rhs);}inline bool operator<=( const TestClass& lhs, const TestClass& rhs ) { return !(rhs < lhs);}inline bool operator != ( const TestClass& lhs, const TestClass& rhs ) { return lhs.value() != rhs.value();}inline unsigned int TestClass::get_random( unsigned range ){ return random_number( range );}extern std::ostream& operator << ( std::ostream& s, const TestClass&);#endif // INCLUDED_MOTU_TestClass
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -