[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apr-dev
Subject:    Re: svn commit: r1597797 - in /apr/apr/trunk: CHANGES include/apr_skiplist.h tables/apr_skiplist.c
From:       Jeff Trawick <trawick () gmail ! com>
Date:       2014-06-21 19:17:04
Message-ID: CAKUrXK5n2GqRg9k5TX-H5TA7rXRf9F5BJOPkQrgjc4BVE2moHA () mail ! gmail ! com
[Download RAW message or body]

On Tue, May 27, 2014 at 10:20 AM, <jim@apache.org> wrote:

> Author: jim
> Date: Tue May 27 14:20:29 2014
> New Revision: 1597797
> 
> URL: http://svn.apache.org/r1597797
> Log:
> apr_skiplist_add()... idea from yann
> 
> Modified:
> apr/apr/trunk/CHANGES
> apr/apr/trunk/include/apr_skiplist.h
> apr/apr/trunk/tables/apr_skiplist.c
> 
> Modified: apr/apr/trunk/CHANGES
> URL:
> http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1597797&r1=1597796&r2=1597797&view=diff
>  
> ==============================================================================
> --- apr/apr/trunk/CHANGES [utf-8] (original)
> +++ apr/apr/trunk/CHANGES [utf-8] Tue May 27 14:20:29 2014
> @@ -1,6 +1,8 @@
> -*- coding: utf-8 -*-
> Changes for APR 2.0.0
> 
> +  *) apr_skiplist: Add apr_skiplist_add() to support multiple values.
> +
> *) apr_allocator: Be less wasteful and don't return a memnode that is
> much larger than what was requested. [Stefan Fuhrmann
> <stefan fuhrmann wandisco com>]
> 
> Modified: apr/apr/trunk/include/apr_skiplist.h
> URL:
> http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_skiplist.h?rev=1597797&r1=1597796&r2=1597797&view=diff
>  
> ==============================================================================
> --- apr/apr/trunk/include/apr_skiplist.h (original)
> +++ apr/apr/trunk/include/apr_skiplist.h Tue May 27 14:20:29 2014
> @@ -180,11 +180,22 @@ APR_DECLARE(apr_skiplistnode *) apr_skip
> void *data,
> apr_skiplist_compare comp);
> 
> /**
> + * Add an element into the skip list using the existing comparison
> function.
> + * @param sl The skip list
> + * @param data The element to insert
> + * @remark If no comparison function has been set for the skip list, the
> element
> + * will not be inserted and NULL will be returned. This allows for
> multiple
> + * values to be added to the skiplist. To replace values, use
> apr_skiplist_insert().
> + */
> +APR_DECLARE(apr_skiplistnode *) apr_skiplist_add(apr_skiplist* sl, void
> *data);
> +
> +/**
> * Insert an element into the skip list using the existing comparison
> function.
> * @param sl The skip list
> * @param data The element to insert
> * @remark If no comparison function has been set for the skip list, the
> element
> - * will not be inserted and NULL will be returned.
> + * will not be inserted and NULL will be returned. Previous values will
> + * be over-written. Use apr_skiplist_add() to allow multiple values.
> */
> APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist* sl,
> void *data);
> 
> 
> Modified: apr/apr/trunk/tables/apr_skiplist.c
> URL:
> http://svn.apache.org/viewvc/apr/apr/trunk/tables/apr_skiplist.c?rev=1597797&r1=1597796&r2=1597797&view=diff
>  
> ==============================================================================
> --- apr/apr/trunk/tables/apr_skiplist.c (original)
> +++ apr/apr/trunk/tables/apr_skiplist.c Tue May 27 14:20:29 2014
> @@ -339,16 +339,8 @@ APR_DECLARE(void *) apr_skiplist_previou
> return (*iter) ? ((*iter)->data) : NULL;
> }
> 
> -APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist *sl,
> void *data)
> -{
> -    if (!sl->compare) {
> -        return 0;
> -    }
> -    return apr_skiplist_insert_compare(sl, data, sl->compare);
> -}
> -
> -APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert_compare(apr_skiplist
> *sl, void *data,
> -                                      apr_skiplist_compare comp)
> +static apr_skiplistnode *insert_compare(apr_skiplist *sl, void *data,
> +                                        apr_skiplist_compare comp, int
> replace)
> {
> apr_skiplistnode *m, *p, *tmp, *ret = NULL, **stack;
> int nh = 1, ch, stacki;
> @@ -406,11 +398,11 @@ APR_DECLARE(apr_skiplistnode *) apr_skip
> if (m->next) {
> compared = comp(data, m->next->data);
> }
> -        if (compared == 0) {
> +        if (compared == 0 && replace) {
> free(stack);    /* OK. was malloc'ed */
> return 0;
> }
> -        if ((m->next == NULL) || (compared < 0)) {
> +        if ( (compared < 0) || (replace && (m->next == NULL)) ) {
> if (ch <= nh) {
> /* push on stack */
> stack[stacki++] = m;
> @@ -470,6 +462,34 @@ APR_DECLARE(apr_skiplistnode *) apr_skip
> return ret;
> }
> 
> +APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist *sl,
> void *data)
> +{
> +    if (!sl->compare) {
> +        return 0;
> +    }
> +    return insert_compare(sl, data, sl->compare, 1);
> +}
> +
> +APR_DECLARE(apr_skiplistnode *) apr_skiplist_add_compare(apr_skiplist
> *sl, void *data,
> +                                      apr_skiplist_compare comp)
> 

no prototype, not called


> +{
> +    return insert_compare(sl, data, comp, 0);
> +}
> +
> +APR_DECLARE(apr_skiplistnode *) apr_skiplist_add(apr_skiplist *sl, void
> *data)
> +{
> +    if (!sl->compare) {
> +        return 0;
> +    }
> +    return insert_compare(sl, data, sl->compare, 0);
> +}
> +
> +APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert_compare(apr_skiplist
> *sl, void *data,
> +                                      apr_skiplist_compare comp)
> +{
> +    return insert_compare(sl, data, comp, 1);
> +}
> +
> APR_DECLARE(int) apr_skiplist_remove(apr_skiplist *sl, void *data,
> apr_skiplist_freefunc myfree)
> {
> if (!sl->compare) {
> 
> 
> 


-- 
Born in Roswell... married an alien...
http://emptyhammock.com/
http://edjective.org/


[Attachment #3 (text/html)]

<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, May 27, 2014 \
at 10:20 AM,  <span dir="ltr">&lt;<a href="mailto:jim@apache.org" \
target="_blank">jim@apache.org</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
                solid;padding-left:1ex">
Author: jim<br>
Date: Tue May 27 14:20:29 2014<br>
New Revision: 1597797<br>
<br>
URL: <a href="http://svn.apache.org/r1597797" \
target="_blank">http://svn.apache.org/r1597797</a><br> Log:<br>
apr_skiplist_add()... idea from yann<br>
<br>
Modified:<br>
      apr/apr/trunk/CHANGES<br>
      apr/apr/trunk/include/apr_skiplist.h<br>
      apr/apr/trunk/tables/apr_skiplist.c<br>
<br>
Modified: apr/apr/trunk/CHANGES<br>
URL: <a href="http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff" \
target="_blank">http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff</a><br>


==============================================================================<br>
--- apr/apr/trunk/CHANGES [utf-8] (original)<br>
+++ apr/apr/trunk/CHANGES [utf-8] Tue May 27 14:20:29 2014<br>
@@ -1,6 +1,8 @@<br>
                                                                                 -*- \
coding: utf-8 -*-<br>  Changes for APR 2.0.0<br>
<br>
+   *) apr_skiplist: Add apr_skiplist_add() to support multiple values.<br>
+<br>
     *) apr_allocator: Be less wasteful and don&#39;t return a memnode that is<br>
         much larger than what was requested. [Stefan Fuhrmann<br>
         &lt;stefan fuhrmann wandisco com&gt;]<br>
<br>
Modified: apr/apr/trunk/include/apr_skiplist.h<br>
URL: <a href="http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_skiplist.h?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff" \
target="_blank">http://svn.apache.org/viewvc/apr/apr/trunk/include/apr_skiplist.h?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff</a><br>


==============================================================================<br>
--- apr/apr/trunk/include/apr_skiplist.h (original)<br>
+++ apr/apr/trunk/include/apr_skiplist.h Tue May 27 14:20:29 2014<br>
@@ -180,11 +180,22 @@ APR_DECLARE(apr_skiplistnode *) apr_skip<br>
                                                                 void *data, \
apr_skiplist_compare comp);<br> <br>
  /**<br>
+ * Add an element into the skip list using the existing comparison function.<br>
+ * @param sl The skip list<br>
+ * @param data The element to insert<br>
+ * @remark If no comparison function has been set for the skip list, the element<br>
+ * will not be inserted and NULL will be returned. This allows for multiple<br>
+ * values to be added to the skiplist. To replace values, use \
apr_skiplist_insert().<br> + */<br>
+APR_DECLARE(apr_skiplistnode *) apr_skiplist_add(apr_skiplist* sl, void *data);<br>
+<br>
+/**<br>
   * Insert an element into the skip list using the existing comparison function.<br>
   * @param sl The skip list<br>
   * @param data The element to insert<br>
   * @remark If no comparison function has been set for the skip list, the \
                element<br>
- * will not be inserted and NULL will be returned.<br>
+ * will not be inserted and NULL will be returned. Previous values will<br>
+ * be over-written. Use apr_skiplist_add() to allow multiple values.<br>
   */<br>
  APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist* sl, void \
*data);<br> <br>
<br>
Modified: apr/apr/trunk/tables/apr_skiplist.c<br>
URL: <a href="http://svn.apache.org/viewvc/apr/apr/trunk/tables/apr_skiplist.c?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff" \
target="_blank">http://svn.apache.org/viewvc/apr/apr/trunk/tables/apr_skiplist.c?rev=1597797&amp;r1=1597796&amp;r2=1597797&amp;view=diff</a><br>


==============================================================================<br>
--- apr/apr/trunk/tables/apr_skiplist.c (original)<br>
+++ apr/apr/trunk/tables/apr_skiplist.c Tue May 27 14:20:29 2014<br>
@@ -339,16 +339,8 @@ APR_DECLARE(void *) apr_skiplist_previou<br>
        return (*iter) ? ((*iter)-&gt;data) : NULL;<br>
  }<br>
<br>
-APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist *sl, void \
                *data)<br>
