You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ia...@apache.org on 2001/09/28 05:43:05 UTC
cvs commit: apr/strings apr_strings.c
ianh 01/09/27 20:43:05
Modified: . CHANGES
strings apr_strings.c
Log:
optimize apr_pstrcat by storing the lengths of the first 6 strings
(changed const to #define as suggested, and so that it compiles on NT)
Submitted by: Brian Pane <bp...@pacbell.net>
Reviewed by: Ian Holsman
Revision Changes Path
1.162 +3 -0 apr/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr/CHANGES,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -r1.161 -r1.162
--- CHANGES 2001/09/26 20:55:33 1.161
+++ CHANGES 2001/09/28 03:43:04 1.162
@@ -1,5 +1,8 @@
Changes with APR b1
+ *) Optimize apr_pstrcat by caching lengths of first 6 strings
+ [Brian Pane <bp...@pacbell.net>]
+
*) Add pool accessors to the apr_thread_mutex_t datatype.
[Aaron Bannert <aa...@clove.org>]
1.21 +18 -1 apr/strings/apr_strings.c
Index: apr_strings.c
===================================================================
RCS file: /home/cvs/apr/strings/apr_strings.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- apr_strings.c 2001/07/26 03:11:00 1.20
+++ apr_strings.c 2001/09/28 03:43:05 1.21
@@ -65,6 +65,9 @@
#include <stddef.h> /* NULL */
#endif
+/** this is used to cache lengths in apr_pstrcat */
+#define MAX_SAVED_LENGTHS 6
+
APR_DECLARE(char *) apr_pstrdup(apr_pool_t *a, const char *s)
{
char *res;
@@ -110,6 +113,8 @@
APR_DECLARE_NONSTD(char *) apr_pstrcat(apr_pool_t *a, ...)
{
char *cp, *argp, *res;
+ apr_size_t saved_lengths[MAX_SAVED_LENGTHS];
+ int nargs = 0;
/* Pass one --- find length of required string */
@@ -119,7 +124,11 @@
va_start(adummy, a);
while ((cp = va_arg(adummy, char *)) != NULL) {
- len += strlen(cp);
+ apr_size_t cplen = strlen(cp);
+ if (nargs < MAX_SAVED_LENGTHS) {
+ saved_lengths[nargs++] = cplen;
+ }
+ len += cplen;
}
va_end(adummy);
@@ -133,8 +142,16 @@
va_start(adummy, a);
+ nargs = 0;
while ((argp = va_arg(adummy, char *)) != NULL) {
len = strlen(argp);
+ if (nargs < MAX_SAVED_LENGTHS) {
+ len = saved_lengths[nargs++];
+ }
+ else {
+ len = strlen(argp);
+ }
+
memcpy(cp, argp, len);
cp += len;
}
Re: cvs commit: apr/strings apr_strings.c
Posted by Cliff Woolley <cl...@yahoo.com>.
On 28 Sep 2001 ianh@apache.org wrote:
> + nargs = 0;
> while ((argp = va_arg(adummy, char *)) != NULL) {
> len = strlen(argp);
Urm, didnjya mean to remove that last line?
> + if (nargs < MAX_SAVED_LENGTHS) {
> + len = saved_lengths[nargs++];
> + }
> + else {
> + len = strlen(argp);
> + }
> +
> memcpy(cp, argp, len);
> cp += len;
> }
--Cliff
--------------------------------------------------------------
Cliff Woolley
cliffwoolley@yahoo.com
Charlottesville, VA