miller/c/containers/sllmv.h
2016-03-02 23:35:56 -05:00

41 lines
1.2 KiB
C

// ================================================================
// Singly-linked list of mlrval, with tail for append.
// Strings inside mlrvals are referenced, not copied.
// ================================================================
#ifndef SLLMV_H
#define SLLMV_H
#include "mlrval.h"
#include "free_flags.h"
// ----------------------------------------------------------------
typedef struct _sllmve_t {
mv_t value;
char free_flags;
struct _sllmve_t *pnext;
} sllmve_t;
typedef struct _sllmv_t {
sllmve_t *phead;
sllmve_t *ptail;
int length;
} sllmv_t;
// ----------------------------------------------------------------
sllmv_t* sllmv_alloc();
void sllmv_free(sllmv_t* plist);
void sllmv_add_with_free(sllmv_t* plist, mv_t* pvalue);
void sllmv_add_no_free(sllmv_t* plist, mv_t* pvalue);
sllmv_t* sllmv_single_no_free(mv_t* pvalue);
sllmv_t* sllmv_single_with_free(mv_t* pvalue);
sllmv_t* sllmv_double_with_free(mv_t* pvalue1, mv_t* pvalue2);
sllmv_t* sllmv_triple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3);
sllmv_t* sllmv_quadruple_with_free(mv_t* pvalue1, mv_t* pvalue2, mv_t* pvalue3, mv_t* pvalue4);
void sllmv_print(sllmv_t* plist);
void sllmve_tail_print(sllmve_t* pnode);
#endif // SLLMV_H