[ROOT] TGText::InsText() optimization

From: Maxim Nikulin (nikulin@gorodok.net)
Date: Thu Sep 23 2004 - 10:54:44 MEST


Dear ROOT developers,

I suppose, invocation of LongestLine() from
Bool_t TGText::InsText(TGLongPosition pos, const char *buffer)
is not a optimal way to determine length of a longest line. Comparison 
with the length of the line to add is faster. If you agree, apply the 
patch attached. Just type from the root/gui source directory

patch -p1 < TGText.patch

-- 
Maxim Nikulin


Index: gui/inc/TGText.h
===================================================================
RCS file: /user/cvs/root/gui/inc/TGText.h,v
retrieving revision 1.6
diff -a -u -r1.6 TGText.h
--- gui/inc/TGText.h	28 May 2003 11:55:31 -0000	1.6
+++ gui/inc/TGText.h	23 Sep 2004 08:37:22 -0000
@@ -98,7 +98,7 @@
    char    GetChar(TGLongPosition pos);
 
    Bool_t  DelText(TGLongPosition start, TGLongPosition end);
-   Bool_t  InsText(TGLongPosition pos, const char *buf);
+   Bool_t  InsText(TGLongPosition const& pos, const char *buf);
    Bool_t  InsText(TGLongPosition ins_pos, TGText *src, TGLongPosition start_src, TGLongPosition end_src);
    Bool_t  AddText(TGText *text);
 
Index: gui/src/TGText.cxx
===================================================================
RCS file: /user/cvs/root/gui/src/TGText.cxx,v
retrieving revision 1.14
diff -a -u -r1.14 TGText.cxx
--- gui/src/TGText.cxx	24 May 2004 11:45:08 -0000	1.14
+++ gui/src/TGText.cxx	23 Sep 2004 08:37:23 -0000
@@ -738,7 +738,7 @@
 }
 
 //______________________________________________________________________________
-Bool_t TGText::InsText(TGLongPosition pos, const char *buffer)
+Bool_t TGText::InsText(TGLongPosition const& pos, const char *buffer)
 {
    // Insert single line at specified position. Return false in case position
    // is out of bounds.
@@ -751,11 +751,16 @@
       fCurrent->fNext = new TGTextLine(buffer);
       fCurrent->fNext->fPrev = fCurrent;
       fRowCount++;
+      if ((Long_t)fCurrent->fNext->fLength > fColCount) {
+         fColCount = fCurrent->fNext->fLength;
+      }
    } else {
       SetCurrentRow(pos.fY);
       fCurrent->InsText(pos.fX, buffer);
+      if ((Long_t)fCurrent->fLength > fColCount) {
+         fColCount = fCurrent->fLength;
+      }
    }
-   LongestLine();
    fIsSaved = kFALSE;
    return kTRUE;
 }



This archive was generated by hypermail 2b29 : Sun Jan 02 2005 - 05:50:09 MET