]> git.llucax.com Git - z.facultad/75.42/string.git/blob - unicode.h
1dcdc8741cfb524593c746c9d79ccf7adcba6109
[z.facultad/75.42/string.git] / unicode.h
1 /* vim: set et sts=4 sw=4 fdm=marker fmr={,} fdn=1 fo+=t tw=80:
2  *
3  * Taller de Programación (75.42).
4  *
5  * Ejercicio Número 4:
6  * Ordena texto ASCII o Unicode.
7  *
8  * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9  * Puede copiar, modificar y distribuir este programa bajo los términos de
10  * la licencia GPL (http://www.gnu.org/).
11  *
12  * Creado: Mon Sep 22 21:00:15 ART 2003
13  *
14  * $Id$
15  */
16
17 #ifndef UNICODE_H
18 #define UNICODE_H
19
20 #include <ostream>
21 #include <istream>
22
23 #ifdef DEBUG
24 #   include <iostream>
25 #endif
26
27 /// Caracter Unicode.
28 class Unicode {
29
30         /// Caracter Unicode almacenado.
31         short caracter;
32
33     public:
34
35         /// Constructor.
36         Unicode(short c = 0);
37
38         /// Constructor de copia.
39         Unicode(const Unicode& unicode);
40
41         /// Destructor.
42         virtual ~Unicode(void);
43
44         /**
45          * Indica si el caracter es de fin de línea.
46          * En este caso se toma cualquier caracter cuyos 8 bits más o menos
47          * significatios sean 0xA ("\n"). Probablmente sólo funcione en unix, ya
48          * que para Mac el caracter de nueva línea es 0xD ("/r"). En DOS debería
49          * andar ya que el fin de línea se compone de 2 caracteres: 0xDA, por lo
50          * tanto termina en 0xA y debería ser considerado fin de línea.
51          */
52         bool is_endl(void);
53
54         /// Asignación de una instancia a otra.
55         Unicode& operator=(const Unicode& unicode);
56
57         /// Comparación por menor de dos instancias.
58         bool operator<(const Unicode& unicode);
59
60         /// Comparación por igual de dos instancias.
61         bool operator==(const Unicode& unicode);
62
63         /// Cast a char.
64         operator char(void) const;
65
66         /// Cast a char.
67         operator short(void) const;
68
69         /// Volcado a un stream de salida.
70         friend std::ostream& operator<<(std::ostream& out,
71                 const Unicode& unicode);
72
73         /**
74          * Captura desde un stream de entrada.
75          * Toma de a 2 caracteres, suponiendo que la consola puede \e escribir
76          * caracteres unicode. El primer caracter se usa como bits de mayor peso
77          * y el segundo como de menor peso. Por ejemplo, si se ingresa \c a2 se
78          * guarda internamente como el número 24882 ya que
79          * <tt>a = 97 = 0x61</tt>, <tt>2 = 50 = 0x32</tt> por lo que el valor
80          * guardado internamente es igual a <tt>0x6132 = 24882</tt>.
81          */
82         friend std::istream& operator>>(std::istream& in,
83                 Unicode& unicode);
84
85 };
86
87 #endif // UNICODE_H