Fwd: KDE/kdebase/apps/konsole/konsole

Ismail Donmez ismail at pardus.org.tr
Thu Oct 19 21:07:33 BST 2006


Don't want to start any flamewars about gcc, but last time we said trunk would 
only support gcc 3.4+ only because other versions especially gcc 3.3 as seen 
in this case has buggy C++ support.

Or is it gcc 3.3+ ?

Regards,
ismail

--------------- İletilen mesaj (başlangıç)

Konu: KDE/kdebase/apps/konsole/konsole
Gönderen: George Staikos <staikos at kde.org>
Tarih: Thu, 19 Oct 2006 22:55:29 +0300
Newsgroup: gmane.comp.kde.cvs

SVN commit 597273 by staikos:

make it compile with gcc 3.3.  the inlined switch() is an issue.  Also while
we're at it, avoid copying data around in operator== and !=, and make them
potentially faster.  Remove unnecessary null initilizations.

Now I can compile and launch konsole with gcc 3.3 and it even kind of works.



 M  +40 -40    TECommon.h  
 M  +2 -2      TEScreen.cpp  


--- trunk/KDE/kdebase/apps/konsole/konsole/TECommon.h #597272:597273
@@ -128,52 +128,52 @@
 class cacol
 {
 public:
-  cacol();
-  cacol(UINT8 space, int color);
+  cacol() : t(0), u(0), v(0), w(0) {}
+  cacol(UINT8 ty, int co) : t(ty), u(0), v(0), w(0)
+  {
+    if (CO_DFT == t) {
+      u = co & 1;
+    } else if (CO_SYS == t) {
+      u = co & 7;
+      v = (co >> 3) & 1;
+    } else if (CO_256 == t) {
+      u = co & 255;
+    } else if (CO_RGB == t) {
+      u = co >> 16;
+      v = co >> 8;
+      w = co;
+    }
+#if 0
+    // Doesn't work with gcc 3.3.4
+    switch (t)
+    {
+      case CO_UND:                                break;
+      case CO_DFT: u = co&  1;                    break;
+      case CO_SYS: u = co&  7; v = (co>>3)&1;     break;
+      case CO_256: u = co&255;                    break;
+      case CO_RGB: u = co>>16; v = co>>8; w = co; break;
+      default    : t = 0;                         break;
+    }
+#endif
+  }
   UINT8 t; // color space indicator
   UINT8 u; // various bytes representing the data in the respective ...
   UINT8 v; // ... color space. C++ does not do unions, so we cannot ...
   UINT8 w; // ... express ourselfs here, properly.
   void toggleIntensive(); // Hack or helper?
   QColor color(const ColorEntry* base) const;
-  friend bool operator == (cacol a, cacol b);
-  friend bool operator != (cacol a, cacol b);
+  friend bool operator == (const cacol& a, const cacol& b);
+  friend bool operator != (const cacol& a, const cacol& b);
 };
 
-#if 0
-inline cacol::cacol(UINT8 _t, UINT8 _u, UINT8 _v, UINT8 _w)
-: t(_t), u(_u), v(_v), w(_w)
-{
-}
-#else
-inline cacol::cacol(UINT8 ty, int co)
-: t(ty), u(0), v(0), w(0)
-{
-  switch (t)
-  {
-    case CO_UND:                                break;
-    case CO_DFT: u = co&  1;                    break;
-    case CO_SYS: u = co&  7; v = (co>>3)&1;     break;
-    case CO_256: u = co&255;                    break;
-    case CO_RGB: u = co>>16; v = co>>8; w = co; break;
-    default    : t = 0;                         break;
-  }
-}
-#endif
-
-inline cacol::cacol() // undefined, really
-: t(CO_UND), u(0), v(0), w(0)
-{
-}
-
-inline bool operator == (cacol a, cacol b)
+inline bool operator == (const cacol& a, const cacol& b)
 { 
-  return a.t == b.t && a.u == b.u && a.v == b.v && a.w == b.w;
+  return *reinterpret_cast<const Q_UINT32*>(&a.t) == *reinterpret_cast<const 
Q_UINT32*>(&b.t);
 }
 
-inline bool operator != (cacol a, cacol b)
+inline bool operator != (const cacol& a, const cacol& b)
 {
-  return a.t != b.t || a.u != b.u || a.v != b.v || a.w != b.w;
+  return *reinterpret_cast<const Q_UINT32*>(&a.t) != *reinterpret_cast<const 
Q_UINT32*>(&b.t);
 }
 
 inline const QColor color256(UINT8 u, const ColorEntry* base)
@@ -235,18 +235,18 @@
   bool   isTransparent(const ColorEntry* base) const;
   bool   isBold(const ColorEntry* base) const;
 public:
-  friend bool operator == (ca a, ca b);
-  friend bool operator != (ca a, ca b);
+  friend bool operator == (const ca& a, const ca& b);
+  friend bool operator != (const ca& a, const ca& b);
 };
 
-inline bool operator == (ca a, ca b)
+inline bool operator == (const ca& a, const ca& b)
 { 
-  return a.c == b.c && a.f == b.f && a.b == b.b && a.r == b.r;
+  return a.c == b.c && a.r == b.r && a.f == b.f && a.b == b.b;
 }
 
-inline bool operator != (ca a, ca b)
+inline bool operator != (const ca& a, const ca& b)
 {
-  return a.c != b.c || a.f != b.f || a.b != b.b || a.r != b.r;
+  return a.c != b.c || a.r != b.r || a.f != b.f || a.b != b.b;
 }
 
 inline bool ca::isTransparent(const ColorEntry* base) const
--- trunk/KDE/kdebase/apps/konsole/konsole/TEScreen.cpp #597272:597273
@@ -73,7 +73,7 @@
     histCursor(0),
     hist(new HistoryScrollNone()),
     cuX(0), cuY(0),
-    cu_fg(cacol()), cu_bg(cacol()), cu_re(0),
+    cu_re(0),
     tmargin(0), bmargin(0),
     tabstops(0),
     sel_begin(0), sel_TL(0), sel_BR(0),
@@ -81,7 +81,7 @@
     columnmode(false),
     ef_fg(cacol()), ef_bg(cacol()), ef_re(0),
     sa_cuX(0), sa_cuY(0),
-    sa_cu_re(0), sa_cu_fg(cacol()), sa_cu_bg(cacol()),
+    sa_cu_re(0),
     lastPos(-1)
 {
   


---------------  İletilen mesaj (bitiş)




More information about the kde-core-devel mailing list