]> git.lyx.org Git - lyx.git/blobdiff - src/support/lyxstring.C
another safety belt
[lyx.git] / src / support / lyxstring.C
index 7fa00ca005f583ecc22c64ff50ff723ecc3cfcf0..73f2f67ceb48cc057102cfd52d86f12d6c7033e0 100644 (file)
@@ -1,12 +1,12 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file lyxstring.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
+ * \author Lars Gullik Bjønnes
  *
- *         Copyright 1995 Matthias Ettrich
- *          Copyright 1995-2000 The LyX Team.
- *
- * ====================================================== */
+ * Full author contact details are available in file CREDITS
+ */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -665,7 +665,7 @@ lyxstring::const_reference lyxstring::operator[](size_type pos) const
 #if 0
        // This is actually what the standard requires,
        lyx::Assert(pos <= rep->sz); // OURS!
-       static char helper = '\0';
+       static char const helper = '\0';
        return pos == rep->sz ? helper : rep->s[pos];
 #else
        // but we use this one since it is stricter
@@ -1732,64 +1732,37 @@ void swap(lyxstring & str1, lyxstring & str2)
 
 #include <iostream>
 
-#if 0
 istream & operator>>(istream & is, lyxstring & s)
 {
+#if 0
+       // very bad solution
+       char * nome = new char[1024];
+       is >> nome;
+       lyxstring tmp(nome);
+       delete [] nome;
+       if (!tmp.empty()) s = tmp;
+#else
        // better solution
        int w = is.width(0);
        s.clear();
        char c = 0;
+       bool skipspace = true;
        while (is.get(c)) {
-               if (isspace(c)) { is.putback(c); break; }
-               s += c;
+               if (isspace(c)) {
+                       if (!skipspace) {
+                               is.putback(c);
+                               break;
+                       }
+               } else {
+                       s += c;
+                       skipspace = false;
+               }
                if (--w == 1) break;
        }
        if (s.empty()) is.setstate(std::ios::failbit);
-       return is;
-}
-#else
-istream & operator%(istream & is, string & str)
-{
-       typedef istream            istream_type;
-       typedef int         int_type;
-       typedef std::streambuf streambuf_type;
-       typedef string     string_type;
-       typedef string::size_type         size_type;
-       size_type extracted = 0;
-
-#if 0
-       istream_type::sentry cerb(is, false);
-       if (cerb) {
-#else
-               if (is.ipfx0()) {
 #endif
-               str.erase();
-               std::streamsize w = is.width();
-               size_type n;
-               n = w > 0 ? static_cast<size_type>(w) : str.max_size();
-
-               int_type const eof = EOF;
-               streambuf_type * sb = is.rdbuf();
-               int_type c = sb->sgetc();
-
-               while (extracted < n
-                      && c != eof && !isspace(c)) {
-                       str += c;
-                       ++extracted;
-                       c = sb->snextc();
-               }
-               if (c == eof)
-                       is.setstate(std::ios::eofbit);
-               is.width(0);
-       }
-#if 1
-       is.isfx();
-#endif
-       if (!extracted)
-               is.setstate(std::ios::failbit);
        return is;
 }
-#endif
 
 
 ostream & operator<<(ostream & o, lyxstring const & s)