1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
#include "zipios++/zipios-config.h"
#include "zipios++/meta-iostreams.h"
#include <vector>
#include <memory>
#include "zipios++/simplesmartptr.h"
#include <cassert>
using namespace zipios ;
using std::cerr ;
using std::cout ;
using std::endl ;
using std::auto_ptr ;
using std::ofstream ;
using std::vector ;
/* We don't want Bogus in the doxygen generated class index :-) */
#ifndef DOXYGEN
namespace zipios {
class Bogus {
public:
Bogus(bool &isAlive) : _isAlive(isAlive) {}
~Bogus() { _isAlive = false; }
protected:
// http://support.microsoft.com/default.aspx?scid=kb;EN-US;168384
friend class SimpleSmartPointer< Bogus > ;
friend class SimpleSmartPointer< const Bogus > ;
void ref() const { _refcount.ref() ; }
unsigned int unref() const { return _refcount.unref() ; }
unsigned int getReferenceCount() const { return _refcount.getReferenceCount() ; }
ReferenceCount< Bogus > _refcount ;
bool &_isAlive;
};
} // namespace
typedef SimpleSmartPointer< Bogus > SPBogus ;
#endif
int main() {
bool isAlive = true;
{
Bogus *p = new Bogus(isAlive);
SPBogus sp1( p ) ;
assert( sp1.getReferenceCount() == 1 );
{
SPBogus sp2 ;
sp2 = sp1 ;
assert( sp1.getReferenceCount() == 2 );
{
SPBogus sp3 ;
sp3 = p ;
assert( sp1.getReferenceCount() == 3 );
}
assert( sp1.getReferenceCount() == 2 );
assert( isAlive );
}
assert( sp1.getReferenceCount() == 1 );
assert( isAlive );
}
assert( ! isAlive );
return 0;
}
/** \file
\anchor test_zip_anchor
Source code to a small program that tests the functionality of Zipios++.
*/
/*
Zipios++ - a small C++ library that provides easy access to .zip files.
Copyright (C) 2000 Thomas Sndergaard
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
|