comp.lang.ada
 help / color / mirror / Atom feed
From: Ole-Hjalmar Kristensen <ole-hjalmar.kristensen@substitute_employer_here.com>
Subject: Re: Ada Shootout program for K-Nucleotide (patches)
Date: 01 Sep 2009 10:06:15 +0200
Date: 2009-09-01T10:06:15+02:00	[thread overview]
Message-ID: <wvbrbplvccnc.fsf@sun.com> (raw)
In-Reply-To: 4a967b33$0$32671$9b4e6d93@newsspool2.arcor-online.net

I see the C++ version uses fgets, which is a reasonably fast way of
getting a line. Is there any reason not to use fgets?
fgets (OpenSolaris version) uses memccpy to actually copy the buffer
until the newline:

     43 extern int _filbuf();
     44 extern char *memccpy();
     45 
     46 char *
     47 fgets(ptr, size, iop)
     48 char *ptr;
     49 register int size;
     50 register FILE *iop;
     51 {
     52 	char *p, *ptr0 = ptr;
     53 	register int n;
     54 
     55 	if ( !(iop->_flag & (_IOREAD|_IORW)) ) {
     56 		iop->_flag |= _IOERR;
     57 		return (NULL);
     58 	}
     59 
     60 	for (size--; size > 0; size -= n) {
     61 		if (iop->_cnt <= 0) { /* empty buffer */
     62 			if (_filbuf(iop) == EOF) {
     63 				if (ptr0 == ptr)
     64 					return (NULL);
     65 				break; /* no more data */
     66 			}
     67 			iop->_ptr--;
     68 			iop->_cnt++;
     69 		}
     70 		n = MIN(size, iop->_cnt);
     71 		if ((p = memccpy(ptr, (char *) iop->_ptr, '\n', n)) != NULL)
     72 			n = p - ptr;
     73 		ptr += n;
     74 		iop->_cnt -= n;
     75 		iop->_ptr += n;
     76 		_BUFSYNC(iop);
     77 		if (p != NULL)
     78 			break; /* found '\n' in buffer */
     79 	}
     80 	*ptr = '\0';
     81 	return (ptr0);
     82 }
>>>>> "GB" == Georg Bauhaus <rm.dash-bauhaus@futureapps.de> writes:

    GB> Ole-Hjalmar Kristensen schrieb:
    >> Character'read could very well be slower if there is no buffering
    >> involved. The way to read efficiently is to read a large buffer
    >> (multiple of disk block size) and chop it into lines yourself.
    >> 

    GB> Indeed, stream attributes won't help.

    GB> However, replacing Text_IO.Get_Line---which we use now---
    GB> might still be considered controversial:

    GB> - Is "chopping" an acceptable interpretation of "read line by line"?

    GB> - writing a correct double buffering scheme (or a buffer
    GB>   with end-of-buffer triggers for Read_A_Line_From_Buffer)
    GB>   is still a bit of work, unless there is something we could
    GB>   copy.

    GB> A package containing a quick getline will definitely be
    GB> useful in general Unix programming, I should think.
    GB> What is being used in the Socket packages, BTW?

    GB> Equally useful will be a package for fast unbounded strings.
    GB> Replace_Slice is what prevents showcasing GNAT's Spitbol
    GB> pattern matching as one of the fastest things on this planet!

