#ifndef _foldtP_h_
#define _foldtP_h_

#include "memory.h"
#include "foldt.h"

typedef struct AlFoldT_st {
  AlFoldT_CreateFunc create_func;
  AlFoldT_DestroyFunc destroy_func;
  AlFoldT_IterCreateFunc iter_create_func;
  AlFoldT_IterDestroyFunc iter_destroy_func;
  AlFoldT_IterGetFunc iter_get_func;
} AlFoldT_rep;

#define raise(p_to_rep) ((AlFoldT)p_to_rep)
#define lower(obj) ((AlFoldT_rep *)obj)
#define create() ((AlFoldT_rep *)Memory_allocate(sizeof(AlFoldT_rep)))
#define destroy(p_to_rep) (Memory_free((VOIDP)p_to_rep))

#endif
