// Disable small name usage
#define M_USE_SMALL_NAME 0

#include "m-algo.h"
#include "m-array.h"
#include "m-atomic.h"
#include "m-bitset.h"
#include "m-bptree.h"
#include "m-bstring.h"
#include "m-buffer.h"
#include "m-c-mempool.h"
#include "m-concurrent.h"
#include "m-deque.h"
#include "m-dict.h"
#include "m-funcobj.h"
#include "m-generic.h"
#include "m-genint.h"
#include "m-i-list.h"
#include "m-i-shared.h"
#include "m-list.h"
#include "m-mempool.h"
#include "m-prioqueue.h"
#include "m-rbtree.h"
#include "m-serial-bin.h"
#include "m-serial-json.h"
//#include "m-shared.h" // API incompatible with m-shared-ptr.h (exclusive)
#include "m-shared-ptr.h"
#include "m-snapshot.h"
#include "m-string.h"
#include "m-thread.h"
#include "m-tree.h"
#include "m-try.h"
#include "m-tuple.h"
#include "m-variant.h"
#include "m-worker.h"

M_ARRAY_DEF(array, m_string_t)
M_ALGO_DEF(array, M_ARRAY_OPLIST(array, M_STRING_OPLIST))
M_BPTREE_DEF2(bptree, 11, m_string_t, m_string_t)
M_BUFFER_DEF(queue, m_string_t, 10, M_BUFFER_QUEUE)
M_LIST_DEF(list, m_string_t)
M_LIST_DUAL_PUSH_DEF(list2, m_string_t)
M_DEQUE_DEF(deque, m_string_t)
M_DICT_DEF2(dict, m_string_t, m_string_t)
M_DICT_OA_DEF2(dict_oa, m_string_t, m_string_t)
M_DICT_SET_DEF(dict_set, m_string_t)
M_DICT_OASET_DEF(dict_oa_set, m_string_t)
M_RBTREE_DEF(rbtree, m_string_t)
M_FUNC_OBJ_INS_DEF(compare_by /* name of the instance */,
    array_cmp_obj /* name of the interface */,
    (a, b) /* name of the input parameters of the function like object. The type are inherited from the interface. */, {
      /* code of the function object */
      if (m_string_equal_cstr_p(self->sort_field, "normal"))
        return m_string_cmp(a, b);
      else
        return -m_string_cmp(a, b);
    },
    /* Additional fields stored in the function object */
    (sort_field, m_string_t) )
M_PRIOQUEUE_DEF(prio_queue, m_string_t)
M_SHARED_PTR_DEF(shared_string, m_string_t)
M_SNAPSHOT_SPSC_DEF(snap1, m_string_t)
M_SNAPSHOT_SPMC_DEF(snap2, m_string_t)
M_SNAPSHOT_MPMC_DEF(snap3, m_string_t)
M_TREE_DEF(tree, m_string_t)
M_TUPLE_DEF2(tuple, (a, m_string_t))
M_VARIANT_DEF2(variant, (a, m_string_t))
M_WORKER_SPAWN_DEF2(worker, (filename, m_string_t) )

int main(void)
{
    exit(0);
}