/* PlacementIndex - tracking individual Placements and their relations Copyright (C) Lumiera.org 2008, Hermann Vosseler This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *****************************************************/ /** @file placement-index.cpp ** ** simple hash based implementation. Proof-of-concept ** and for fleshing out the API ** ** @todo change PlacementIndex into an interface and create a separated implementation class ** @see PlacementRef ** @see PlacementIndex_test ** */ #include "proc/mobject/session/placement-index.hpp" #include "proc/mobject/session/session-impl.hpp" //#include //using boost::str; namespace mobject { namespace session { class PlacementIndex::Table { public: Table () { } size_t size() const { UNIMPLEMENTED ("PlacementIndex datastructure"); return 0; } }; /* some type shorthands */ typedef PlacementIndex::PlacementMO PlacementMO; typedef PlacementIndex::PRef PRef; typedef PlacementIndex::ID ID; /** @internal Factory for creating a new placement index. * For use by the Session and for unit tests. */ PlacementIndex::Factory PlacementIndex::create; PlacementIndex::PlacementIndex() : pTab_() { } PlacementIndex::~PlacementIndex() { } PlacementMO& PlacementIndex::getRoot() const { UNIMPLEMENTED ("managing the implicit root context within a scope hierarchy"); } size_t PlacementIndex::size() const { return pTab_->size() - 1; } bool PlacementIndex::contains (ID id) const { UNIMPLEMENTED ("containment test: is the given Placement known within this index"); return false; } PlacementMO& PlacementIndex::find (ID) const { UNIMPLEMENTED ("main operation of PlacmentIndex: lookup a Placement by ID"); } PlacementMO& PlacementIndex::getScope (ID) const { UNIMPLEMENTED ("Secondary core operation of PlacmentIndex: find the 'parent' Placement by using the Placement relation index"); /// decision: root is his own scope } PlacementIndex::iterator PlacementIndex::getReferrers (ID) const { UNIMPLEMENTED ("query the Placement relation index and retrieve all other placements bound to this one by a placement-relation"); // do a query using equal_range of the hashtable (unordered_multimap) // build a RangeIter from them // use this to build an auto-fetching IterAdapter } ID PlacementIndex::insert (PlacementMO& newObj, PlacementMO& targetScope) { UNIMPLEMENTED ("store a new information record into PlacmentIndex: ID -> (ref-to-Placement, parent-Placement)"); } bool PlacementIndex::remove (ID) { UNIMPLEMENTED ("remove a information record from PlacementIndex, and also deregister any placement-relations bound to it"); } void PlacementIndex::clear() { UNIMPLEMENTED ("purge the PlacementIndex, discarding any contained placements"); } }} // namespace mobject::session