Synopsis - Cross-Reference
File: src/Synopsis/PTree/operations.hh1// 2// Copyright (C) 2004 Stefan Seefeld 3// All rights reserved. 4// Licensed to the public under the terms of the GNU LGPL (>= 2), 5// see the file COPYING for details. 6// 7#ifndef Synopsis_PTree_operations_hh_ 8#define Synopsis_PTree_operations_hh_ 9 10#include <Synopsis/PTree/Node.hh> 11#include <cassert> 12 13namespace Synopsis 14{ 15namespace PTree 16{ 17bool operator == (const Node &p, char c); 18inline bool operator != (const Node &p, char c) { return !operator == (p, c);} 19bool operator == (const Node &p, const char *str); 20inline bool operator != (const Node &p, const char *str) { return !operator == (p, str);} 21bool operator == (const Node &p, const Node &q); 22inline bool operator != (const Node &p, const Node &q) { return !operator == (p, q);} 23bool equal(const Node &p, const char *str, size_t len); 24bool equal(const Node *p, const Node *q); 25bool equiv(const Node *p, const Node *q); 26 27//. Return the last cons cell. 28const Node *last(const Node *); 29//. Return the last cons cell. 30Node *last(Node *); 31inline const Node *first(const Node *p) { return p ? p->car() : 0;} 32inline Node *first(Node *p) { return p ? p->car() : 0;} 33inline const Node *rest(const Node *p) { return p ? p->cdr() : 0;} 34inline Node *rest(Node *p) { return p ? p->cdr() : 0;} 35inline const Node *nth(const Node *p, size_t n) 36{ 37 while(p && n-- > 0) p = p->cdr(); 38 return p ? p->car() : 0; 39} 40inline Node *nth(Node *p, size_t n) 41{ 42 while(p && n-- > 0) p = p->cdr(); 43 return p ? p->car() : 0; 44} 45inline const Node *tail(const Node *p, size_t k) 46{ 47 while(p && k-- > 0) p = p->cdr(); 48 return p; 49} 50inline Node *tail(Node *p, size_t k) 51{ 52 while(p && k-- > 0) p = p->cdr(); 53 return p; 54} 55 56const Node *second(const Node *); 57Node *second(Node *); 58const Node *third(const Node *); 59Node *third(Node *); 60int length(const Node *); 61 62inline const Node *cadr(const Node *p) { return p->cdr()->car();} 63inline Node *cadr(Node *p) { return p->cdr()->car();} 64inline const Node *cddr(const Node *p) { return p->cdr()->cdr();} 65inline Node *cddr(Node *p) { return p->cdr()->cdr();} 66//. compute Caa..ar 67const Node *ca_ar(const Node *); 68Node *ca_ar(Node *); 69 70Node *cons(Node *, Node *); 71List *list(); 72List *list(Node *); 73List *list(Node *, Node *); 74List *list(Node *, Node *, Node *); 75List *list(Node *, Node *, Node *, Node *); 76List *list(Node *, Node *, Node *, Node *, Node *); 77List *list(Node *, Node *, Node *, Node *, Node *, Node *); 78List *list(Node *, Node *, Node *, Node *, Node *, Node *, 79 Node *); 80List *list(Node *, Node *, Node *, Node *, Node *, Node *, 81 Node *, Node *); 82Node *copy(Node *); 83Node *append(Node *, Node *); 84Node *replace_all(Node *, Node *, Node *); 85Node *subst(Node *, Node *, Node *); 86Node *subst(Node *, Node *, Node *, Node *, Node *); 87Node *subst(Node *, Node *, Node *, Node *, 88 Node *, Node *, Node *); 89Node *shallow_subst(Node *, Node *, Node *); 90Node *shallow_subst(Node *, Node *, Node *, Node *, Node *); 91Node *shallow_subst(Node *, Node *, Node *, Node *, 92 Node *, Node *, Node *); 93Node *shallow_subst(Node *, Node *, Node *, Node *, 94 Node *, Node *, Node *, Node *, Node *); 95Node *subst_sublist(Node *, Node *, Node *); 96 97/* they cause side-effect */ 98Node *nconc(Node *, Node *); 99Node *nconc(Node *, Node *, Node *); 100template <typename N> N *nconc(N *p, Node *q) 101{ 102 assert(p); 103 last(p)->set_cdr(q); 104 return p; 105} 106 107Node *snoc(Node *, Node *); 108template <typename N> N *snoc(N *p, Node *q) 109{ 110 return nconc(p, cons(q, 0)); 111} 112 113} 114} 115 116#endif
Generated on Tue May 13 02:39:20 2008 by
synopsis (version 0.10)
synopsis (version 0.10)