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

/**
 * cast - routines for safer casting.
 *
 * Often you want to cast in a limited way, such as removing a const or
 * switching between integer types.  However, normal casts will work on
 * almost any type, making them dangerous when the code changes.
 *
 * These C++-inspired macros serve two purposes: they make it clear the
 * exact reason for the cast, and they also (with some compilers) cause
 * errors when misused.
 *
 * Based on Jan Engelhardt's libHX macros: http://libhx.sourceforge.net/
 *
 * Author: Jan Engelhardt
 * Maintainer: Rusty Russell <rusty@rustcorp.com.au>
 * License: LGPL (v2.1 or any later version)
 *
 * Example:
 *	// Given "test" output contains "3 t's in 'test string'"
 *	#include <ccan/cast/cast.h>
 *	#include <stdint.h>
 *	#include <stdio.h>
 *	#include <stdlib.h>
 *
 *	// Find char @orig in @str, if @repl, replace them.  Return number.
 *	static size_t find_chars(char *str, char orig, char repl)
 *	{
 *		size_t i, count = 0;
 *		for (i = 0; str[i]; i++) {
 *			if (str[i] == orig) {
 *				count++;
 *				if (repl)
 *					str[i] = repl;
 *			}
 *		}
 *		return count;
 *	}
 *
 *	// Terrible hash function.
 *	static uint64_t hash_string(const unsigned char *str)
 *	{
 *		size_t i;
 *		uint64_t hash = 0;
 *		for (i = 0; str[i]; i++)
 *			hash += str[i];
 *		return hash;
 *	}
 *
 *	int main(int argc, char *argv[])
 *	{
 *		uint64_t hash;
 *
 *		if (argc != 2) {
 *			fprintf(stderr, "Needs argument\n"); exit(1);
 *		}
 *		// find_chars wants a non-const string, but doesn't
 *		// need it if repl == 0.
 *		printf("%zu %c's in 'test string'\n",
 *		       find_chars(cast_const(char *, "test string"),
 *				  argv[1][0], 0),
 *		       argv[1][0]);
 *
 *		// hash_string wants an unsigned char.
 *		hash = hash_string(cast_signed(unsigned char *, argv[1]));
 *
 *		// Need a long long to hand to printf.
 *		printf("Hash of '%s' = %llu\n", argv[1],
 *		       cast_static(unsigned long long, hash));
 *		return 0;
 *	}
 *		
 */
int main(int argc, char *argv[])
{
	/* Expect exactly one argument */
	if (argc != 2)
		return 1;

	if (strcmp(argv[1], "depends") == 0) {
		printf("ccan/build_assert\n");
		return 0;
	}

	return 1;
}
