/usr/share/doc/libvlfeat-dev/examples/test_heap-def.c is in libvlfeat-dev 0.9.20+dfsg0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | /** @file test_heap-def.c
** @brief Test heap-def.h
** @author Andrea Vedaldi
**/
/*
Copyright (C) 2007-12 Andrea Vedaldi and Brian Fulkerson.
All rights reserved.
This file is part of the VLFeat library and is made available under
the terms of the BSD license (see the COPYING file).
*/
#define VL_HEAP_prefix vl_heap_float
#define VL_HEAP_type float
#include <vl/heap-def.h>
#include <stdio.h>
typedef struct _S { int x ; } S ;
int s_cmp (S const * v, vl_uindex a, vl_uindex b)
{
return v[a].x - v[b].x ;
}
void s_swap (S * v, vl_uindex a, vl_uindex b)
{
S t = v[a] ;
v[a] = v[b] ;
v[b] = t ;
printf("Swapping %" VL_FMT_UINDEX "x with %" VL_FMT_UINDEX "\n", a, b) ;
}
#define VL_HEAP_prefix s_heap
#define VL_HEAP_type S
#define VL_HEAP_cmp s_cmp
#include <vl/heap-def.h>
#define VL_HEAP_prefix track_s_heap
#define VL_HEAP_type S
#define VL_HEAP_cmp s_cmp
#define VL_HEAP_swap s_swap
#include <vl/heap-def.h>
typedef struct _H {
vl_size numNodes ;
int* array ;
} H ;
int h_cmp (H const * h, vl_uindex a, vl_uindex b) {
return h->array[a] - h->array[b] ;
}
void h_swap (H * h, vl_uindex a, vl_uindex b) {
int t = h->array[a] ;
h->array[a] = h->array[b] ;
h->array[b] = t ;
}
#define VL_HEAP_prefix h_heap
#define VL_HEAP_array H*
#define VL_HEAP_array_const H const*
#define VL_HEAP_swap h_swap
#define VL_HEAP_cmp h_cmp
#include <vl/heap-def.h>
int
main (int argc VL_UNUSED, char** argv VL_UNUSED)
{
vl_uindex i ;
vl_size numNodes = 0 ;
float data [] = {1.01, 5.02, 8, 0.1, 100, 3, 9, 4, 1.02} ;
S data_s [] = {{5}, {7}, {9}, {1}} ;
S data_s_track [] = {{5}, {7}, {9}, {1}} ;
int data_h [] = {5, 7, 9, 1} ;
H h ;
h.numNodes = 0 ;
h.array = data_h ;
printf("Pushing heap\n") ;
for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) {
printf ("%5" VL_FMT_UINDEX ": %f\n", i, data[i]) ;
vl_heap_float_push (data, &numNodes) ;
}
printf("Popping heap\n") ;
for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) {
printf ("%" VL_FMT_UINDEX ": %f\n", i, data[vl_heap_float_pop (data, &numNodes)]) ;
}
printf("Refilling, updating fourth element, and popping again\n") ;
for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) {
vl_heap_float_push (data, &numNodes) ;
}
printf("%f -> %f\n", data[3], 9.01) ;
data [3] = 9.01 ;
vl_heap_float_update (data, numNodes, 3) ;
for (i = 0 ; i < sizeof(data) / sizeof(data[0]) ; ++i) {
printf ("%" VL_FMT_UINDEX ": %f\n", i, data[vl_heap_float_pop (data, &numNodes)]) ;
}
printf("Pushing heap of structures\n") ;
numNodes = 0 ;
for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s[i].x) ;
s_heap_push (data_s, &numNodes) ;
}
printf("Popping heap of structures\n") ;
for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s[s_heap_pop (data_s, &numNodes)].x) ;
}
printf("Pushing heap of structures with custom swap\n") ;
numNodes = 0 ;
for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s_track[i].x) ;
track_s_heap_push (data_s_track, &numNodes) ;
}
printf("Popping heap of structures with custom swap\n") ;
for (i = 0 ; i < sizeof(data_s) / sizeof(data_s[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, data_s_track
[track_s_heap_pop (data_s_track, &numNodes)].x) ;
}
printf("Pushing heap of structures with custom container\n") ;
numNodes = 0 ;
for (i = 0 ; i < sizeof(data_h) / sizeof(data_h[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, h.array[i]) ;
h_heap_push (&h, &h.numNodes) ;
}
printf("Popping heap of structures with custom container\n") ;
for (i = 0 ; i < sizeof(data_h) / sizeof(data_h[0]) ; ++i) {
printf ("s[%" VL_FMT_UINDEX "].x = %d\n", i, h.array
[h_heap_pop (&h, &h.numNodes)]) ;
}
return 0 ;
}
|