[前][次][番号順一覧][スレッド一覧]

ruby-changes:25577

From: glass <ko1@a...>
Date: Tue, 13 Nov 2012 11:12:57 +0900 (JST)
Subject: [ruby-changes:25577] glass:r37634 (trunk): * re.c (rb_memsearch_ss): performance improvement by using memmem(3) if

glass	2012-11-13 11:12:40 +0900 (Tue, 13 Nov 2012)

  New Revision: 37634

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37634

  Log:
    * re.c (rb_memsearch_ss): performance improvement by using memmem(3) if
      possible. [ruby-dev:45530] [Feature #6311]
    
    * configure.in: check existence of memmem(3) and that it is not broken.

  Modified files:
    trunk/ChangeLog
    trunk/configure.in
    trunk/re.c

Index: configure.in
===================================================================
--- configure.in	(revision 37633)
+++ configure.in	(revision 37634)
@@ -2900,6 +2900,42 @@
     ])])
 fi
 
+AC_CHECK_FUNC(memmem, [
+  AC_CACHE_CHECK(for broken memmem, rb_cv_broken_memmem, [
+    AC_TRY_RUN([
+#include <string.h>
+
+int
+main()
+{
+  char *str = "hogefugafoobar";
+  char *rs = "foo";
+  char *empty = "";
+  char *p;
+
+  p = memmem(str, strlen(str), rs, strlen(rs));
+  if (p == str+8) {
+    p = memmem(str, strlen(str), empty, strlen(empty));
+    if (p == str)
+      return 0;
+    else
+      return 1;
+  }
+  else {
+    return 1;
+  }
+}
+    ],
+    rb_cv_broken_memmem=no,
+    rb_cv_broken_memmem=yes,
+    rb_cv_broken_memmem=yes)
+  ])
+  if test "$rb_cv_broken_memmem" = no; then
+    AC_DEFINE(HAVE_MEMMEM, 1)
+  fi
+])
+
+
 CPPFLAGS="$CPPFLAGS "'$(DEFS)'
 test -z "$CPPFLAGS" || CPPFLAGS="$CPPFLAGS "; CPPFLAGS="$CPPFLAGS"'${cppflags}'
 if test -n "${cflags+set}"; then
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37633)
+++ ChangeLog	(revision 37634)
@@ -1,3 +1,10 @@
+Tue Nov 13 11:03:47 2012  Masaki Matsushita  <glass.saga@g...>
+
+	* re.c (rb_memsearch_ss): performance improvement by using memmem(3) if
+	  possible. [ruby-dev:45530] [Feature #6311]
+
+	* configure.in: check existence of memmem(3) and that it is not broken.
+
 Tue Nov 13 06:50:02 2012  Aaron Patterson <aaron@t...>
 
 	* probes.d: add DTrace probe declarations. [ruby-core:27448]
Index: re.c
===================================================================
--- re.c	(revision 37633)
+++ re.c	(revision 37634)
@@ -97,9 +97,21 @@
     return memcmp(p1, p2, len);
 }
 
+#ifdef HAVE_MEMMEM
 static inline long
 rb_memsearch_ss(const unsigned char *xs, long m, const unsigned char *ys, long n)
 {
+    const unsigned char *y;
+
+    if (y = memmem(ys, n, xs, m))
+	return y - ys;
+    else
+	return -1;
+}
+#else
+static inline long
+rb_memsearch_ss(const unsigned char *xs, long m, const unsigned char *ys, long n)
+{
     const unsigned char *x = xs, *xe = xs + m;
     const unsigned char *y = ys, *ye = ys + n;
 #ifndef VALUE_MAX
@@ -132,6 +144,7 @@
     }
     return y - ys - m;
 }
+#endif
 
 static inline long
 rb_memsearch_qs(const unsigned char *xs, long m, const unsigned char *ys, long n)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]