[ObjectHandler-cvs] ObjectHandler/oh objecthandler.cpp,1.5,1.6
Brought to you by:
ericehlers,
nando
From: Eric E. <eri...@us...> - 2006-10-29 16:13:50
|
Update of /cvsroot/objecthandler/ObjectHandler/oh In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv9174/oh Modified Files: objecthandler.cpp Log Message: case-preserving logic for object IDs Index: objecthandler.cpp =================================================================== RCS file: /cvsroot/objecthandler/ObjectHandler/oh/objecthandler.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** objecthandler.cpp 26 Oct 2006 10:14:41 -0000 1.5 --- objecthandler.cpp 29 Oct 2006 16:13:43 -0000 1.6 *************** *** 34,40 **** // std::map cannot be exported across DLL boundaries ! // so instead we use a static variable std::map<std::string, boost::shared_ptr<Object> > repository_; ObjectHandler::ObjectHandler() { instance_ = this; --- 34,50 ---- // std::map cannot be exported across DLL boundaries ! // so instead we use a static variables ! ! // Map object ID to object reference std::map<std::string, boost::shared_ptr<Object> > repository_; + // Map uppercase object ID to the ID in original case, + // e.g. convertCase_["MYOBJECT"] = "MyObject" + // This allows "case-preserving" behavior: + // storeObject("MyObject") // store "MyObject" + // retrieveObject("MyObJeCt") // retrieve "MyObject" + // storeObject("MYOBJECT") // overwrite "MyObject" + std::map<std::string, std::string> convertCase_; + ObjectHandler::ObjectHandler() { instance_ = this; *************** *** 55,69 **** const std::string &objectID, const boost::shared_ptr<Object> &object) { ! std::string objectIDUpper = uppercase(objectID); ! repository_[objectIDUpper] = object; ! return objectIDUpper; } boost::shared_ptr<Object> ObjectHandler::retrieveObjectImpl( const std::string &objectID) const { ! std::string objectIDUpper = uppercase(objectID); ! std::map<std::string, boost::shared_ptr<Object> >::const_iterator result ! = repository_.find(objectIDUpper); ! if (result == repository_.end()) { std::ostringstream msg; msg << "ObjectHandler error: attempt to retrieve object " --- 65,78 ---- const std::string &objectID, const boost::shared_ptr<Object> &object) { ! convertCase_[uppercase(objectID)] = objectID; ! repository_[objectID] = object; ! return objectID; } boost::shared_ptr<Object> ObjectHandler::retrieveObjectImpl( const std::string &objectID) const { ! std::map<std::string, std::string>::const_iterator result ! = convertCase_.find(uppercase(objectID)); ! if (result == convertCase_.end()) { std::ostringstream msg; msg << "ObjectHandler error: attempt to retrieve object " *************** *** 71,80 **** throw Exception(msg.str()); } else ! return result->second; } void ObjectHandler::deleteObject(const std::string &objectID) { ! std::string objectIDUpper = uppercase(objectID); ! repository_.erase(objectIDUpper); } --- 80,89 ---- throw Exception(msg.str()); } else ! return repository_[result->second]; } void ObjectHandler::deleteObject(const std::string &objectID) { ! repository_.erase(convertCase_[uppercase(objectID)]); ! convertCase_.erase(uppercase(objectID)); } *************** *** 82,85 **** --- 91,95 ---- if (deletePermanent) { repository_.clear(); + convertCase_.clear(); } else { std::map<std::string, boost::shared_ptr<Object> >::const_iterator iter_current, iter_previous; *************** *** 92,95 **** --- 102,106 ---- if (!object->permanent()) { repository_.erase(key); + convertCase_.erase(uppercase(key)); } } *************** *** 127,135 **** } - // this function assumes that objectID has already been converted to uppercase void ObjectHandler::checkName(const std::string &objectID) { ! std::map<std::string, boost::shared_ptr<Object> >::const_iterator result = ! repository_.find(objectID); ! if (result != repository_.end()) { std::ostringstream msg; msg << "ObjectHandler error: cannot create object " --- 138,145 ---- } void ObjectHandler::checkName(const std::string &objectID) { ! std::map<std::string, std::string>::const_iterator result = ! convertCase_.find(uppercase(objectID)); ! if (result != convertCase_.end()) { std::ostringstream msg; msg << "ObjectHandler error: cannot create object " |