LCOV - code coverage report
Current view: top level - backends/chert - chert_btreebase.h (source / functions) Hit Total Coverage
Test: Test Coverage for xapian-core r Lines: 30 30 100.0 %
Date: 2011-08-21 Functions: 16 16 100.0 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /* chert_btreebase.h: Btree base file implementation
       2                 :            :  *
       3                 :            :  * Copyright 1999,2000,2001 BrightStation PLC
       4                 :            :  * Copyright 2002,2004,2007,2008,2011 Olly Betts
       5                 :            :  *
       6                 :            :  * This program is free software; you can redistribute it and/or
       7                 :            :  * modify it under the terms of the GNU General Public License as
       8                 :            :  * published by the Free Software Foundation; either version 2 of the
       9                 :            :  * License, or (at your option) any later version.
      10                 :            :  *
      11                 :            :  * This program is distributed in the hope that it will be useful,
      12                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 :            :  * GNU General Public License for more details.
      15                 :            :  *
      16                 :            :  * You should have received a copy of the GNU General Public License
      17                 :            :  * along with this program; if not, write to the Free Software
      18                 :            :  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
      19                 :            :  * USA
      20                 :            :  */
      21                 :            : 
      22                 :            : #ifndef OM_HGUARD_CHERT_BTREEBASE_H
      23                 :            : #define OM_HGUARD_CHERT_BTREEBASE_H
      24                 :            : 
      25                 :            : #include <string>
      26                 :            : 
      27                 :            : #include <xapian/visibility.h>
      28                 :            : 
      29                 :            : #include "chert_types.h"
      30                 :            : 
      31                 :            : class XAPIAN_VISIBILITY_DEFAULT ChertTable_base {
      32                 :            :     public:
      33                 :            :         /** Construct an object with all zero fields. */
      34                 :            :         ChertTable_base();
      35                 :            : 
      36                 :            :         /** Copy constructor */
      37                 :            :         ChertTable_base(const ChertTable_base &other);
      38                 :            : 
      39                 :            :         /** Destructor - frees resources. */
      40                 :            :         ~ChertTable_base();
      41                 :            : 
      42                 :            :         /** Read values from a base file.
      43                 :            :          *
      44                 :            :          *  @param name         The base of the filename
      45                 :            :          *  @param ch           The suffix
      46                 :            :          *  @param read_bitmap  True if we should read the bitmap
      47                 :            :          *  @param err_msg      An error string which will be appended
      48                 :            :          *                      to for some errors instead of throwing
      49                 :            :          *                      an exception.
      50                 :            :          *
      51                 :            :          *  @return     true if the read succeeded, or false otherwise.
      52                 :            :          */
      53                 :            :         bool read(const std::string &name, char ch, bool read_bitmap,
      54                 :            :                   std::string &err_msg);
      55                 :            : 
      56                 :      37433 :         uint4 get_revision() const { return revision; }
      57                 :       9582 :         uint4 get_block_size() const { return block_size; }
      58                 :       9582 :         uint4 get_root() const { return root; }
      59                 :       9582 :         uint4 get_level() const { return level; }
      60                 :          3 :         uint4 get_bit_map_size() const { return bit_map_size; }
      61                 :       9582 :         chert_tablesize_t get_item_count() const { return item_count; }
      62                 :      19901 :         uint4 get_last_block() const { return last_block; }
      63                 :       9582 :         bool get_have_fakeroot() const { return have_fakeroot; }
      64                 :       9582 :         bool get_sequential() const { return sequential; }
      65                 :            : 
      66                 :       3016 :         void set_revision(uint4 revision_) {
      67                 :       3016 :             revision = revision_;
      68                 :       3016 :         }
      69                 :       1224 :         void set_block_size(uint4 block_size_) {
      70                 :       1224 :             block_size = block_size_;
      71                 :       1224 :         }
      72                 :       1792 :         void set_root(uint4 root_) {
      73                 :       1792 :             root = root_;
      74                 :       1792 :         }
      75                 :       1792 :         void set_level(uint4 level_) {
      76                 :       1792 :             level = level_;
      77                 :       1792 :         }
      78                 :       1792 :         void set_item_count(chert_tablesize_t item_count_) {
      79                 :       1792 :             item_count = item_count_;
      80                 :       1792 :         }
      81                 :       3016 :         void set_have_fakeroot(bool have_fakeroot_) {
      82                 :       3016 :             have_fakeroot = have_fakeroot_;
      83                 :       3016 :         }
      84                 :       3016 :         void set_sequential(bool sequential_) {
      85                 :       3016 :             sequential = sequential_;
      86                 :       3016 :         }
      87                 :            : 
      88                 :            :         /** Write the btree base file to disk. */
      89                 :            :         void write_to_file(const std::string &filename,
      90                 :            :                            char base_letter,
      91                 :            :                            const std::string &tablename,
      92                 :            :                            int changes_fd,
      93                 :            :                            const std::string * changes_tail);
      94                 :            : 
      95                 :            :         /* Methods dealing with the bitmap */
      96                 :            :         /** true iff block n was free at the start of the transaction on
      97                 :            :          *  the B-tree.
      98                 :            :          */
      99                 :            :         bool block_free_at_start(uint4 n) const;
     100                 :            : 
     101                 :            :         void free_block(uint4 n);
     102                 :            : 
     103                 :            :         uint4 next_free_block();
     104                 :            : 
     105                 :            :         /** Find the first changed block at or after position *n.
     106                 :            :          *
     107                 :            :          *  Returns true if such a block was found, or false otherwise.
     108                 :            :          */
     109                 :            :         bool find_changed_block(uint4 * n);
     110                 :            : 
     111                 :            :         bool block_free_now(uint4 n);
     112                 :            : 
     113                 :            :         void calculate_last_block();
     114                 :            : 
     115                 :            :         /* Only used with fake root blocks */
     116                 :            :         void clear_bit_map();
     117                 :            : 
     118                 :            :         void commit();
     119                 :            : 
     120                 :            :         /* Used by ChertTable::check() */
     121                 :            :         bool is_empty() const;
     122                 :            : 
     123                 :            :         void swap(ChertTable_base &other);
     124                 :            : 
     125                 :            :     private:
     126                 :            :         /** private assignment operator - you probably want swap() instead */
     127                 :            :         void operator=(const ChertTable_base &other);
     128                 :            : 
     129                 :            :         void extend_bit_map();
     130                 :            : 
     131                 :            :         /* Decoded values from the base file follow */
     132                 :            :         uint4 revision;
     133                 :            :         uint4 block_size;
     134                 :            :         uint4 root;
     135                 :            :         uint4 level;
     136                 :            :         uint4 bit_map_size;
     137                 :            :         chert_tablesize_t item_count;
     138                 :            :         uint4 last_block;
     139                 :            :         bool have_fakeroot;
     140                 :            :         bool sequential;
     141                 :            : 
     142                 :            :         /* Data related to the bitmap */
     143                 :            :         /** byte offset into the bit map below which there
     144                 :            :            are no free blocks */
     145                 :            :         uint4 bit_map_low;
     146                 :            : 
     147                 :            :         /** the initial state of the bit map of blocks: 1 means in
     148                 :            :            use, 0 means free */
     149                 :            :         byte *bit_map0;
     150                 :            : 
     151                 :            :         /** the current state of the bit map of blocks */
     152                 :            :         byte *bit_map;
     153                 :            : };
     154                 :            : 
     155                 :            : #endif /* OM_HGUARD_CHERT_BTREEBASE_H */

Generated by: LCOV version 1.8