#ifndef __BGCONTAINER_H__ #define __BGCONTAINER_H__ /* $Id: bgcontainer.h,v 1.1 2000/02/18 09:04:17 dpfeifle Exp $ */ #define REALLOCSIZE 32 #include "bgobject.h" // ------------------------------------------------------------------ // Class: BGContainer // ------------------------------------------------------------------ class BGContainer : public BGObject { }; // ------------------------------------------------------------------ // Class: BGEnumeratable // ------------------------------------------------------------------ class BGEnumeratable { public: virtual long length ( ) const = 0; virtual BGObject* get ( long position ) = 0; }; // ------------------------------------------------------------------ // Class: BGEnumeration // ------------------------------------------------------------------ class BGEnumeration { public: BGEnumeration ( BGEnumeratable *src ) { source=src; pos=0; } virtual bool hasMoreElements ( ) { return (pos<source->length()) ? true : false; } virtual BGObject* nextElement ( ) { return source->get(pos++); } private: BGEnumeratable *source; long pos; }; // ------------------------------------------------------------------ // Class: BGArray // ------------------------------------------------------------------ class BGArray : public BGContainer, public BGEnumeratable { public: BGArray ( ); BGArray ( long initialSize ); virtual ~BGArray ( ); virtual BGString toString ( ); virtual unsigned long hash ( ); virtual int compare ( BGObject &obj ); virtual bool equals ( BGObject &obj ); virtual BGString className ( ); long length ( ) const ; void ensure ( long neededSize ); BGArray& add ( BGObject *newObject ); BGArray& set ( BGObject *newObject, long i ); BGObject* get ( long i ); protected: void realloc ( long plusSize = REALLOCSIZE ); private: BGObject** buf; long len; size_t allocsize; }; inline long BGArray :: length() const { return len; } class BGHashtable : public BGContainer, public BGEnumeratable { public: BGHashtable ( ); virtual ~BGHashtable ( ); virtual BGString toString ( ); virtual unsigned long hash ( ); virtual int compare ( BGObject &obj ); virtual BGString className ( ); virtual bool equals ( BGObject &obj ); BGObject* get ( BGObject &key ); void put ( BGObject &key, BGObject *newObject ); virtual long length ( ) const { return 0; }; virtual BGObject* get ( long position ) { return 0; }; }; #endif