summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2010-07-07 16:12:16 -0400
committerEliot Horowitz <eliot@10gen.com>2010-07-08 01:23:07 -0400
commit95be0b890674763aa69313d501df2a067f80eb68 (patch)
tree696ed9b3ec379c7740f67040326457c0dd66a9b7
parentf07303e44fbfaab5d9eb014aaaec8cb3b64a4c48 (diff)
downloadmongo-95be0b890674763aa69313d501df2a067f80eb68.tar.gz
use boost smart_ptrs in mapreduce
-rw-r--r--db/mr.cpp26
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: