]> git.llucax.com Git - z.facultad/75.42/string.git/blobdiff - unicode.cpp
Se sacan un par de includes sin uso.
[z.facultad/75.42/string.git] / unicode.cpp
index f1a0ad72f91e917b823480d6c6a734316e17476b..85512f71cc3cbf00b16832c42586a1ebce9e6241 100644 (file)
@@ -20,7 +20,7 @@
 #   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
@@ -46,40 +46,50 @@ Unicode& Unicode::operator=(const Unicode& unicode) {
     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;
 }