Minimum buffer size
[SXSI/TextCollection.git] / TextCollectionBuilder.h
1 /******************************************************************************
2  *   Copyright (C) 2009 by Niko Valimaki <nvalimak@cs.helsinki.fi>            *
3  *   Text collection interface for an in-memory XQuery/XPath engine           *
4  *                                                                            *
5  *   This program is free software; you can redistribute it and/or modify     *
6  *   it under the terms of the GNU Lesser General Public License as published *
7  *   by the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                      *
9  *                                                                            *
10  *   This program is distributed in the hope that it will be useful,          *
11  *   but WITHOUT ANY WARRANTY; without even the implied warranty of           *
12  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
13  *   GNU Lesser General Public License for more details.                      *
14  *                                                                            *
15  *   You should have received a copy of the GNU Lesser General Public License *
16  *   along with this program; if not, write to the                            *
17  *   Free Software Foundation, Inc.,                                          *
18  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.                *
19  ******************************************************************************/ 
20
21 #ifndef _SXSI_TextCollectionBuilder_h_
22 #define _SXSI_TextCollectionBuilder_h_
23
24 #include "TextCollection.h"
25 #include "Tools.h" // Defines ulong and uchar.
26 #include <vector>
27 #include <utility> // Defines std::pair.
28 #include <cstring> // Defines std::strlen, added by Kim
29
30 // Un-comment to compare BWT against a BWT generated from class dynFMI:
31 //#define TCB_TEST_BWT
32
33 // Default samplerate for suffix array samples
34 #define TEXTCOLLECTION_DEFAULT_SAMPLERATE 64
35
36 // Default input length, used to calculate the buffer size.
37 #define TEXTCOLLECTION_DEFAULT_INPUT_LENGTH (150 * 1024 * 1024)
38
39
40 namespace SXSI
41 {
42     struct TCBuilderRep; // Pimpl
43     
44     /**
45      * Build an instance of the TextCollection class.
46      */
47     class TextCollectionBuilder
48     {
49     public:
50         explicit TextCollectionBuilder(unsigned samplerate = TEXTCOLLECTION_DEFAULT_SAMPLERATE, 
51                                        ulong estimatedInputLength =  TEXTCOLLECTION_DEFAULT_INPUT_LENGTH);
52         ~TextCollectionBuilder();
53         
54         /** 
55          * Insert text
56          *
57          * Must be a zero-terminated string from alphabet [1,255].
58          * Can not be called after makeStatic().
59          * The i'th text insertion gets an identifier value i-1.
60          * In other words, document identifiers start from 0.
61          */
62         void InsertText(uchar const *);
63         /**
64          * Make static
65          *
66          * Convert to a static collection; reduces space and time complexities.
67          * New texts can not be inserted after this operation.
68          */
69         TextCollection * InitTextCollection();
70         
71     private:
72         struct TCBuilderRep * p_;
73
74         // No copy constructor or assignment
75         TextCollectionBuilder(TextCollectionBuilder const&);
76         TextCollectionBuilder& operator = (TextCollectionBuilder const&);
77     };
78 }
79 #endif