sample.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4
5 #include "IntArray.h"
6
7
8
9 #define N 80
10
11
12
13 static unsigned long PopCount( unsigned long x )
14 {
15 x -= ( x >> 1 ) & 0x55555555;
16 x = ( x & 0x33333333 ) + ( ( x >> 2 ) & 0x33333333 );
17 x = ( x + ( x >> 4 ) ) & 0x0F0F0F0F;
18 x += x >> 8;
19 x += x >> 16;
20
21 return x & 0x3F;
22 }
23
24
25 void TestAdd( hIAry h )
26 {
27 IAryIdx i, j;
28 IAryInt y;
29 unsigned long x;
30
31 srand( time( NULL ) );
32
33 printf( "Add:\n" );
34 for ( i = 0; i < N; i += 20 )
35 {
36 for ( j = 0; j < 20 && i + j < N; j++ )
37 {
38 x = rand();
39 if ( x >= RAND_MAX / 2 )
40 y = 0;
41 else
42 y = PopCount( x ) - 8;
43
44 printf( "%2ld ", y );
45 IAry_AddInt( h, y );
46 }
47 printf( "\n" );
48 }
49
50 IAry_BuildIndex( h );
51 }
52
53
54 void TestGet( hIAry h )
55 {
56 IAryIdx i, j;
57 IAryScan scan;
58
59 printf( "Get:\n" );
60 for ( i = 0; i < N; i += 20 )
61 {
62 for ( j = 0; j < 20 && i + j < N; j++ )
63 printf( "%2ld ", IAry_GetInt( h, i + j ) );
64 printf( "\n" );
65 }
66
67 printf( "Scan:\n" );
68 IAry_Start( h, &scan );
69 for ( i = 0; i < N; i += 20 )
70 {
71 for ( j = 0; j < 20 && i + j < N; j++ )
72 printf( "%2ld ", IAry_NextInt( &scan ) );
73 printf( "\n" );
74 }
75 }
76
77 int main( int argc, char *argv[] )
78 {
79 int ret;
80 hIAry h;
81 IAryIdx size;
82
83
84 ret = IAry_Open( &h );
85 fprintf( stderr, "IAry_Open(): %d\n", ret );
86
87
88 TestAdd( h );
89
90
91 TestGet( h );
92
93
94 size = IAry_Size( h );
95 printf( "Size: %lu bytes (%.2f bytes/integer)\n", size, 1.0 * size / N );
96
97
98 IAry_Close( h );
99
100 return 0;
101 }