#pragma once

struct pair {
	void* first;
	void* second;
};

struct pair* new_pair(void* first, void* second);

struct pair* copy_pair(const struct pair* src, 
	void* (*copy_first)(const void*), void* (*copy_second)(const void*));

void free_pair(struct pair* p, void (*free_first)(void*), void (*free_second)(void*));

int cmp_pair(const struct pair* a, const struct pair* b, 
	int (*cmp_first)(const void*, const void*), int (*cmp_second)(const void*, const void*));
