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 "
|