+/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Ejercicio Número 4:
+ * Ordena texto ASCII o Unicode.
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: Mon Sep 22 21:00:07 ART 2003
+ *
+ * $Id$
+ */
+
+#include "universalstring.h"
+#include <cstdlib>
+
+#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;
+}
+