diff options
author | Mathias Stearn <mathias@10gen.com> | 2010-07-07 16:12:16 -0400 |
---|---|---|
committer | Eliot Horowitz <eliot@10gen.com> | 2010-07-08 01:23:07 -0400 |
commit | 95be0b890674763aa69313d501df2a067f80eb68 (patch) | |
tree | 696ed9b3ec379c7740f67040326457c0dd66a9b7 | |
parent | f07303e44fbfaab5d9eb014aaaec8cb3b64a4c48 (diff) | |
download | mongo-95be0b890674763aa69313d501df2a067f80eb68.tar.gz |
use boost smart_ptrs in mapreduce
-rw-r--r-- | db/mr.cpp | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/db/mr.cpp b/db/mr.cpp index 210dfcab1d5..6040b4da393 100644 --- a/db/mr.cpp +++ b/db/mr.cpp @@ -49,7 +49,7 @@ namespace mongo { BSONObj key; BSONObjBuilder reduceArgs( sizeEstimate ); - BSONArrayBuilder * valueBuilder = 0; + boost::scoped_ptr<BSONArrayBuilder> valueBuilder; int sizeSoFar = 0; unsigned n = 0; @@ -59,8 +59,8 @@ namespace mongo { if ( n == 0 ){ reduceArgs.append( keyE ); key = keyE.wrap(); - valueBuilder = new BSONArrayBuilder( reduceArgs.subarrayStart( "values" ) ); sizeSoFar = 5 + keyE.size(); + valueBuilder.reset(new BSONArrayBuilder( reduceArgs.subarrayStart( "values" ) )); } BSONElement ee = j.next(); @@ -77,7 +77,6 @@ namespace mongo { } assert(valueBuilder); valueBuilder->done(); - delete valueBuilder; BSONObj args = reduceArgs.obj(); s->invokeSafe( reduce , args ); @@ -303,21 +302,17 @@ namespace mongo { class MRTL { public: - MRTL( MRState& state ) : _state( state ){ - _temp = new InMemory(); + MRTL( MRState& state ) + : _state( state ) + , _temp(new InMemory()) + { _size = 0; numEmits = 0; } - ~MRTL(){ - delete _temp; - } - void reduceInMemory(){ - - InMemory * old = _temp; - InMemory * n = new InMemory(); - _temp = n; + boost::shared_ptr<InMemory> old = _temp; + _temp.reset(new InMemory()); _size = 0; for ( InMemory::iterator i=old->begin(); i!=old->end(); i++ ){ @@ -334,9 +329,6 @@ namespace mongo { insert( res ); } } - - delete( old ); - } void dump(){ @@ -384,7 +376,7 @@ namespace mongo { MRState& _state; - InMemory * _temp; + boost::shared_ptr<InMemory> _temp; long _size; public: |