1 /* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
6 * Ordena texto ASCII o Unicode.
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/).
12 * Creado: Mon Sep 22 21:00:07 ART 2003
23 Unicode::Unicode(short c): caracter(c) {
25 std::cerr << "En constructor de Unicode." << std::endl;
29 Unicode::Unicode(const Unicode& unicode): caracter(unicode.caracter) {
31 std::cerr << "En constructor de copia de Unicode." << std::endl;
35 Unicode::~Unicode(void) {
37 std::cerr << "En destructor de Unicode." << std::endl;
41 bool Unicode::is_endl(void) const {
43 std::cerr << "En Unicode::is_endl()." << std::endl;
45 // Si los primeros o últimos 8 bits son 0xA = 10 = '\n' devuelve true.
46 return (static_cast<char>(caracter) == '\n')
47 || (static_cast<char>(caracter >> 8) == '\n');
50 Unicode& Unicode::operator=(const Unicode& unicode) {
52 std::cerr << "En operator= de Unicode." << std::endl;
54 caracter = unicode.caracter;
58 Unicode& Unicode::operator=(short c) {
60 std::cerr << "En operator= de Unicode (short)." << std::endl;
66 bool Unicode::operator<(const Unicode& unicode) const {
68 std::cerr << "En operator< de Unicode." << std::endl;
70 return caracter < unicode.caracter;
73 bool Unicode::operator==(const Unicode& unicode) const {
75 std::cerr << "En operator== de Unicode." << std::endl;
77 return caracter == unicode.caracter;
80 Unicode::operator short(void) const {
82 std::cerr << "En cast de Unicode a char." << std::endl;
84 return static_cast<short>(caracter);
87 Unicode::operator char(void) const {
89 std::cerr << "En cast de Unicode a char." << std::endl;
91 return static_cast<char>(caracter);
94 std::ostream& operator<<(std::ostream& out, const Unicode& unicode) {
96 std::cerr << "En operator<< de Unicode." << std::endl;
98 // Imprime el caracter como 2 caracteres ASCII.
99 // Si el primer caracter (bits mas significativos) es cero, entonces no lo
100 // imprime (es ASCII "puro").
101 if (unicode.caracter >> 8) {
102 out << static_cast<char>(unicode.caracter >> 8);
104 return out << static_cast<char>(unicode.caracter);
107 std::istream& operator>>(std::istream& in, Unicode& unicode) {
109 std::cerr << "En operator>> de Unicode." << std::endl;
113 // Lee los 2 primeros caracteres que no sean espacio.
114 in >> c1 >> std::noskipws >> c2 >> std::skipws;
115 // Los asigno como un short cuyos bits mas significativos corresponden al
116 // caracter 1 y los menos significativos al caracter 2.
117 unicode.caracter = (static_cast<short>(c1) << 8) + c2;