-{<br>
-      if (!sl-&gt;compare) {<br>
-            return 0;<br>
-      }<br>
-      return apr_skiplist_insert_compare(sl, data, sl-&gt;compare);<br>
-}<br>
-<br>
-APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert_compare(apr_skiplist *sl, void \
                *data,<br>
-                                                         apr_skiplist_compare \
comp)<br> +static apr_skiplistnode *insert_compare(apr_skiplist *sl, void *data,<br>
+                                                            apr_skiplist_compare \
comp, int replace)<br>  {<br>
        apr_skiplistnode *m, *p, *tmp, *ret = NULL, **stack;<br>
        int nh = 1, ch, stacki;<br>
@@ -406,11 +398,11 @@ APR_DECLARE(apr_skiplistnode *) apr_skip<br>
              if (m-&gt;next) {<br>
                    compared = comp(data, m-&gt;next-&gt;data);<br>
              }<br>
-            if (compared == 0) {<br>
+            if (compared == 0 &amp;&amp; replace) {<br>
                    free(stack);      /* OK. was malloc&#39;ed */<br>
                    return 0;<br>
              }<br>
-            if ((m-&gt;next == NULL) || (compared &lt; 0)) {<br>
+            if ( (compared &lt; 0) || (replace &amp;&amp; (m-&gt;next == NULL)) ) \
{<br>  if (ch &lt;= nh) {<br>
                          /* push on stack */<br>
                          stack[stacki++] = m;<br>
@@ -470,6 +462,34 @@ APR_DECLARE(apr_skiplistnode *) apr_skip<br>
        return ret;<br>
  }<br>
<br>
+APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist *sl, void \
*data)<br> +{<br>
+      if (!sl-&gt;compare) {<br>
+            return 0;<br>
+      }<br>
+      return insert_compare(sl, data, sl-&gt;compare, 1);<br>
+}<br>
+<br>
+APR_DECLARE(apr_skiplistnode *) apr_skiplist_add_compare(apr_skiplist *sl, void \
*data,<br> +                                                         \
apr_skiplist_compare comp)<br></blockquote><div><br></div><div>no prototype, not \
called</div><div>  </div><blockquote class="gmail_quote" style="margin:0 0 0 \
.8ex;border-left:1px #ccc solid;padding-left:1ex">

+{<br>
+      return insert_compare(sl, data, comp, 0);<br>
+}<br>
+<br>
+APR_DECLARE(apr_skiplistnode *) apr_skiplist_add(apr_skiplist *sl, void *data)<br>
+{<br>
+      if (!sl-&gt;compare) {<br>
+            return 0;<br>
+      }<br>
+      return insert_compare(sl, data, sl-&gt;compare, 0);<br>
+}<br>
+<br>
+APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert_compare(apr_skiplist *sl, void \
*data,<br> +                                                         \
apr_skiplist_compare comp)<br> +{<br>
+      return insert_compare(sl, data, comp, 1);<br>
+}<br>
+<br>
  APR_DECLARE(int) apr_skiplist_remove(apr_skiplist *sl, void *data, \
apr_skiplist_freefunc myfree)<br>  {<br>
        if (!sl-&gt;compare) {<br>
<br>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Born in \
Roswell... married an alien...<br><a href="http://emptyhammock.com/" \
target="_blank">http://emptyhammock.com/</a><br><div><a href="http://edjective.org/" \
target="_blank">http://edjective.org/</a></div> <div><br></div></div>
</div></div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic