1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott/*********************************************************************************** 2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SortClass.h 3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Copyright (c) 1997 5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Mark of the Unicorn, Inc. 6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * 7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * Permission to use, copy, modify, distribute and sell this software 8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * and its documentation for any purpose is hereby granted without fee, 9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * provided that the above copyright notice appear in all copies and 10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * that both that copyright notice and this permission notice appear 11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * in supporting documentation. Mark of the Unicorn makes no 12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * representations about the suitability of this software for any 13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * purpose. It is provided "as is" without express or implied warranty. 14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SUMMARY: A class designed to test operations that compares objects. All 16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott comparisons on SortClass may fail. Also records its own address for 17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott the sake of testing the stability of sorting algorithms. 18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott***********************************************************************************/ 20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if ! defined (INCLUDED_MOTU_SortClass) 21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define INCLUDED_MOTU_SortClass 1 22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include "Prefix.h" 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include "TestClass.h" 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass SortClass : public TestClass 27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott enum { kRange = 100 }; 30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SortClass( int v ) : TestClass( v ), addr(0) { 32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ResetAddress(); 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SortClass() : TestClass( (int)get_random(kRange) ), addr(0) { 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ResetAddress(); 37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator<( const TestClass& rhs ) const 40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott simulate_possible_failure(); 42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (const TestClass&)*this < ( rhs ); 43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott bool operator==( const TestClass& rhs ) const 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { 47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott simulate_possible_failure(); 48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return (const TestClass&)*this == ( rhs ); 49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SortClass* GetAddress() const { return addr; } 52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void ResetAddress() { addr = this; } 53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: 55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott SortClass* addr; 56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}; 57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool operator>( const SortClass& lhs, const SortClass& rhs ) { 59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return rhs < lhs; 60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool operator<=( const SortClass& lhs, const SortClass& rhs ) { 63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return !(rhs < lhs); 64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool operator>=( const SortClass& lhs, const SortClass& rhs ) { 67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return !(lhs < rhs); 68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool operator != ( const SortClass& lhs, const SortClass& rhs ) { 71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return !(lhs == rhs); 72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott} 73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined( __MWERKS__ ) && __MWERKS__ <= 0x3000 && !__SGI_STL 75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined( __MSL__ ) && __MSL__ < 0x2406 76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__MSL_FIX_ITERATORS__(SortClass); 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott__MSL_FIX_ITERATORS__(const SortClass); 78e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 79e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 80e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 81e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif // INCLUDED_MOTU_SortClass 82