#include "glist.h"

This page has information from files glist.h and glist.c.

Contents


Public Routines in File glist.c

Index

alist2_inserti2list_memberilist_rem_dupsplist_last
alist2_removei2list_multimemberilist_remove_lastplist_member
alist_inserti2list_multisubsetilist_removeallplist_pop
associ2list_prependilist_setplist_prepend
assoc2ai2list_removeallilist_subsetplist_remove
assoc2bi3list_appendilist_subtractplist_remove_last
copy_i3listi3list_countilist_unionplist_subset
copy_ilisti3list_prependith_in_plistplist_subtract
copy_plistilist_appendlongest_string_in_plistposition_in_ilist
fprint_glist_memilist_catmultiset_addposition_of_string_in_plist
fprint_ilistilist_cat2multiset_add_nreverse_i3list
free_i2listilist_copymultiset_occurrencesreverse_ilist
free_i3listilist_countmultiset_to_setreverse_plist
free_ilistilist_insert_upmultiset_unionsort_plist
free_plistilist_intersectp_glist_memstring_member_plist
get_i2listilist_is_setp_i2listzap_i2list
get_i3listilist_lastp_ilistzap_i3list
get_ilistilist_memberplist_appendzap_ilist
get_plistilist_occurrencesplist_catzap_plist
i2list_appendilist_popplist_cat2
i2list_countilist_prependplist_count

Details


I3list alist2_insert(I3list p, int key, int a, int b);
Alist2 (association list) for pairs of integers. Insert key/ pairs. With assoc2a(key), retreive value-a. With assoc2b(key), retreive value-b. If a key has more than one value pair, the most recent is returned. It a key is not in the alist2, INT_MIN is returned. An alist2 can be freed with zap_i3list(alist2).
I3list alist2_remove(I3list p, int key);

I2list alist_insert(I2list p, int key, int val);
Alists (association list) for integers. Insert key/value pairs. With assoc(key), retreive value. If a key has more than one value, the most recent is returned. It an key is not in the alist, INT_MIN is returned. An alist can be freed with zap_i2list(alist). This is not efficient, because no hashing is done; lookups are linear.
int assoc(I2list p, int key);
See alist_insert.
int assoc2a(I3list p, int key);
See alist2_insert.
int assoc2b(I3list p, int key);
See alist2_insert.
I3list copy_i3list(I3list p);
This routine copies a I3list (the whole 3list) and returns the copy.
Ilist copy_ilist(Ilist p);
This routine copies a Ilist (the whole list) and returns the copy.
Plist copy_plist(Plist p);
This routine copies a Plist (the whole list) and returns the copy.
void fprint_glist_mem(FILE *fp, BOOL heading);
This routine prints (to FILE *fp) memory usage statistics for data types associated with the glist package. The Boolean argument heading tells whether to print a heading on the table.
void fprint_ilist(FILE *fp, Ilist p);
The list of integers is printed to FILE *fp like this: (4 5 1 3), without a newline.
void free_i2list(I2list p);

void free_i3list(I3list p);

void free_ilist(Ilist p);

void free_plist(Plist p);

I2list get_i2list(void);

I3list get_i3list(void);

Ilist get_ilist(void);

Plist get_plist(void);

I2list i2list_append(I2list lst, int i, int j);
This routine appends an integer to a I2list. The updated I2list is returned.
int i2list_count(I2list p);
This routine returns the length of a I2list.
I2list i2list_member(I2list lst, int i);

BOOL i2list_multimember(I2list b, int i, int n);
Is a multimember of multiset b?
BOOL i2list_multisubset(I2list a, I2list b);

I2list i2list_prepend(I2list lst, int i, int j);
This routine inserts an integer triple as the first member of a I2list. The updated I2list is returned.
I2list i2list_removeall(I2list p, int i);
Remove all occurrences of i.

The argument is "used up".


I3list i3list_append(I3list lst, int i, int j, int k);
This routine appends an integer to a I3list. The updated I3list is returned.
int i3list_count(I3list p);
This routine returns the length of a I3list.
I3list i3list_prepend(I3list lst, int i, int j, int k);
This routine inserts an integer triple as the first member of a I3list. The updated I3list is returned.
Ilist ilist_append(Ilist lst, int i);
This routine appends an integer to a Ilist. The updated Ilist is returned.
Ilist ilist_cat(Ilist p1, Ilist p2);
Concatenate two Ilists and return the result. The result is constructed from the arguments, so do not refer to either of the arguments after the call.

That is, both arguments are "used up".


Ilist ilist_cat2(Ilist p1, Ilist p2);
Concatenate two Ilists and return the result. In this version, the second ilist is copied and placed at the end of p1. That is, p1 is "used up", but p2 is not.
Ilist ilist_copy(Ilist p);

int ilist_count(Ilist p);
This routine returns the length of a Ilist.
Ilist ilist_insert_up(Ilist p, int i);

Ilist ilist_intersect(Ilist a, Ilist b);
Construct the intersection (as a new Ilist).

The arguments are not changed.


BOOL ilist_is_set(Ilist a);

Ilist ilist_last(Ilist lst);

