#pragma once

struct node;
typedef struct stack {
	struct node * head;
} stack;

void copy_stack(stack * dst, const stack * src, void * (* copy)(const void *));
void clear_stack(stack * s, void (*free_el)(void *));
stack new_stack();
stack * assign_stack( stack * dst, const stack * src, 
	void * (* copy_el)(const void *), void (* free_el)(void *));

_Bool stack_empty( const stack * s );
void push_stack( stack * s, void * value );
void * pop_stack( stack * s );
