#include "config.h"
#include <stdio.h>
#include <string.h>

/**
 * heap - a simple heap implementation
 *
 * Each heap entry is added as a void pointer. This means the implementation
 * does _not_ assume you already have an array of entries. Instead, it keeps
 * an internal array of pointers to those entries.
 *
 * Example:
 *	#include <stdio.h>
 *
 *	#include <ccan/heap/heap.h>
 *
 *	static bool less(const int *i, const int *j)
 *	{
 *		return *i < *j;
 *	}
 *
 *	static bool __less(const void *i, const void *j)
 *	{
 *		return less(i, j);
 *	}
 *
 *	int main(int argc, char *argv[])
 *	{
 *		struct heap *h;
 *		int arr[] = {1, 0, 2};
 *		int i;
 *
 *		h = heap_init(__less);
 *		if (h == NULL) {
 *			perror("heap alloc");
 *			exit(1);
 *		}
 *
 *		for (i = 0; i < 3; i++) {
 *			if (heap_push(h, &arr[i])) {
 *				perror("heap push");
 *				exit(1);
 *			}
 *		}
 *		// should print 0, 1, 2
 *		for (i = 0; i < 3; i++) {
 *			int *v = heap_pop(h);
 *			printf("%d\n", *v);
 *		}
 *		heap_free(h);
 *		return 0;
 *	}
 *
 * License: BSD-MIT
 * Author: Emilio G. Cota <cota@braap.org>
 */
int main(int argc, char *argv[])
{
	/* Expect exactly one argument */
	if (argc != 2)
		return 1;

	if (strcmp(argv[1], "depends") == 0) {
		return 0;
	}

	return 1;
}