BOOL ilist_member(Ilist lst, int i);
This function checks if an integer is a member of a Ilist. (If a node in the Ilist contains a pointer instead of an integer, the result is undefined.)
int ilist_occurrences(Ilist p, int i);
How many times does an integer occur in an ilist?
Ilist ilist_pop(Ilist p);
This routine takes a nonempty Ilist, removes and frees the first node (ignoring the contents), and returns the remainder of the list.
Ilist ilist_prepend(Ilist lst, int i);
This routine inserts an integer as the first member of a Ilist. The updated Ilist is returned.
Ilist ilist_rem_dups(Ilist m);
Take a list of integers and remove duplicates.

This version "uses up" the argument.


Ilist ilist_remove_last(Ilist p);

Ilist ilist_removeall(Ilist p, int i);
Remove all occurrences of i.

The argument is "used up".


Ilist ilist_set(Ilist m);
Take a list of integers and remove duplicates. This creates a new list and leave the old list as it was. Don't make any assumptions about the order of the result.
BOOL ilist_subset(Ilist a, Ilist b);

Ilist ilist_subtract(Ilist p1, Ilist p2);
Return the members of p1 that are not in p2.

The arguments are not changed.


Ilist ilist_union(Ilist a, Ilist b);
Construct the union (as a new Ilist).

The arguments need not be sets, the result is a set.

The arguments are not changed.


void *ith_in_plist(Plist p, int i);

int longest_string_in_plist(Plist p);
Return -1 if the Plist is empty.
I2list multiset_add(I2list a, int i);
Add 1 occurrence of i to multiset a.
I2list multiset_add_n(I2list a, int i, int n);
Add n occurrences of i to multiset a.
int multiset_occurrences(I2list m, int i);

Ilist multiset_to_set(I2list m);

I2list multiset_union(I2list a, I2list b);
The result is constructed from the arguments, so do not refer to either of the arguments after the call. That is, both arguments are "used up".
void p_glist_mem();
This routine prints (to stdout) memory usage statistics for data types associated with the glist package.
void p_i2list(I2list p);
The list of integers is printed to stdout like this: (4 5 1 3), with a '\n' at the end.
void p_ilist(Ilist p);
The list of integers is printed to stdout like this: (4 5 1 3), with a '\n' at the end.
Plist plist_append(Plist lst, void *v);
This routine appends a pointer to a Plist. The updated Plist is returned.
Plist plist_cat(Plist p1, Plist p2);
Concatenate two Plists and return the result. The result is constructed from the arguments, so do not refer to either of the arguments after the call.

That is, both args are destroyed.


Plist plist_cat2(Plist p1, Plist p2);
Concatenate two Plists and return the result. In this version, the second plist is copied and placed at the end of p1.

That is, the first arg is destroyed, and the second is preserved.


int plist_count(Plist p);
This routine returns the length of a Plist.
void *plist_last(Plist p);

BOOL plist_member(Plist lst, void *v);
This function checks if a pointer is a member of a Plist.
Plist plist_pop(Plist p);
This routine takes a nonempty Plist, removes and frees the first node (ignoring the contents), and returns the remainder of the list.
Plist plist_prepend(Plist lst, void *v);
This routine inserts a pointer as the first member of a Plist. The updated Plist is returned.
Plist plist_remove(Plist p, void *v);
Remove the first occurrence of a pointer from a Plist.
Plist plist_remove_last(Plist p);

BOOL plist_subset(Plist a, Plist b);

Plist plist_subtract(Plist p1, Plist p2);
Return the members of p1 that are not in p2.

The arguments are not changed.


int position_in_ilist(int i, Ilist p);
Count from 1; return -1 if the int is not in the Ilist.
int position_of_string_in_plist(char *s, Plist p);
Count from 1; return -1 if the string is not in the Plist.
I3list reverse_i3list(I3list p);
This routine reverses a I3list. The 3list is reversed in-place, so you should not refer to the argument after calling this routine. A good way to use it is like this:
p = reverse_i3list(p);

Ilist reverse_ilist(Ilist p);
This routine reverses a Ilist. The list is reversed in-place, so you should not refer to the argument after calling this routine. A good way to use it is like this:
p = reverse_ilist(p);

Plist reverse_plist(Plist p);
This routine reverses a Plist. The list is reversed in-place, so you should not refer to the argument after calling this routine. A good way to use it is like this:
p = reverse_plist(p);

Plist sort_plist(Plist objects,	Ordertype (*comp_proc) (void *, void *));

BOOL string_member_plist(char *s, Plist p);

void zap_i2list(I2list p);
This routine frees an I2list (the whole list).
void zap_i3list(I3list p);
This routine frees a I3list (the whole list).
void zap_ilist(Ilist p);
This routine frees a Ilist (the whole list).
void zap_plist(Plist p);
This routine frees a Plist (the whole list). The things to which the members point are not freed.

Public Definitions in File glist.h

typedef struct plist * Plist;

struct plist {
  void *v;
  Plist next;
};

typedef struct ilist * Ilist;

struct ilist {
  int i;
  Ilist next;
};

typedef struct i2list * I2list;

struct i2list {
  int i;
  int j;
  I2list next;
};

typedef struct i3list * I3list;

struct i3list {
  int i;
  int j;
  int k;
  I3list next;
};


Introduction

This package handles Plist (singly-linked list of void pointers), Ilist (singly-linked list of integers), I2list (singly-linked list of pairs), I3list (singly-linked list of triples).