-
Notifications
You must be signed in to change notification settings - Fork 0
/
Estructura.h
96 lines (64 loc) · 2.2 KB
/
Estructura.h
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
93
94
95
96
#ifndef TAREA1_LOGARITMOS_ESTRUCTURA_H
#define TAREA1_LOGARITMOS_ESTRUCTURA_H
#include <fstream>
#include "Nodo.h"
class Estructura {
public:
virtual void add_nodo(Nodo *nodo) = 0;
virtual void ordenar(const string &atributo, long long size) = 0;
};
class EstructuraArchivo: public Estructura {
public:
explicit EstructuraArchivo(string filename, long long M);
void add_nodo(Nodo *nodo) override;
// size es la cantidad de nodos
void ordenar(const string &atributo, long long size) override;
// algoritmo mergesort, el parametro first indica si es el primer paso de la recursion
void mergeSort(const string &atributo, long long l, long long r, bool first);
// merge de mergesort
void merge(const string &atributo, long long l, long long m, long long r);
// ordena un trozo de tamano M
void ordenarTrozo(const string &atributo);
// va a una linea especificica en el archivo
fstream &GoToLine(fstream& file, long long num);
private:
ofstream outfile;
ifstream infile;
string filename;
long long M;
};
// Nodo del Btree
class NodoBtree
{
Nodo ** llaves; // arreglo de llaves
int B; //rango de claves
NodoBtree ** hijos; // arreglo de punteros a hijos
int n; // numero de llaves
bool hoja; //es verdadero si el nodo es una hoja
string atributo;
public:
NodoBtree(int _B, bool _hoja, string _atributo); // Constructor
void insertar(Nodo * nodo);
Nodo * buscar(Nodo *nodo);
void splitChild(int i, NodoBtree *y);
// con esto se puede acceder a campos privados del Btree
friend class EstructuraBtree;
};
class EstructuraBtree: public Estructura
{
public:
//constructor recibe el atributo por el cual se ordenara al insertar
explicit EstructuraBtree(string atributo);
void add_nodo(Nodo *nodo);
Nodo * buscar(Nodo *nodo);
/* no hace nada, el btree ya esta ordenado
* por el atributo que le pasamos en el constructor
*/
void ordenar(const string &atributo , long long M);
private:
//tamaño del bloque
int B= 1024; // 1 kbyte
string atributo;
NodoBtree *root; // puntero al root node
};
#endif //TAREA1_LOGARITMOS_ESTRUCTURA_H