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.
next prev parent 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