LCOV - code coverage report
Current view: top level - src/leveldb/table - iterator.cc (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 17 39 43.6 %
Date: 2015-10-12 22:39:14 Functions: 3 18 16.7 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file. See the AUTHORS file for names of contributors.
       4             : 
       5             : #include "leveldb/iterator.h"
       6             : 
       7             : namespace leveldb {
       8             : 
       9       30401 : Iterator::Iterator() {
      10       30401 :   cleanup_.function = NULL;
      11       30401 :   cleanup_.next = NULL;
      12       30401 : }
      13             : 
      14       30401 : Iterator::~Iterator() {
      15       30401 :   if (cleanup_.function != NULL) {
      16       12793 :     (*cleanup_.function)(cleanup_.arg1, cleanup_.arg2);
      17       25586 :     for (Cleanup* c = cleanup_.next; c != NULL; ) {
      18           0 :       (*c->function)(c->arg1, c->arg2);
      19           0 :       Cleanup* next = c->next;
      20           0 :       delete c;
      21           0 :       c = next;
      22             :     }
      23             :   }
      24       30401 : }
      25             : 
      26       12793 : void Iterator::RegisterCleanup(CleanupFunction func, void* arg1, void* arg2) {
      27       12793 :   assert(func != NULL);
      28             :   Cleanup* c;
      29       12793 :   if (cleanup_.function == NULL) {
      30       12793 :     c = &cleanup_;
      31             :   } else {
      32           0 :     c = new Cleanup;
      33           0 :     c->next = cleanup_.next;
      34           0 :     cleanup_.next = c;
      35             :   }
      36       12793 :   c->function = func;
      37       12793 :   c->arg1 = arg1;
      38       12793 :   c->arg2 = arg2;
      39       12793 : }
      40             : 
      41             : namespace {
      42           0 : class EmptyIterator : public Iterator {
      43             :  public:
      44           0 :   EmptyIterator(const Status& s) : status_(s) { }
      45           0 :   virtual bool Valid() const { return false; }
      46           0 :   virtual void Seek(const Slice& target) { }
      47           0 :   virtual void SeekToFirst() { }
      48           0 :   virtual void SeekToLast() { }
      49           0 :   virtual void Next() { assert(false); }
      50           0 :   virtual void Prev() { assert(false); }
      51           0 :   Slice key() const { assert(false); return Slice(); }
      52           0 :   Slice value() const { assert(false); return Slice(); }
      53           0 :   virtual Status status() const { return status_; }
      54             :  private:
      55             :   Status status_;
      56             : };
      57             : }  // namespace
      58             : 
      59           0 : Iterator* NewEmptyIterator() {
      60           0 :   return new EmptyIterator(Status::OK());
      61             : }
      62             : 
      63           0 : Iterator* NewErrorIterator(const Status& status) {
      64           0 :   return new EmptyIterator(status);
      65             : }
      66             : 
      67             : }  // namespace leveldb

Generated by: LCOV version 1.11