-- 
   C++: The power, elegance and simplicity of a hand grenade.



  reply	other threads:[~2009-09-01  8:06 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-01 12:21 Ada Shootout program for K-Nucleotide (patches) Georg Bauhaus
2009-08-01 12:59 ` Ludovic Brenta
2009-08-01 13:59   ` Georg Bauhaus
2009-08-01 13:50 ` Gautier write-only
2009-08-01 15:21 ` Ludovic Brenta
2009-08-01 15:37   ` Gautier write-only
2009-08-02 12:55   ` Georg Bauhaus
2009-08-27 11:17     ` Ole-Hjalmar Kristensen
2009-08-27 12:25       ` Georg Bauhaus
2009-09-01  8:06         ` Ole-Hjalmar Kristensen [this message]
2009-09-01  9:29           ` Georg Bauhaus
2009-09-01 10:48             ` Ole-Hjalmar Kristensen
2009-09-01 10:16           ` Ole-Hjalmar Kristensen
2009-09-01 11:34             ` Georg Bauhaus
2009-09-01 12:11               ` Ole-Hjalmar Kristensen
2009-09-01 14:36                 ` Georg Bauhaus
2009-09-03  8:49                   ` Ole-Hjalmar Kristensen
2009-09-02  8:44                 ` Georg Bauhaus
2009-09-02 11:07                   ` Ole-Hjalmar Kristensen
2009-09-03  8:13                   ` Ole-Hjalmar Kristensen
2009-09-03 10:39                     ` Georg Bauhaus
2009-08-03  8:56   ` Jacob Sparre Andersen
2009-08-03 11:43     ` Georg Bauhaus
2009-08-03 12:36       ` Jacob Sparre Andersen
2009-08-03 18:31         ` Isaac Gouy
2009-08-03 20:29           ` Robert A Duff
2009-08-04 15:43             ` Isaac Gouy
2009-08-04 16:06               ` Isaac Gouy
2009-08-04 17:08                 ` Georg Bauhaus
2009-08-05 15:58                   ` Isaac Gouy
2009-08-05 21:18                     ` Georg Bauhaus
2009-08-05 22:04                       ` Ludovic Brenta
2009-08-05 22:31                         ` Georg Bauhaus
2009-08-05 23:44                           ` Jeffrey R. Carter
2009-08-06  8:38                             ` Georg Bauhaus
2009-08-06 21:39                               ` Georg Bauhaus
2009-08-06 22:42                                 ` Jeffrey R. Carter
2009-08-07  8:53                                   ` Georg Bauhaus
2009-08-07  9:21                                     ` Jacob Sparre Andersen
2009-08-07  9:23                                       ` Jacob Sparre Andersen
2009-08-09 19:17                                       ` Georg Bauhaus
2009-08-13 20:56                                 ` jonathan
2009-08-13 21:30                                   ` jonathan
2009-08-13 22:08                                   ` Georg Bauhaus
2009-08-14 15:31                                     ` jonathan
2009-08-06  7:51                           ` Dmitry A. Kazakov
2009-08-06  0:07                       ` Isaac Gouy
2009-08-06  8:36                         ` Georg Bauhaus
2009-08-06  9:09                           ` Dmitry A. Kazakov
2009-08-06 10:34                             ` Georg Bauhaus
2009-08-06 10:49                               ` Dmitry A. Kazakov
2009-08-06 15:21                                 ` Isaac Gouy
2009-08-03 20:47           ` Ludovic Brenta
2009-08-01 17:07 ` jonathan
2009-08-01 17:59 ` jonathan
2009-08-02 11:39   ` Georg Bauhaus
2009-08-02 16:00     ` jonathan
2009-08-02 16:42       ` jonathan
2009-09-03 13:44     ` Olivier Scalbert
2009-09-03 14:08       ` Ludovic Brenta
2009-09-03 15:13         ` Olivier Scalbert
2009-09-03 19:11           ` sjw
2009-09-04  6:11             ` Olivier Scalbert
2009-09-04  8:18               ` Ludovic Brenta
2009-09-04 10:17                 ` Olivier Scalbert
2009-09-04 12:37                   ` Ludovic Brenta
2009-09-04 13:50                     ` Olivier Scalbert
2009-09-04 12:50                   ` Ludovic Brenta
2009-09-04 16:22                     ` Georg Bauhaus
2009-09-04 16:29                       ` Georg Bauhaus
2009-09-04 16:38                         ` Ludovic Brenta
2009-09-04 17:58                           ` Georg Bauhaus
2009-09-04 18:12                             ` Georg Bauhaus
2009-09-05 20:16                             ` Georg Bauhaus
2009-09-07  7:45                           ` Olivier Scalbert
2009-09-07  9:19                             ` Georg Bauhaus
2009-09-07 13:31                               ` Olivier Scalbert
2009-09-07 14:38                                 ` jonathan
2009-09-07 15:03                                   ` Olivier Scalbert
2009-09-07 17:31                                     ` jonathan
2009-09-07 17:54                                       ` Olivier Scalbert
2009-09-07 18:07                                     ` Georg Bauhaus
2009-09-08  0:22                                 ` Georg Bauhaus
2009-09-04 17:56                     ` Martin
2009-09-04 18:26                       ` Georg Bauhaus
2009-09-04 21:51                         ` Robert A Duff
2009-09-04 18:51                       ` Ludovic Brenta
2009-09-04  9:27               ` Georg Bauhaus
2009-09-03 15:28       ` Georg Bauhaus
2009-09-04  1:24         ` Georg Bauhaus
2009-08-04  8:23 ` Martin
2009-08-16 15:20 ` jonathan
2009-08-17 15:46   ` Georg Bauhaus
2009-08-18 16:59     ` jonathan
2009-08-19 14:52       ` Georg Bauhaus
2009-08-19 16:40         ` Martin
2009-08-19 18:24           ` Robert A Duff
2009-08-19 22:15             ` jonathan
2009-08-19 23:50               ` Georg Bauhaus
2009-08-20 19:47                 ` jonathan
2009-08-20 22:15                   ` Georg Bauhaus
2009-08-21 21:43                     ` jonathan
2009-08-22 22:35                       ` Georg Bauhaus
2009-08-23 22:21                         ` jonathan
2009-08-20 19:55                 ` jonathan
2009-08-19 21:37           ` Georg Bauhaus
2009-08-19 19:22         ` jonathan
2009-08-19 19:27         ` jonathan
2009-08-27  9:05 ` Martin
2009-08-27  9:08   ` Martin
2009-08-27 10:01     ` Georg Bauhaus
2009-10-07 11:44 ` Olivier Scalbert
2009-10-07 12:04   ` Georg Bauhaus
2009-10-07 13:22   ` Martin
2009-10-07 14:15     ` Olivier Scalbert
2009-10-08  9:54       ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox