Source: List.hh


Annotated List
Files
Globals
Hierarchy
Index
// List.cc - Coldstore Lists
// Copyright (C) 1998,1999 Colin McCormack,
// see LICENSE (MD5 f5220f8f599e5e926f37cf32efe3ab68) for terms
// 	$Id: List_hh.html,v 1.1.1.1 2000/04/09 01:07:51 skeptopotamus Exp $

#ifndef LIST_HH
#define LIST_HH

#include "Vector.hh"
/** dynamic ordinally indexed array of @see Slot
 */
class List
    : public Data,
      public Vector<Slot>
{
    
public:
    
    // Constructors

    /** construct a List of given size (default 0)
     */
    List(int size = 0);

    /** construct a List from a sequence Slot
     */
    List(const Slot &sequence);

    /** copy construct a subList
     */
    List(const List *contentT, int start=0, int l=-1);

    /** copy construct a subList
     */
    List(const List &contentT, int start = 0, int l = -1);

    /** construct a List from a subTuple
     */
    List(const Tuple *contentT, int start = 0, int l = -1);

    virtual ~List();

    virtual void check(int=0) const;

    //Slot &List::operator [] (const Data &i) const;

    /** factor List into: [list1-only, intersection, list2-only]
     */
    Slot factor(const List *l) const;

    Slot explode();

public:
    ///////////////////////////////
    // Coldmud Interface

    // structural
    virtual Data *clone(void *store = (void*)0) const;
    virtual Data *mutate(void *store = (void*)0) const;

    // object
    virtual bool truth() const;
    virtual Slot toconstruct() const;
    virtual ostream &dump(ostream&) const;
    
    static Slot construct(const Slot &arg);
    virtual int order(const Slot &arg) const;
    virtual bool equal(const Slot &) const;

    // arithmetic
    virtual Slot positive() {		// monadic `+', absolute value
        return qsort();    }
    virtual Slot negative() {		// monadic `-', negative absolute value
        return reverse();    }
    virtual Slot add(const Slot &arg);
#if 0
    virtual Slot subtract(const Slot &arg);
    virtual Slot multiply(const Slot &arg);
    virtual Slot divide(const Slot &arg);
    virtual Slot modulo(const Slot &arg);
    
    // bitwise
    virtual Slot invert();
    virtual Slot and(const Slot &arg);
    virtual Slot xor(const Slot &arg);
    virtual Slot or(const Slot &arg);
    virtual Slot lshift(const Slot &arg);
    virtual Slot rshift(const Slot &arg);
#endif
    
    // sequence
    virtual bool isSequence();
    virtual int length() const;
    virtual Slot concat(const Slot &arg);
    virtual Slot slice(const Slot &from, const Slot &len) const;
    virtual Slot slice(const Slot &from) const;
    virtual Slot replace(const Slot &from, const Slot &to, const Slot &value);
    virtual Slot replace(const Slot &from, const Slot &val);
    virtual Slot replace(const Slot &val);
    virtual Slot insert(const Slot &from, const Slot &val);
    virtual Slot insert(const Slot &val);
    virtual Slot del(const Slot &from, const Slot &len);
    virtual Slot del(const Slot &from);
    
    virtual Slot search(const Slot &search) const;
    virtual Slot toSequence() const;
    
    // iterator
    virtual Slot iterator() const ;
    
    // List is its own iterator
    bool More() const;
    Slot Current();
    Slot Next();
    
    // additional ops
    virtual Slot qsort();
    virtual Slot reverse();
    
    // hoist some Vector methods to enable children to use them
    Vector<Slot>::vconcat;
    Vector<Slot>::Replace;

    // stack ops
    void push(const Slot &val);
    Slot pop();
};

#endif


Generated by: colin@sharedtech.dhis.org on Sat Nov 6 11:59:24 199.