# include <iostream>
#endif
-Unicode::Unicode(short c = 0): caracter(c) {
+Unicode::Unicode(short c): caracter(c) {
#ifdef DEBUG
std::cerr << "En constructor de Unicode." << std::endl;
#endif
return *this;
}
-bool Unicode::operator<(const Unicode& unicode) {
+bool Unicode::operator<(const Unicode& unicode) const {
#ifdef DEBUG
std::cerr << "En operator< de Unicode." << std::endl;
#endif
return caracter < unicode.caracter;
}
-bool Unicode::operator==(const Unicode& unicode) {
+bool Unicode::operator==(const Unicode& unicode) const {
#ifdef DEBUG
std::cerr << "En operator== de Unicode." << std::endl;
#endif
return caracter == unicode.caracter;
}
-char Unicode::operator char(void) {
+Unicode::operator char(void) const {
#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;
+ // Imprime el caracter como 2 caracteres ASCII.
+ // Si el primer caracter (bits mas significativos) es cero, entonces no lo
+ // imprime (es ASCII "puro").
+ if (unicode.caracter >> 8) {
+ out << static_cast<char>(unicode.caracter >> 8);
+ }
+ return out << static_cast<char>(unicode.caracter);
}
-/// Captura desde un stream de entrada.
-std::istream& operator>>(std::istream& in, const Unicode& unicode) {
+std::istream& operator>>(std::istream& in, Unicode& unicode) {
#ifdef DEBUG
std::cerr << "En operator>> de Unicode." << std::endl;
#endif
- return in >> unicode.caracter;
+ char c;
+ // Lee el primer caracter ASCII.
+ in >> c;
+ // Lo asigno como un short cuyos bits menos significativos son los del
+ // caracter leído.
+ unicode.caracter = static_cast<short>(c);
+ return in;
}