typedefunion ListCell
{ void *ptr_value; int int_value;
Oid oid_value;
TransactionId xid_value;
} ListCell;
typedefstruct List
{
NodeTag type; /* T_List, T_IntList, T_OidList, or T_XidList */ int length; /* number of elements currently present */ int max_length; /* allocated length of elements[] */
ListCell *elements; /* re-allocatable array of cells */ /* We may allocate some cells along with the List header: */
ListCell initial_elements[FLEXIBLE_ARRAY_MEMBER]; /* If elements == initial_elements, it's not a separate allocation */
} List;
/* *Statestructsforvariousloopingmacrosbelow.
*/ typedefstruct ForEachState
{ const List *l; /* list we're looping through */ int i; /* current element index */
} ForEachState;
typedefstruct ForBothState
{ const List *l1; /* lists we're looping through */ const List *l2; int i; /* common element index */
} ForBothState;
typedefstruct ForBothCellState
{ const List *l1; /* lists we're looping through */ const List *l2; int i1; /* current element indexes */ int i2;
} ForBothCellState;
typedefstruct ForThreeState
{ const List *l1; /* lists we're looping through */ const List *l2; const List *l3; int i; /* common element index */
} ForThreeState;
typedefstruct ForFourState
{ const List *l1; /* lists we're looping through */ const List *l2; const List *l3; const List *l4; int i; /* common element index */
} ForFourState;
typedefstruct ForFiveState
{ const List *l1; /* lists we're looping through */ const List *l2; const List *l3; const List *l4; const List *l5; int i; /* common element index */
} ForFiveState;
/* Fetch address of list's first cell; NULL if empty list */ staticinline ListCell *
list_head(const List *l)
{ return l ? &l->elements[0] : NULL;
}
/* Fetch address of list's last cell; NULL if empty list */ staticinline ListCell *
list_tail(const List *l)
{ return l ? &l->elements[l->length - 1] : NULL;
}
/* Fetch address of list's second cell, if it has one, else NULL */ staticinline ListCell *
list_second_cell(const List *l)
{ if (l && l->length >= 2) return &l->elements[1]; else return NULL;
}
/* Fetch list's length */ staticinlineint
list_length(const List *l)
{ return l ? l->length : 0;
}
extern List *list_make1_impl(NodeTag t, ListCell datum1); extern List *list_make2_impl(NodeTag t, ListCell datum1, ListCell datum2); extern List *list_make3_impl(NodeTag t, ListCell datum1, ListCell datum2,
ListCell datum3); extern List *list_make4_impl(NodeTag t, ListCell datum1, ListCell datum2,
ListCell datum3, ListCell datum4); extern List *list_make5_impl(NodeTag t, ListCell datum1, ListCell datum2,
ListCell datum3, ListCell datum4,
ListCell datum5);
pg_nodiscard extern List *lappend(List *list, void *datum);
pg_nodiscard extern List *lappend_int(List *list, int datum);
pg_nodiscard extern List *lappend_oid(List *list, Oid datum);
pg_nodiscard extern List *lappend_xid(List *list, TransactionId datum);
pg_nodiscard extern List *list_insert_nth(List *list, int pos, void *datum);
pg_nodiscard extern List *list_insert_nth_int(List *list, int pos, int datum);
pg_nodiscard extern List *list_insert_nth_oid(List *list, int pos, Oid datum);
pg_nodiscard extern List *lcons(void *datum, List *list);
pg_nodiscard extern List *lcons_int(int datum, List *list);
pg_nodiscard extern List *lcons_oid(Oid datum, List *list);
pg_nodiscard extern List *list_concat(List *list1, const List *list2);
pg_nodiscard extern List *list_concat_copy(const List *list1, const List *list2);
pg_nodiscard extern List *list_truncate(List *list, int new_size);
externbool list_member(const List *list, constvoid *datum); externbool list_member_ptr(const List *list, constvoid *datum); externbool list_member_int(const List *list, int datum); externbool list_member_oid(const List *list, Oid datum); externbool list_member_xid(const List *list, TransactionId datum);
pg_nodiscard extern List *list_delete(List *list, void *datum);
pg_nodiscard extern List *list_delete_ptr(List *list, void *datum);
pg_nodiscard extern List *list_delete_int(List *list, int datum);
pg_nodiscard extern List *list_delete_oid(List *list, Oid datum);
pg_nodiscard extern List *list_delete_first(List *list);
pg_nodiscard extern List *list_delete_last(List *list);
pg_nodiscard extern List *list_delete_first_n(List *list, int n);
pg_nodiscard extern List *list_delete_nth_cell(List *list, int n);
pg_nodiscard extern List *list_delete_cell(List *list, ListCell *cell);
extern List *list_union(const List *list1, const List *list2); extern List *list_union_ptr(const List *list1, const List *list2); extern List *list_union_int(const List *list1, const List *list2); extern List *list_union_oid(const List *list1, const List *list2);
extern List *list_intersection(const List *list1, const List *list2); extern List *list_intersection_int(const List *list1, const List *list2);
/* currently, there's no need for list_intersection_ptr etc */
extern List *list_difference(const List *list1, const List *list2); extern List *list_difference_ptr(const List *list1, const List *list2); extern List *list_difference_int(const List *list1, const List *list2); extern List *list_difference_oid(const List *list1, const List *list2);
pg_nodiscard extern List *list_append_unique(List *list, void *datum);
pg_nodiscard extern List *list_append_unique_ptr(List *list, void *datum);
pg_nodiscard extern List *list_append_unique_int(List *list, int datum);
pg_nodiscard extern List *list_append_unique_oid(List *list, Oid datum);
pg_nodiscard extern List *list_concat_unique(List *list1, const List *list2);
pg_nodiscard extern List *list_concat_unique_ptr(List *list1, const List *list2);
pg_nodiscard extern List *list_concat_unique_int(List *list1, const List *list2);
pg_nodiscard extern List *list_concat_unique_oid(List *list1, const List *list2);
pg_nodiscard extern List *list_copy(const List *oldlist);
pg_nodiscard extern List *list_copy_head(const List *oldlist, int len);
pg_nodiscard extern List *list_copy_tail(const List *oldlist, int nskip);
pg_nodiscard extern List *list_copy_deep(const List *oldlist);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.