<?php

if (file_exists (dirname (__FILE__) . '/config.inc.local')) {
	include dirname (__FILE__) . '/config.inc.local';
}
else {
	define ("MEMC_SERVER_HOST", "127.0.0.1");
	define ("MEMC_SERVER_PORT", 11211);

	//define ("MEMC_SASL_SERVER_HOST", "127.0.0.1");
	//define ("MEMC_SASL_SERVER_PORT", 11212);

	//define ('MEMC_SASL_USER', 'memcached');
	//define ('MEMC_SASL_PASS', 'test');
}

function memc_create_instance ($host, $port, array $opts = array (), $persistent_id = null)
{
	$memcached = new Memcached($persistent_id);
	if ($memcached->setOptions ($opts) == false)
		echo "Failed to set options" . PHP_EOL;

	$memcached->addServer($host, $port);
	if ($memcached->flush() === false) {
		return NULL;
	}
	return $memcached;
}

function memc_get_instance (array $opts = array (), $persistent_id = null)
{
	return memc_create_instance(MEMC_SERVER_HOST, MEMC_SERVER_PORT, $opts, $persistent_id);
}

function memc_get_sasl_instance (array $opts = array (), $persistent_id = null)
{
	return memc_create_instance(MEMC_SASL_SERVER_HOST, MEMC_SASL_SERVER_PORT, $opts, $persistent_id);
}

function memc_run_test ($test_function, $options = array ())
{
	foreach ($options as $option_set) {
		$memc = memc_get_instance ($option_set ['options']);
		$test_function ($memc, $option_set);
	}
	echo "TEST DONE" . PHP_EOL;
}

function memc_create_combinations ($name, $serializer, $ignore_object_type = false)
{
	return array (
			array (
				'title' => "$name serializer, ascii protocol",
				'options' => array (
					Memcached::OPT_SERIALIZER => $serializer
				),
				'ignore_object_type' => $ignore_object_type
			),
			array (
				'title' => "$name serializer, binary protocol",
				'options' => array (
					Memcached::OPT_BINARY_PROTOCOL => true,
					Memcached::OPT_SERIALIZER => $serializer
				),
				'ignore_object_type' => $ignore_object_type
			),
	);
}

function memc_get_version($memc) {
	$version = $memc->getVersion();
	return array_pop($version);
}
