Update of /cvsroot/objecthandler/ObjectHandler/ohxl
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv29951/ohxl
Modified Files:
callingrange.cpp callingrange.hpp objecthandlerxl.cpp
objecthandlerxl.hpp
Log Message:
revised behavior for permanent/nonpermanent objects:
- non-permanent objects always deleted from cell on refresh
- new parameter "deletePermanent" for function ohCallGC()
Index: objecthandlerxl.cpp
===================================================================
RCS file: /cvsroot/objecthandler/ObjectHandler/ohxl/objecthandlerxl.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** objecthandlerxl.cpp 11 Jun 2006 12:38:22 -0000 1.6
--- objecthandlerxl.cpp 15 Jun 2006 08:18:36 -0000 1.7
***************
*** 39,47 ****
// std::map cannot be exported across DLL boundaries
// so instead we use a static variable
! std::map < std::string, boost::shared_ptr < CallingRange > > callingRanges_;
ObjectHandlerXL &ObjectHandlerXL::instance() {
if (instance_) {
! ObjectHandlerXL *ret = dynamic_cast < ObjectHandlerXL* > (instance_);
if (ret)
return *ret;
--- 39,47 ----
// std::map cannot be exported across DLL boundaries
// so instead we use a static variable
! std::map<std::string, boost::shared_ptr<CallingRange> > callingRanges_;
ObjectHandlerXL &ObjectHandlerXL::instance() {
if (instance_) {
! ObjectHandlerXL *ret = dynamic_cast<ObjectHandlerXL*>(instance_);
if (ret)
return *ret;
***************
*** 52,56 ****
}
! boost::shared_ptr < CallingRange > ObjectHandlerXL::getCallingRange() {
// XLOPERs which might need freeing in the event of an exception
--- 52,56 ----
}
! boost::shared_ptr<CallingRange> ObjectHandlerXL::getCallingRange() {
// XLOPERs which might need freeing in the event of an exception
***************
*** 60,64 ****
try {
! boost::shared_ptr < CallingRange > callingRange;
// get name if any
--- 60,64 ----
try {
! boost::shared_ptr<CallingRange> callingRange;
// get name if any
***************
*** 72,76 ****
operToScalar(oldKey, xOldName);
Excel(xlFree, 0, 1, &xOldName);
! std::map < std::string, boost::shared_ptr < CallingRange > >::const_iterator i;
i = callingRanges_.find(oldKey);
if (i == callingRanges_.end()) {
--- 72,76 ----
operToScalar(oldKey, xOldName);
Excel(xlFree, 0, 1, &xOldName);
! std::map<std::string, boost::shared_ptr<CallingRange> >::const_iterator i;
i = callingRanges_.find(oldKey);
if (i == callingRanges_.end()) {
***************
*** 102,106 ****
void ObjectHandlerXL::resetCaller() {
! boost::shared_ptr < CallingRange > callingRange = getCallingRange();
if (callingRange)
callingRange->update();
--- 102,106 ----
void ObjectHandlerXL::resetCaller() {
! boost::shared_ptr<CallingRange> callingRange = getCallingRange();
if (callingRange)
callingRange->update();
***************
*** 109,117 ****
std::string ObjectHandlerXL::storeObject(
const std::string &instanceName,
! const boost::shared_ptr < Object > &object) {
! boost::shared_ptr < CallingRange > callingRange = getCallingRange();
if (!callingRange) {
! callingRange = boost::shared_ptr < CallingRange >(new CallingRange);
callingRanges_[callingRange->getKey()] = callingRange;
}
--- 109,117 ----
std::string ObjectHandlerXL::storeObject(
const std::string &instanceName,
! const boost::shared_ptr<Object> &object) {
! boost::shared_ptr<CallingRange> callingRange = getCallingRange();
if (!callingRange) {
! callingRange = boost::shared_ptr<CallingRange>(new CallingRange);
callingRanges_[callingRange->getKey()] = callingRange;
}
***************
*** 133,137 ****
}
! boost::shared_ptr < Object > ObjectHandlerXL::retrieveObjectImpl(const std::string &instanceName) const {
std::string instanceNameStub;
int counterOffset = instanceName.length() - 5;
--- 133,137 ----
}
! boost::shared_ptr<Object> ObjectHandlerXL::retrieveObjectImpl(const std::string &instanceName) const {
std::string instanceNameStub;
int counterOffset = instanceName.length() - 5;
***************
*** 155,160 ****
}
! void ObjectHandlerXL::collectGarbage() {
! std::map < std::string, boost::shared_ptr < CallingRange > >::const_iterator iter_current, iter_previous;
iter_current = callingRanges_.begin();
while (iter_current != callingRanges_.end()) {
--- 155,160 ----
}
! void ObjectHandlerXL::collectGarbage(const bool &deletePermanent) {
! std::map<std::string, boost::shared_ptr<CallingRange> >::const_iterator iter_current, iter_previous;
iter_current = callingRanges_.begin();
while (iter_current != callingRanges_.end()) {
***************
*** 162,169 ****
iter_current++;
std::string key = iter_previous->first;
! boost::shared_ptr < CallingRange > callingRange = iter_previous->second;
if (!callingRange->isValid()) {
! callingRange->clearAll();
! callingRanges_.erase(key);
}
}
--- 162,175 ----
iter_current++;
std::string key = iter_previous->first;
! boost::shared_ptr<CallingRange> callingRange = iter_previous->second;
if (!callingRange->isValid()) {
! if (deletePermanent) {
! callingRange->clearAll();
! callingRanges_.erase(key);
! } else {
! callingRange->clearNonPermanent();
! if (callingRange->empty())
! callingRanges_.erase(key);
! }
}
}
***************
*** 184,190 ****
} else {
out << std::endl << std::endl;
! std::map < std::string, boost::shared_ptr < CallingRange > >::const_iterator i;
for (i = callingRanges_.begin(); i != callingRanges_.end(); i++) {
! boost::shared_ptr < CallingRange > callingRange = i->second;
out << *callingRange.get();
}
--- 190,196 ----
} else {
out << std::endl << std::endl;
! std::map < std::string, boost::shared_ptr<CallingRange> >::const_iterator i;
for (i = callingRanges_.begin(); i != callingRanges_.end(); i++) {
! boost::shared_ptr<CallingRange> callingRange = i->second;
out << *callingRange.get();
}
Index: objecthandlerxl.hpp
===================================================================
RCS file: /cvsroot/objecthandler/ObjectHandler/ohxl/objecthandlerxl.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** objecthandlerxl.hpp 11 Jun 2006 12:38:22 -0000 1.6
--- objecthandlerxl.hpp 15 Jun 2006 08:18:36 -0000 1.7
***************
*** 57,61 ****
const boost::shared_ptr < Object > &object);
virtual boost::shared_ptr < Object > retrieveObjectImpl(const std::string &instanceName) const;
! virtual void collectGarbage();
virtual void deleteAllObjects(const bool &deletePermanent = false);
--- 57,61 ----
const boost::shared_ptr < Object > &object);
virtual boost::shared_ptr < Object > retrieveObjectImpl(const std::string &instanceName) const;
! virtual void collectGarbage(const bool &deletePermanent = false);
virtual void deleteAllObjects(const bool &deletePermanent = false);
Index: callingrange.cpp
===================================================================
RCS file: /cvsroot/objecthandler/ObjectHandler/ohxl/callingrange.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** callingrange.cpp 11 Jun 2006 12:38:22 -0000 1.3
--- callingrange.cpp 15 Jun 2006 08:18:36 -0000 1.4
***************
*** 64,68 ****
}
! void CallingRange::clearAnonymous() {
std::map<std::string, boost::shared_ptr<Object> >::const_iterator iter_current, iter_previous;
iter_current = residentObjects_.begin();
--- 64,68 ----
}
! void CallingRange::clearNonPermanent() {
std::map<std::string, boost::shared_ptr<Object> >::const_iterator iter_current, iter_previous;
iter_current = residentObjects_.begin();
***************
*** 70,74 ****
iter_previous = iter_current;
iter_current++;
! if (iter_previous->second->anonymous()) {
ObjectHandler::instance().deleteObject(iter_previous->first);
residentObjects_.erase(iter_previous->first);
--- 70,74 ----
iter_previous = iter_current;
iter_current++;
! if (!iter_previous->second->permanent()) {
ObjectHandler::instance().deleteObject(iter_previous->first);
residentObjects_.erase(iter_previous->first);
***************
*** 85,90 ****
void CallingRange::registerObject(
! const std::string &instanceName,
! boost::shared_ptr<Object> object) {
std::map<std::string, boost::shared_ptr<Object> >::const_iterator i;
i = residentObjects_.find(instanceName);
--- 85,90 ----
void CallingRange::registerObject(
! const std::string &instanceName,
! boost::shared_ptr<Object> object) {
std::map<std::string, boost::shared_ptr<Object> >::const_iterator i;
i = residentObjects_.find(instanceName);
***************
*** 192,196 ****
if (invocationCount_)
busy_ = true;
! clearAnonymous();
}
}
--- 192,196 ----
if (invocationCount_)
busy_ = true;
! clearNonPermanent();
}
}
Index: callingrange.hpp
===================================================================
RCS file: /cvsroot/objecthandler/ObjectHandler/ohxl/callingrange.hpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** callingrange.hpp 11 Jun 2006 12:38:22 -0000 1.3
--- callingrange.hpp 15 Jun 2006 08:18:36 -0000 1.4
***************
*** 38,46 ****
void registerObject(const std::string &instanceName,
boost::shared_ptr<Object> object);
! void clearAnonymous();
void clearAll();
void update();
std::string updateCount();
friend std::ostream &operator<<(std::ostream&, const CallingRange&);
private:
static int keyCount_;
--- 38,49 ----
void registerObject(const std::string &instanceName,
boost::shared_ptr<Object> object);
! void clearNonPermanent();
void clearAll();
void update();
std::string updateCount();
friend std::ostream &operator<<(std::ostream&, const CallingRange&);
+ bool empty() {
+ return (residentObjects_.size() == 0);
+ }
private:
static int keyCount_;
|