]> git.llucax.com Git - z.facultad/75.52/treemulator.git/commitdiff
Agrego dato asociado a la clave.
authorRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 1 Nov 2005 01:36:31 +0000 (01:36 +0000)
committerRicardo Markiewicz <rmarkie@fi.uba.ar>
Tue, 1 Nov 2005 01:36:31 +0000 (01:36 +0000)
No es el mejor lugar para poner algo olvidado. Pero es el menos
brain-damage :)

src/clave.h
src/clave_fija.cpp
src/clave_fija.h
src/clave_variable.cpp
src/clave_variable.h
src/main.cpp
src/main_var.cpp

index c0f3a3040145e24764cd390b200dac7cae8d5a7e..27e948780d3ca50693d80e11fb6a139d30302a36 100644 (file)
@@ -28,6 +28,8 @@ class Clave {
                virtual bool operator < (const Clave &k) const = 0;
                virtual bool operator == (const Clave &k) const = 0;
                virtual operator std::string () const = 0;
+       protected:
+               uint block_data;
 };
 
 #endif
index ebb08ea2a7594aea6f3ad63974e2813514a188ed..71f6f0d5d99847bb84e07a5d1922ee8faef57c28 100644 (file)
@@ -2,26 +2,29 @@
 #include <string>
 #include "clave_fija.h"
 
-ClaveFija::ClaveFija (int n)
+ClaveFija::ClaveFija (int n, uint bd)
 {
        data = n;
+       block_data = bd;
 }
 
 ClaveFija::ClaveFija (uchar *n)
 {
        memcpy (&data, n, sizeof(int));
+       memcpy (&block_data, n+sizeof(int), sizeof(int));
 }
 
 uint ClaveFija::Size () const
 {
-       return sizeof (int);
+       return sizeof (int)+sizeof(uint);
 }
 
 uchar *ClaveFija::ToArray () const
 {
        uchar *out;
-       out = new uchar[sizeof(int)];
+       out = new uchar[Size ()];
        memcpy (out, &data, sizeof(int));
+       memcpy (out+sizeof (int), &block_data, sizeof(int));
        return out;
 }
 
index e70cd526941f7e93c8d3b4996cc89105c2c09428..d04baf90d07ec3e846372d1fef0d4615c40db688 100644 (file)
@@ -9,7 +9,7 @@
 class ClaveFija : public Clave {
        public :
                ClaveFija (uchar *n);
-               ClaveFija (int n);
+               ClaveFija (int n, uint data);
                virtual ~ClaveFija () {}
 
                uint Size () const;
index 48a42a60b5d8cddd6f9ade59fc0873f00ca622ef..c97b9d9609c8c3ed256138d2c616b3b7cf3a459c 100644 (file)
@@ -3,9 +3,10 @@
 #include "clave_variable.h"
 #include <iostream>
 
-ClaveVariable::ClaveVariable (const std::string &s)
+ClaveVariable::ClaveVariable (const std::string &s, uint bd)
 {
        data = s;
+       block_data = bd;
 }
 
 ClaveVariable::ClaveVariable (uchar *n)
@@ -19,12 +20,15 @@ ClaveVariable::ClaveVariable (uchar *n)
        str[len] = '\0';
        data = std::string ((const char *)(str));
        delete [] str;
+       n += data.size () * sizeof (uchar);
+       memcpy (&block_data, n, sizeof (uint));
+
        raw_data = data;
 }
 
 uint ClaveVariable::Size () const
 {
-       return data.size ()*sizeof (uchar)+sizeof (uint);
+       return data.size ()*sizeof (uchar)+sizeof (uint)*2;
 }
 
 uchar *ClaveVariable::ToArray () const
@@ -32,8 +36,13 @@ uchar *ClaveVariable::ToArray () const
        uchar *out;
        uint len = data.size ();
        out = new uchar[Size ()];
+       int x = 0;
        memcpy (out, &len, sizeof (uint));
-       memcpy (out+sizeof(uint), data.c_str (), data.size ()*sizeof (uchar));
+       x += sizeof (uint);
+       memcpy (out+x, data.c_str (), data.size ()*sizeof (uchar));
+       x += data.size () * sizeof (uchar);
+       memcpy (out+x, &block_data, sizeof (uint));
+
        return out;
 }
 
index 224f4e0f50d111ca6b9d18ae7e4ed47cb02abb4c..b92448b333c42d6e34dadccf06863a343956064b 100644 (file)
@@ -13,7 +13,7 @@
 class ClaveVariable : public Clave {
        public :
                ClaveVariable (uchar *n);
-               ClaveVariable (const std::string &s);
+               ClaveVariable (const std::string &s, uint bd);
                virtual ~ClaveVariable () {}
 
                uint Size () const;
index a16a24ea0252bf5b1ea84a8843829d91d1f7313d..e4f0326247d6bca4a35cd7d90df7c599666bb024 100644 (file)
@@ -29,7 +29,7 @@ int main  (int argc, char *argv[])
 
        it = lst.begin ();
        while (it != lst.end ()) {
-               ClaveFija c(*it);
+               ClaveFija c(*it, 0);
 
                double l = Random::Double (0.0f, 1.0f);
                std::cout << l << " >= " << paltas << std::endl;
@@ -45,7 +45,7 @@ int main  (int argc, char *argv[])
                } else {
                        /* Tengo que borrar una clave entre 0 e "i" de la lista
                         * porque son las que ya agregue. */
-                       ClaveFija c(km.GetRandom ());
+                       ClaveFija c(km.GetRandom (), 0);
 
                        try {
                                tree.DelKey (c);
@@ -64,7 +64,7 @@ int main  (int argc, char *argv[])
        int bien = 0;
        int mal = 0;
        while (it != l.end ()) {
-               ClaveFija c(*it);
+               ClaveFija c(*it, 0);
                BTreeFindResult *r;
 
                r = tree.FindKey (c);
index c35c392098c618857d9996953f91dc8c5869a33c..91359b1f61a1a02a57643e51184af41e85ea9e58 100644 (file)
@@ -29,7 +29,7 @@ int main  (int argc, char *argv[])
 
        it = lst.begin ();
        while (it != lst.end ()) {
-               ClaveVariable c(*it);
+               ClaveVariable c(*it, 0);
 
                double l = Random::Double (0.0f, 1.0f);
                std::cout << l << " >= " << paltas << std::endl;
@@ -47,7 +47,7 @@ int main  (int argc, char *argv[])
                } else {
                        /* Tengo que borrar una clave entre 0 e "i" de la lista
                         * porque son las que ya agregue. */
-                       ClaveVariable c(km.GetRandom ());
+                       ClaveVariable c(km.GetRandom (), 0);
 
                        try {
                                tree.DelKey (c);
@@ -66,7 +66,7 @@ int main  (int argc, char *argv[])
        int bien = 0;
        int mal = 0;
        while (it != l.end ()) {
-               ClaveVariable c(*it);
+               ClaveVariable c(*it, 0);
                BTreeFindResult *r;
 
                r = tree.FindKey (c);