At http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/devel
------------------------------------------------------------
revno: 281
revision-id: mtaylor@stripped
parent: mtaylor@stripped
committer: Monty Taylor <mtaylor@stripped>
branch nick: devel
timestamp: Fri 2007-11-23 11:16:33 -0800
message:
BUG#32669 ndb-connectors rely on not yet standard map::at() method
Replaced calls to map::at with calls to map::find() followed by map::operator[].
As a side effect of this, NDB/Connectors no longer employs C++ exceptions, so
integration with the mainline code using -fno-exceptions will be easier.
modified:
interface/mgmapi/NdbLogEventManager.i
ndbmgmlogeventhandle-20070906065939-pj4qrhof8kkzg3d1-1
=== modified file 'interface/mgmapi/NdbLogEventManager.i'
--- a/interface/mgmapi/NdbLogEventManager.i 2007-11-20 01:45:07 +0000
+++ b/interface/mgmapi/NdbLogEventManager.i 2007-11-23 19:16:33 +0000
@@ -66,33 +66,43 @@
// Returns -1 on error, 0 otherwise
int registerListener(NdbLogEventTypeListener * listener) {
Ndb_logevent_type theType = listener->getEventType();
-
-
- evtListeners.insert(std::make_pair<Ndb_logevent_type,NdbLogEventTypeListener
*>(theType,listener));
-
-
- return 0;
+
+ std::map<Ndb_logevent_type,NdbLogEventTypeListener *>::iterator it;
+ it=evtListeners.find(theType);
+ if (it==evtListeners.end()) {
+ // We don't have this one yet
+ evtListeners[theType]=listener;
+ return 0;
+ }
+ // Must unregisterListener first
+ return -1;
}
+ // Returns -1 on error, 0 otherwise
+ int registerListener(NdbLogEventCategoryListener * listener) {
+ ndb_mgm_event_category theCategory = listener->getEventCategory();
+
+
+ std::map<ndb_mgm_event_category,NdbLogEventCategoryListener *>::iterator it;
+ it=evtCategoryListeners.find(theCategory);
+
+ if(it==evtCategoryListeners.end()) {
+ evtCategoryListeners[theCategory]=listener;
+ return 0;
+ }
+ return -1;
+ }
+
bool unregisterListener(NdbLogEventTypeListener * listener) {
+ evtListeners.erase(evtListeners.find(listener->getEventType()));
return true;
}
- // Returns -1 on error, 0 otherwise
- int registerCategoryListener(NdbLogEventCategoryListener * listener) {
- ndb_mgm_event_category theCategory = listener->getEventCategory();
-
-
- NdbLogEventCategoryListener * evtLis;
-
-
- try {
- evtLis = evtCategoryListeners.at(theCategory);
- } catch (std::out_of_range e) {
- if
(!((evtCategoryListeners.insert(std::make_pair<ndb_mgm_event_category,NdbLogEventCategoryListener*>(theCategory,evtLis))).second))
{
- return -1;
- }
- };
- return 0;
+ bool unregisterListener(NdbLogEventCategoryListener * listener) {
+ evtCategoryListeners.erase
+ (
+ evtCategoryListeners.find(listener->getEventCategory())
+ );
+ return true;
}
@@ -119,28 +129,21 @@
if (eventWrapper->ret > 0) {
eventWrapper->theEvent = event;
- NdbLogEventTypeListener * evtLis = NULL;
- NdbLogEventCategoryListener * catLis = NULL;
-
- try {
- evtLis = evtListeners.at(event->type);
-
- } catch (std::out_of_range e) {
- // We don't have a listener to fire
- }
- if (evtLis != NULL) {
- evtLis->handleEvent(event);
- }
- try {
- catLis = evtCategoryListeners.at(event->category);
-
- } catch (std::out_of_range e) {
- // We don't have a listener to fire
- }
- if (catLis != NULL) {
- catLis->handleEvent(event);
- }
-
+ {
+ std::map<Ndb_logevent_type,NdbLogEventTypeListener *>::iterator it;
+ it=evtListeners.find(event->type);
+ if (it!=evtListeners.end()) {
+ ((*it).second)->handleEvent(event);
+ }
+ }
+ {
+ std::map<ndb_mgm_event_category,NdbLogEventCategoryListener *>::iterator it;
+ it=evtCategoryListeners.find(event->category);
+
+ if(it!=evtCategoryListeners.end()) {
+ ((*it).second)->handleEvent(event);
+ }
+ }
// r > 0, event exists;
// r==0, no event (timeout)
// r==-1, error
@@ -203,9 +206,18 @@
public:
// Returns -1 on error, 0 otherwise
~NdbLogEventManager();
+ bool unregisterListener(NdbLogEventTypeListener * listener);
+ bool unregisterListener(NdbLogEventCategoryListener * listener);
+
+ %ndbexception("MgmApiException") {
+ $action
+ if (result < 0) {
+ NDB_exception(NdbApiException,"Must deregister handler before adding a new one");
+ }
+ }
int registerListener(NdbLogEventTypeListener * listener);
- bool unregisterListener(NdbLogEventTypeListener * listener);
- int registerCategoryListener(NdbLogEventCategoryListener * listener);
+ int registerListener(NdbLogEventCategoryListener * listener);
+
%ndbexception("MgmApiException") {
$action
| Thread |
|---|
| • Rev 281: BUG#32669 ndb-connectors rely on not yet standard map::at() method in http://bazaar.launchpad.net/~ndb-connectors/ndb-connectors/devel | Monty Taylor | 23 Nov |