# include <iostream>
#endif
+Ascii::Ascii(char c = '0'): caracter(c) {
+#ifdef DEBUG
+ std::cerr << "En constructor de Ascii." << std::endl;
+#endif
+}
+
+Ascii::Ascii(const Ascii& ascii): caracter(ascii.caracter) {
+#ifdef DEBUG
+ std::cerr << "En constructor de copia de Ascii." << std::endl;
+#endif
+}
+
+Ascii::~Ascii(void) {
+#ifdef DEBUG
+ std::cerr << "En destructor de Ascii." << std::endl;
+#endif
+}
+
+Ascii& Ascii::operator=(const Ascii& ascii) {
+#ifdef DEBUG
+ std::cerr << "En operator= de Ascii." << std::endl;
+#endif
+ caracter = ascii.caracter;
+ return *this;
+}
+
+bool Ascii::operator<(const Ascii& ascii) {
+#ifdef DEBUG
+ std::cerr << "En operator< de Ascii." << std::endl;
+#endif
+ return caracter < ascii.caracter;
+}
+
+bool Ascii::operator==(const Ascii& ascii) {
+#ifdef DEBUG
+ std::cerr << "En operator== de Ascii." << std::endl;
+#endif
+ return caracter == ascii.caracter;
+}
+
+short Ascii::operator short(void) {
+#ifdef DEBUG
+ std::cerr << "En cast de Ascii a short." << std::endl;
+#endif
+ return static_cast<short>(caracter);
+}
+
/// Volcado a un stream de salida.
std::ostream& operator<<(std::ostream& out, const Ascii& ascii) {
#ifdef DEBUG
public:
/// Constructor.
- Ascii(char c = '0'): caracter(c) {
-#ifdef DEBUG
- std::cerr << "En constructor de Ascii." << std::endl;
-#endif
- }
+ Ascii(char c = '0');
/// Constructor de copia.
- Ascii(const Ascii& ascii): caracter(ascii.caracter) {
-#ifdef DEBUG
- std::cerr << "En constructor de copia de Ascii." << std::endl;
-#endif
- }
+ Ascii(const Ascii& ascii);
/// Destructor.
- virtual ~Ascii(void) {
-#ifdef DEBUG
- std::cerr << "En destructor de Ascii." << std::endl;
-#endif
- }
+ virtual ~Ascii(void);
/// Asignación de una instancia a otra.
- Ascii& operator=(const Ascii& ascii) {
-#ifdef DEBUG
- std::cerr << "En operator= de Ascii." << std::endl;
-#endif
- caracter = ascii.caracter;
- return *this;
- }
+ Ascii& operator=(const Ascii& ascii);
/// Comparación por menor de dos instancias.
- bool operator<(const Ascii& ascii) {
-#ifdef DEBUG
- std::cerr << "En operator< de Ascii." << std::endl;
-#endif
- return caracter < ascii.caracter;
- }
+ bool operator<(const Ascii& ascii);
/// Comparación por igual de dos instancias.
- bool operator==(const Ascii& ascii) {
-#ifdef DEBUG
- std::cerr << "En operator== de Ascii." << std::endl;
-#endif
- return caracter == ascii.caracter;
- }
+ bool operator==(const Ascii& ascii);
+
+ /// Cast a short.
+ short int Ascii::operator short int(void);
/// Volcado a un stream de salida.
friend std::ostream& operator<<(std::ostream& out, const Ascii& ascii);
--- /dev/null
+/* 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 "unicode.h"
+
+#ifdef DEBUG
+# include <iostream>
+#endif
+
+Unicode::Unicode(short c = 0): caracter(c) {
+#ifdef DEBUG
+ std::cerr << "En constructor de Unicode." << std::endl;
+#endif
+}
+
+Unicode::Unicode(const Unicode& unicode): caracter(unicode.caracter) {
+#ifdef DEBUG
+ std::cerr << "En constructor de copia de Unicode." << std::endl;
+#endif
+}
+
+Unicode::~Unicode(void) {
+#ifdef DEBUG
+ std::cerr << "En destructor de Unicode." << std::endl;
+#endif
+}
+
+Unicode& Unicode::operator=(const Unicode& unicode) {
+#ifdef DEBUG
+ std::cerr << "En operator= de Unicode." << std::endl;
+#endif
+ caracter = unicode.caracter;
+ return *this;
+}
+
+bool Unicode::operator<(const Unicode& unicode) {
+#ifdef DEBUG
+ std::cerr << "En operator< de Unicode." << std::endl;
+#endif
+ return caracter < unicode.caracter;
+}
+
+bool Unicode::operator==(const Unicode& unicode) {
+#ifdef DEBUG
+ std::cerr << "En operator== de Unicode." << std::endl;
+#endif
+ return caracter == unicode.caracter;
+}
+
+char Unicode::operator char(void) {
+#ifdef DEBUG
+ std::cerr << "En cast de Unicode a char." << std::endl;
+#endif
+ return static_cast<char>(caracter);
+}
+
+/// Volcado a un stream de salida.
+std::ostream& operator<<(std::ostream& out, const Unicode& unicode) {
+#ifdef DEBUG
+ std::cerr << "En operator<< de Unicode." << std::endl;
+#endif
+ return out << unicode.caracter;
+}
+
+/// Captura desde un stream de entrada.
+std::istream& operator>>(std::istream& in, const Unicode& unicode) {
+#ifdef DEBUG
+ std::cerr << "En operator>> de Unicode." << std::endl;
+#endif
+ return in >> unicode.caracter;
+}
+
--- /dev/null
+/* vim: set et sts=4 sw=4 fdm=marker fmr={,} 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:15 ART 2003
+ *
+ * $Id$
+ */
+
+#ifndef UNICODE_H
+#define UNICODE_H
+
+#include <ostream>
+#include <istream>
+
+#ifdef DEBUG
+# include <iostream>
+#endif
+
+/// Caracter Unicode.
+class Unicode {
+
+ /// Caracter Unicode almacenado.
+ char caracter;
+
+ public:
+
+ /// Constructor.
+ Unicode(short c = 0);
+
+ /// Constructor de copia.
+ Unicode(const Unicode& unicode);
+
+ /// Destructor.
+ virtual ~Unicode(void);
+
+ /// Asignación de una instancia a otra.
+ Unicode& operator=(const Unicode& unicode);
+
+ /// Comparación por menor de dos instancias.
+ bool operator<(const Unicode& unicode);
+
+ /// Comparación por igual de dos instancias.
+ bool operator==(const Unicode& unicode);
+
+ /// Cast a char.
+ char Unicode::operator char(void);
+
+ /// Volcado a un stream de salida.
+ friend std::ostream& operator<<(std::ostream& out, const Unicode& unicode);
+
+ /// Captura desde un stream de entrada.
+ friend std::istream& operator>>(std::istream& in, const Unicode& unicode);
+
+};
+
+#endif // UNICODE_H
--- /dev/null
+/* 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;
+}
+
--- /dev/null
+/* vim: set et sts=4 sw=4 fdm=marker fmr={,} 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:15 ART 2003
+ *
+ * $Id$
+ */
+
+#ifndef UNIVERSALSTRING_H
+#define UNIVERSALSTRING_H
+
+#include <ostream>
+#include <istream>
+
+#ifdef DEBUG
+# include <iostream>
+#endif
+
+/// String Universal.
+template<class T>
+class UniversalString {
+
+ /// Cadena de caracteres.
+ T* string;
+
+ public:
+
+ /// Constructor.
+ UniversalString(char c = '0');
+
+ /// Constructor de copia.
+ UniversalString(const UniversalString& str);
+
+ /// Destructor.
+ virtual ~UniversalString(void);
+
+ /// Asignación de una instancia a otra.
+ UniversalString& operator=(const UniversalString& str);
+
+ /// Comparación por menor de dos instancias.
+ bool operator<(const UniversalString& str);
+
+ /// Comparación por igual de dos instancias.
+ bool operator==(const UniversalString& str);
+
+ /// Cast a short.
+ short int UniversalString::operator short int(void);
+
+ /// Volcado a un stream de salida.
+ friend std::ostream& operator<<(std::ostream& out, const UniversalString& str);
+
+ /// Captura desde un stream de entrada.
+ friend std::istream& operator>>(std::istream& in, const UniversalString& str);
+
+};
+
+#endif // UNIVERSALSTRING_H