summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
58f5f2e)
Este nuevo metodo es parecido a ToArray, solo que muestra la clave
tal cual se leyo del disco. Es necesario para mostrar luego las claves
abreviadas y esas cosas.
#ifndef _CLAVE_H_
#define _CLAVE_H_
#ifndef _CLAVE_H_
#define _CLAVE_H_
-/* Clave para agregar a un arbol B */
#include "common.h"
#include <string>
#include "common.h"
#include <string>
-/** Clave abstracta para manejo de Claves */
+/** Clase abstracta para manejo de Claves */
class Clave {
public:
virtual ~Clave () {}
class Clave {
public:
virtual ~Clave () {}
- /** Retorna el tamaño en bytes que ocupa la clave */
+ /** Retorna el tamaño en bytes que ocupa la clave */
virtual uint Size () const = 0;
/** Retorna un array de bytes de Size() de longitud.
*
* El contenido del array es la clave en formato RAW
* para guardar en disco.
virtual uint Size () const = 0;
/** Retorna un array de bytes de Size() de longitud.
*
* El contenido del array es la clave en formato RAW
* para guardar en disco.
+ *
+ * El array debe ser liberado por el llamador.
*/
virtual uchar *ToArray () const = 0;
*/
virtual uchar *ToArray () const = 0;
+ virtual uchar *ToRaw (uint &size) const = 0;
+
/** Retorna un clon de la clave actual */
virtual Clave *Clone () const = 0;
/** Retorna un clon de la clave actual */
virtual Clave *Clone () const = 0;
{
return data == ((ClaveFija&)c).data;
}
{
return data == ((ClaveFija&)c).data;
}
+
+uchar *ClaveFija::ToRaw (uint &size) const
+{
+ size = Size ();
+ return ToArray ();
+}
+
uint Size () const;
uchar *ToArray () const;
uint Size () const;
uchar *ToArray () const;
+ uchar *ToRaw (uint &size) const;
Clave *Clone () const;
virtual bool operator < (const Clave &c) const;
Clave *Clone () const;
virtual bool operator < (const Clave &c) const;
str[len] = '\0';
data = std::string ((const char *)(str));
delete [] str;
str[len] = '\0';
data = std::string ((const char *)(str));
delete [] str;
}
uint ClaveVariable::Size () const
{
}
uint ClaveVariable::Size () const
{
- return data.size ()+sizeof (uint);
+ return data.size ()*sizeof (uchar)+sizeof (uint);
}
uchar *ClaveVariable::ToArray () const
}
uchar *ClaveVariable::ToArray () const
uint len = data.size ();
out = new uchar[Size ()];
memcpy (out, &len, sizeof (uint));
uint len = data.size ();
out = new uchar[Size ()];
memcpy (out, &len, sizeof (uint));
- memcpy (out+sizeof(uint), data.c_str (), data.size ());
+ memcpy (out+sizeof(uint), data.c_str (), data.size ()*sizeof (uchar));
if (pos <= 0) return false;
std::string siguales = data.substr (0, pos);
if (pos <= 0) return false;
std::string siguales = data.substr (0, pos);
- std::cout << siguales << std::endl;
int iguales = atoi (siguales.c_str ());
std::string primera_parte = c->data.substr (0, iguales);
int iguales = atoi (siguales.c_str ());
std::string primera_parte = c->data.substr (0, iguales);
return std::string (actual);
}
return std::string (actual);
}
+uchar *ClaveVariable::ToRaw (uint &size) const
+{
+ uchar *out;
+ size = raw_data.size ()*sizeof (uchar)+sizeof (uint);
+ uint len = raw_data.size ();
+ out = new uchar[size];
+ memcpy (out, &len, sizeof (uint));
+ memcpy (out+sizeof(uint), raw_data.c_str (), raw_data.size ()*sizeof (uchar));
+ return out;
+}
+
uint Size () const;
uchar *ToArray () const;
uint Size () const;
uchar *ToArray () const;
+ uchar *ToRaw (uint &size) const;
Clave *Clone () const;
bool Abrev (ClaveVariable *c);
Clave *Clone () const;
bool Abrev (ClaveVariable *c);
private:
std::string abreviar(std::string &primera, std::string &actual, int &iguales);
std::string data;
private:
std::string abreviar(std::string &primera, std::string &actual, int &iguales);
std::string data;
std::string ViewProperties::ToRaw (BTreeData *p)
{
std::stringstream ss;
std::string ViewProperties::ToRaw (BTreeData *p)
{
std::stringstream ss;
- uint size = p->Size (), i;
- uchar *arr = p->ToArray ();
+ uint size = 0, i;
+ uchar *arr = NULL;
+ if (p->GetKey ()) {
+ arr = p->GetKey ()->ToRaw (size);
+ }
for (i=0; i < size; i++) {
if (isalnum (arr[i]))
for (i=0; i < size; i++) {
if (isalnum (arr[i]))
+ if (p->GetChild () != 0) {
+ ss << "(";
+ ss << p->GetChild ();
+ ss << ")";
+ }
+
+ if (arr)
+ delete [] arr;