Source: NList.hh


Annotated List
Files
Globals
Hierarchy
Index
// NList.cc - Coldstore NTuple Lists
// Copyright (C) 1998,1999 Colin McCormack,
// see LICENSE (MD5 f5220f8f599e5e926f37cf32efe3ab68) for terms
// 	$Id $

#ifndef NLIST_HH
#define NLIST_HH

#include "List.hh"

/** dynamic ordinally indexed 2-dimensional ntuples of @see Slot

    In representation, NList presents as a List of Lists of fixed size.

    NList implements a space-efficient storage for lists of Slot ntuples,
    e.g pairs, triples, etc.

    Each NList has an `arity' property which governs indexing operations.
    NList is really syntactic sugar which peforms index translation.
 */
class NList
    : public List
{
    int _arity;	// the arity of this NList
public:
    
    // Constructors
    /** cold construct an NList
     */
    NList(const Slot &init);

    /** construct an empty NList
     */
    NList(int arity, int size = 0);

    /** share substructure with a List
     */
    NList(int arity, const List *l, int start = 0, int len = -1);

    /** share substructure with an NList
     */
    NList(const NList *l, int start = 0, int len = -1);

    virtual ~NList();

    virtual void check(int=0) const;

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

public:
    ///////////////////////////////
    // ColdStore Interface

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

    // object
    virtual Slot toconstruct() const;
    static Slot construct(const Slot &arg);

    // sequence
    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 &);
    virtual Slot insert(const Slot &from, const Slot &val);
    virtual Slot insert(const Slot &val);
    virtual Slot del(const Slot &from);
    virtual Slot del(const Slot &from, const Slot &len);
    virtual Slot search(const Slot &search) const;
    virtual Slot toSequence() const;
    
    // iterator
    virtual Slot iterator() const;
    
    // NList is its own iterator
    virtual bool More() const;
    virtual Slot Current();
    virtual Slot Next();
    
    // additional ops
    Slot qsort();
    Slot reverse();

    /** return the arity of an NList
     */
    int arity() const {
        return _arity;
    }

    /** round the underlying List up to arity
     */
    void roundup();
};

#endif


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