File: objectcache.cc

package info (click to toggle)
zbackup 1.5-4
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 868 kB
  • sloc: cpp: 6,957; ansic: 468; python: 207; makefile: 10
file content (47 lines) | stat: -rw-r--r-- 1,119 bytes parent folder | download | duplicates (5)
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
// Copyright (c) 2012-2014 Konstantin Isakov <ikm@zbackup.org> and ZBackup contributors, see CONTRIBUTORS
// Part of ZBackup. Licensed under GNU GPLv2 or later + OpenSSL, see LICENSE

#include "objectcache.hh"

ObjectCache::ObjectCache( unsigned maxSize_ ): maxObjects( maxSize_ ),
  totalObjects( 0 )
{
}

bool ObjectCache::remove( ObjectId const & id )
{
  Objects tmp;
  tmp.push_back( Object() );
  tmp.back().id = id;
  ObjectMap::iterator i = objectMap.find( tmp.begin() );

  if ( i == objectMap.end() )
    return false;

  // Make sure that in case a destructor raises an exception, the cache
  // is left in a consistent state.
  Reference * ref = (*i)->reference;

  objects.erase( *i );
  objectMap.erase( i );
  --totalObjects;

  delete ref;

  return true;
}

void ObjectCache::clear()
{
  for ( Objects::iterator i = objects.begin(); i != objects.end(); )
  {
    // Make sure that in case a destructor raises an exception, the cache
    // is left in a consistent state.
    Reference * ref = i->reference;
    objectMap.erase( i );
    objects.erase( i++ );
    --totalObjects;

    delete ref;
  }
}