]> git.llucax.com Git - z.facultad/75.42/string.git/commitdiff
Compila el UniveralString pero está incompleto.
authorLeandro Lucarella <llucax@gmail.com>
Sun, 28 Sep 2003 05:46:10 +0000 (05:46 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 28 Sep 2003 05:46:10 +0000 (05:46 +0000)
universalstring.cpp
universalstring.h

index 68d09f586025bfec15ef7835679ffd6ee6847060..57d458f34b4a2a2dceb3306cc6ddb2fb7ef270d1 100644 (file)
  * $Id$
  */
 
+#include "ascii.h"
 #include "universalstring.h"
-#include <cstdlib>
+#include <algorithm>
+#include <iostream>
 
-#ifdef DEBUG
-#   include <iostream>
-#endif
-
-UniversalString::UniversalString(void): string(NULL) {
-#ifdef DEBUG
-    std::cerr << "En constructor de UniversalString." << std::endl;
-#endif
-}
-
-UniversalString::UniversalString(const UniversalString& str): string(NULL) {
-#ifdef DEBUG
-    std::cerr << "En constructor de copia de UniversalString." << std::endl;
-#endif
-    // Llamo al operador igual.
-    *this = str;
-}
-
-UniversalString::~UniversalString(void) {
-#ifdef DEBUG
-    std::cerr << "En destructor de UniversalString." << std::endl;
-#endif
-}
-
-UniversalString& UniversalString::operator=(const UniversalString& str) {
-#ifdef DEBUG
-    std::cerr << "En operator= de UniversalString." << std::endl;
-#endif
-    // Si tengo memoria reservada, la libero.
-    if (string) {
-        delete string;
-        string = NULL;
-    }
-    // Si el string a copiar no es nulo, aloco memoria y copio.
-    if (str.string) { // TODO creo que necesito len y max.
-        string = new T[strlen(str.string) + 1];
-    }
-    return *this;
-}
-
-bool UniversalString::operator<(const UniversalString& str) {
-#ifdef DEBUG
-    std::cerr << "En operator< de UniversalString." << std::endl;
-#endif
-    return caracter < str.caracter;
-}
-
-bool UniversalString::operator==(const UniversalString& str) {
-#ifdef DEBUG
-    std::cerr << "En operator== de UniversalString." << std::endl;
-#endif
-    return caracter == str.caracter;
-}
-
-short UniversalString::operator short(void) {
-#ifdef DEBUG
-    std::cerr << "En cast de UniversalString a short." << std::endl;
-#endif
-    return static_cast<short>(caracter);
-}
-
-/// Volcado a un stream de salida.
-std::ostream& operator<<(std::ostream& out, const UniversalString& str) {
-#ifdef DEBUG
-    std::cerr << "En operator<< de UniversalString." << std::endl;
-#endif
-    return out << str.caracter;
-}
-
-/// Captura desde un stream de entrada.
-std::istream& operator>>(std::istream& in, const UniversalString& str) {
-#ifdef DEBUG
-    std::cerr << "En operator>> de UniversalString." << std::endl;
-#endif
-    return in >> str.caracter;
+int main(void) {
+    UniversalString<Ascii> s("Hola mundo");
+    std::cout << s << std::endl;
+    return 0;
 }
 
index 21116a91b0b2caa91fff94fd3534fa212c1d87d2..6fac1ed7236a0cd21e5a490f8ddb0823438f06ba 100644 (file)
 
 #include <ostream>
 #include <istream>
+#include <iterator>
+#include <vector>
 
 #ifdef DEBUG
 #   include <iostream>
 #endif
 
 /// String Universal.
-template<class T>
+template <class T>
 class UniversalString {
 
         /// Cadena de caracteres.
-        T* string;
+        std::vector<T> string;
 
     public:
 
         /// Constructor.
-        UniversalString(char c = '0');
+        UniversalString(void) {
+#ifdef DEBUG
+            std::cerr << "En constructor de UniversalString." << std::endl;
+#endif
+        }
+
+        /// Constructor a partir de un string C.
+        UniversalString(const char* str) {
+#ifdef DEBUG
+            std::cerr << "En constructor de UniversalString a partir de string C."
+                << std::endl;
+#endif
+            int len = strlen(str);
+            string.clear();
+            string.reserve(len);
+            for (int i = 0; i < len; i++) {
+                string.push_back(str[i]);
+            }
+        }
 
         /// Constructor de copia.
-        UniversalString(const UniversalString& str);
+        UniversalString(const UniversalString& str) {
+#ifdef DEBUG
+            std::cerr << "En constructor de copia de UniversalString."
+                << std::endl;
+#endif
+        }
 
         /// Destructor.
-        virtual ~UniversalString(void);
+        virtual ~UniversalString(void) {
+#ifdef DEBUG
+            std::cerr << "En destructor de UniversalString." << std::endl;
+#endif
+        }
 
         /// Asignación de una instancia a otra.
-        UniversalString& operator=(const UniversalString& str);
+        UniversalString& operator=(const UniversalString& str) {
+#ifdef DEBUG
+            std::cerr << "En operator= de UniversalString." << std::endl;
+#endif
+            string = str.string;
+            return *this;
+        }
 
         /// Comparación por menor de dos instancias.
-        bool operator<(const UniversalString& str);
+        bool operator<(const UniversalString& str) {
+#ifdef DEBUG
+            std::cerr << "En operator< de UniversalString." << std::endl;
+#endif
+            return string < str.string;
+        }
 
         /// Comparación por igual de dos instancias.
-        bool operator==(const UniversalString& str);
+        bool operator==(const UniversalString& str) {
+#ifdef DEBUG
+            std::cerr << "En operator== de UniversalString." << std::endl;
+#endif
+            return string == str.string;
+        }
 
-        /// Cast a short.
-        short int UniversalString::operator short int(void);
+        /// Cast a string C.
+        //operator char*(void);
 
         /// Volcado a un stream de salida.
-        friend std::ostream& operator<<(std::ostream& out, const UniversalString& str);
+        friend std::ostream& operator<<(std::ostream& out,
+                const UniversalString<T>& str) {
+#ifdef DEBUG
+            std::cerr << "En operator<< de UniversalString." << std::endl;
+#endif
+            std::copy(str.string.begin(), str.string.end(),
+                    std::ostream_iterator<T>(out, ""));
+            return out;
+        }
 
         /// Captura desde un stream de entrada.
-        friend std::istream& operator>>(std::istream& in, const UniversalString& str);
+        friend std::istream& operator>>(std::istream& in,
+                const UniversalString<T>& str) {
+#ifdef DEBUG
+            std::cerr << "En operator>> de UniversalString." << std::endl;
+#endif
+            std::copy(std::istream_iterator<T>(in), std::istream_iterator<T>(),
+                    back_inserter(str.string));
+            return in;
+        }
 
 };