File: bsearch-3.c

package info (click to toggle)
avr-libc 1%3A1.6.2.cvs20080610-2
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 14,848 kB
  • ctags: 55,619
  • sloc: ansic: 92,267; asm: 6,692; sh: 4,131; makefile: 2,481; python: 976; pascal: 426; perl: 116
file content (46 lines) | stat: -rw-r--r-- 972 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* Multibytes members.
   $Id: bsearch-3.c,v 1.1 2007/02/06 12:36:58 dmix Exp $
 */

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

size_t size;	/* to pass size of members	*/

int cmp (const void *p1, const void *p2)
{
    return memcmp(p1, p2, size);
}

int main ()
{
    char arr[100];
    size_t nmemb;
    int i;
    
    /* Filling of arr: 0,1,2...	*/
    for (i= 0; (size_t)i < sizeof(arr); i++)
	arr[i] = i;

    for (size= 1;  size <= sizeof(arr);  size++) {
	for (nmemb= 1;  nmemb <= sizeof(arr) / size;  nmemb++) {
	    /* scanning all keys	*/
	    for (i= 0;  (size_t)i <= sizeof(arr) - size;  i++) {
		if ((i % size) == 0 && (i / size) < nmemb) {
		    if (bsearch (arr + i, arr, nmemb, size, cmp) != arr + i) {
#ifndef	__AVR__
			printf ("size= %d  nmemb= %d  i= %d\n",
				size, nmemb, i );
#endif
			exit (__LINE__);
		    }
		} else {
		    if (bsearch (arr + i, arr, nmemb, size, cmp))
			exit (__LINE__);
		}
	    }
	}
    }
    return 0;
}