-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathPos.hpp
92 lines (78 loc) · 2.36 KB
/
Pos.hpp
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// vim: set expandtab tabstop=8 shiftwidth=8 foldmethod=marker:
/**
* Posición de una palabra en un documento
*
* @package Mt77
* @author Vladimir Támara <[email protected]>
* 2008. Dominio público. Sin garantías.
* http://creativecommons.org/licenses/publicdomain/ Dominio Público. Sin garantías.
* @version $Id: Pos.hpp,v 1.13 2010/01/18 16:12:50 vtamara Exp $
*/
#if !defined(Pos_hpp)
#define Pos_hpp
#include "comun.hpp"
#include <stdint.h>
using namespace std;
/**
* Clase que representa una posición en un archivo entre varios posibles.
*/
class Pos
{
public:
uint32_t numd; /**< Número de documento */
uint32_t numb; /**< Número de byte en el que está la palabra */
Pos(uint32_t d, uint32_t n):numd(d), numb(n)
{
ASSERT(d>0);
ASSERT(n>0);
}
};
/**
* Envía una representación plan de una posición a un flujo de salida
* @param os Flujo de salida
* @param p Posición
*/
std::ostream &operator<<(std::ostream &os, Pos p);
/**
* Comparacio entre 2 posiciónes
* @param p1 Primera
* @param p2 Segunda
* @return verdadero si y solo si p1 es menor que p2
**/
bool operator<(Pos p1, Pos p2);
/**
* Escribe lista de posiciones
* @param os Flujo de salida
* @param cpos Conjunto de posiciones, puede ser NULL
*
**/
void escribePos(iostream &os, set<Pos> *cpos);
/**
* Calcula longitud que requeriría escribePos para escribir cpos
*
* @param cpos Conjunto de posiciones, puede ser NULL
* @return Número de bytes
*/
uint32_t longPos(set<Pos> *cpos);
/**
* Saca copia de un conjunto de posiciones, renumerando los documentos.
* @param p Posiciones iniciales
* @param renum para renumerar posiciones.
*
* @see leePos
* @return Copia renumerada
**/
set<Pos> *copiaPos(set<Pos> &p, vector<int64_t> *renum);
/**
* Lee lista de posiciones
* @param is Flujo de entrada
* @param renum Si no es NULL renumera posiciones leídas de acuerdo a este
* vector.
* renum[0] tiene nuevo número menos 1 para documento 1, ...
* renum[n-1] nuevo número menos 1 para n-esimo documento.
* Si renum[i] es -1 no se incluirá en la respuesta el documento i+1 esimo,
*
* @return Conjunto de posiciones --renumerados si renum no es NULL
**/
set<Pos> *leePos(istream &is, vector<int64_t> *renum = NULL);
#endif