CollList.h

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Author: Eric Viara <viara@sysra.com>
00022 */
00023 
00024 
00025 #ifndef _EYEDB_COLL_LIST_H
00026 #define _EYEDB_COLL_LIST_H
00027 
00028 namespace eyedb {
00029 
00038   class CollList : public Collection {
00039 
00040     // ----------------------------------------------------------------------
00041     // CollList Interface
00042     // ----------------------------------------------------------------------
00043   public:
00052     CollList(Database *db, const char *n, Class *mc = NULL,
00053              Bool isref = True,
00054              const IndexImpl *idximpl = 0);
00055 
00064     CollList(Database *db, const char *n, Class *mc, int dim,
00065              const IndexImpl *idximpl = 0);
00066 
00071     CollList(const CollList &o);
00072 
00077     CollList& operator=(const CollList &o);
00078 
00083     virtual Object *clone() const {return new CollList(*this);}
00084 
00085 
00092     Status insert(const Value &value, Bool noDup = False);
00093 
00099     Status insertFirst(const Value &value, Collection::ItemId *iid = 0);
00100 
00106     Status insertLast(const Value &value, Collection::ItemId *iid = 0);
00107 
00113     Status insertBefore(Collection::ItemId id, const Value &value,
00114                         Collection::ItemId *iid = 0);
00115 
00121     Status insertAfter(Collection::ItemId id, const Value &value,
00122                        Collection::ItemId *iid = 0);
00123 
00130     Status replaceAt(Collection::ItemId id, const Value &value);
00131 
00137     Status suppressAt(Collection::ItemId id);
00138 
00145     Status retrieveAt(Collection::ItemId id, Oid &item_oid) const;
00146 
00154     Status retrieveAt(Collection::ItemId id, ObjectPtr &item_o,
00155                       const RecMode *recmode = RecMode::NoRecurs) const;
00156 
00164     Status retrieveAt(Collection::ItemId id, Object *&item_o,
00165                       const RecMode *recmode = RecMode::NoRecurs) const;
00166 
00173     Status retrieveAt(Collection::ItemId id, Value &value) const;
00174 
00179     virtual CollList *asCollList() {return this;}
00180 
00185     virtual const CollList *asCollList() const {return this;}
00186 
00187     // ----------------------------------------------------------------------
00188     // CollList Private Part
00189     // ----------------------------------------------------------------------
00190   private:
00191     void init();
00192     const char *getClassName() const;
00193     CollList(const char *, Class *,
00194              const Oid&, const Oid&, int,
00195              int, int, const IndexImpl *, Object *,
00196              Bool, Bool, Data, Size);
00197     friend class CollectionPeer;
00198 
00199     // ----------------------------------------------------------------------
00200     // CollList Restricted Access (conceptually private)
00201     // ----------------------------------------------------------------------
00202   public:
00203     CollList(const char *, Class * = NULL, Bool = True,
00204              const IndexImpl * = 0);
00205     CollList(const char *, Class *, int,
00206              const IndexImpl * = 0);
00207 
00208     Status insert_p(const Oid &item_oid, Bool noDup = False);
00209     Status insert_p(const Object *item_o, Bool noDup = False);
00210     Status insert_p(Data val, Bool noDup = False, Size size = defaultSize);
00211     Status insertFirst_p(const Oid &item_oid, Collection::ItemId *iid = 0);
00212     Status insertFirst_p(const Object *item_o, Collection::ItemId *iid = 0);
00213     Status insertLast_p(const Oid &item_oid, Collection::ItemId *iid = 0);
00214     Status insertLast_p(const Object *item_o, Collection::ItemId *iid = 0);
00215     Status insertBefore_p(Collection::ItemId id, const Oid &item_oid,
00216                           Collection::ItemId *iid = 0);
00217     Status insertBefore_p(Collection::ItemId id, const Object *item_o,
00218                           Collection::ItemId *iid = 0);
00219     Status insertAfter_p(Collection::ItemId id, const Oid &item_oid,
00220                          Collection::ItemId *iid = 0);
00221     Status insertAfter_p(Collection::ItemId id, const Object *item_o,
00222                          Collection::ItemId *iid = 0);
00223     Status replaceAt_p(Collection::ItemId id, const Oid &item_oid);
00224     Status replaceAt_p(Collection::ItemId id, const Object *item_o);
00225 
00226   };
00227 
00228   class CollListPtr : public CollectionPtr {
00229 
00230   public:
00231     CollListPtr(CollList *o = 0) : CollectionPtr(o) { }
00232 
00233     CollList *getCollList() {return dynamic_cast<CollList *>(o);}
00234     const CollList *getCollList() const {return dynamic_cast<CollList *>(o);}
00235 
00236     CollList *operator->() {return dynamic_cast<CollList *>(o);}
00237     const CollList *operator->() const {return dynamic_cast<CollList *>(o);}
00238   };
00239 
00240   typedef std::vector<CollListPtr> CollListPtrVector;
00241 
00246 }
00247 
00248 #endif

Generated on Mon Dec 22 18:15:52 2008 for eyedb by  doxygen 1.5.3