OSSP CVS Repository

ossp - Check-in [4159]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 4159
Date: 2001-Jul-08 16:10:32 (local)
2001-Jul-08 14:10:32 (UTC)
User:simons
Branch:
Comment: The xds_find_engine() routine will binary search through the engine_map_t to find an engine or the spot where it should be inserted to keep the correct alphabetical ordering.
Tickets:
Inspections:
Files:
ossp-pkg/xds/find-engine.c      added-> 1.1

ossp-pkg/xds/find-engine.c -> 1.1

*** /dev/null    Sat May  4 06:45:32 2024
--- -    Sat May  4 06:50:59 2024
***************
*** 0 ****
--- 1,69 ----
+ /*
+    XDS - OSSP Extensible Data Serialization Library
+    Copyright (c) 2001 The OSSP Project (http://www.ossp.org/)
+    Copyright (c) 2001 Cable & Wireless Deutschland (http://www.cw.com/de/)
+ 
+    This file is part of OSSP XDS, an extensible data serialization
+    library which can be found at http://www.ossp.com/pkg/xds/.
+ 
+    Permission to use, copy, modify, and distribute this software for
+    any purpose with or without fee is hereby granted, provided that
+    the above copyright notice and this permission notice appear in all
+    copies.
+ 
+    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+    IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+    SUCH DAMAGE.
+ */
+ 
+ #include <string.h>
+ #include <assert.h>
+ #include "internal.h"
+ 
+ int xds_find_engine(const engine_map_t* engines, size_t last, const char* name, size_t* pos)
+     {
+     size_t first;
+ 
+     /* Sanity checks. */
+ 
+     assert(engines != NULL);
+     assert(name != NULL);
+     assert(pos != NULL);
+     if (engines == NULL || name == NULL || pos == NULL)
+        return XDS_ERR_INVALID_ARG;
+ 
+     /* Use binary search to find "name" in "engines". */
+ 
+     for (first = 0; (last - first) > 0; )
+        {
+        size_t half = first + ((last - first) / 2);
+        int rc = strcmp(engines[half].name, name);
+ 
+        if (rc < 0)
+            {
+            first = half + 1;
+            }
+        else if(rc == 0)
+            {                   /* found it */
+            *pos = half;
+            return (1 == 1);
+            }
+        else
+            {
+            last = half;
+            }
+        assert(first <= last);
+        }
+ 
+     *pos = first;
+     return (1 != 1);
+     }

CVSTrac 2.0.1