summaryrefslogtreecommitdiffstats
path: root/src/gc-anchored.cpp
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2006-05-02 05:49:17 +0000
committergouldtj <gouldtj@users.sourceforge.net>2006-05-02 05:49:17 +0000
commitc0f13f760674b431f30b5ff17469030c5fa5a8d4 (patch)
tree6286959e37edefe5122a963efe6f8f66fdd67bcc /src/gc-anchored.cpp
parentr11623@tres: ted | 2006-05-01 22:17:40 -0700 (diff)
downloadinkscape-c0f13f760674b431f30b5ff17469030c5fa5a8d4.tar.gz
inkscape-c0f13f760674b431f30b5ff17469030c5fa5a8d4.zip
r11667@tres: ted | 2006-05-01 22:48:49 -0700
Backing out version 11530. SVK is so liberating and so frustrating all at the same time. (bzr r697)
Diffstat (limited to 'src/gc-anchored.cpp')
-rw-r--r--src/gc-anchored.cpp72
1 files changed, 30 insertions, 42 deletions
diff --git a/src/gc-anchored.cpp b/src/gc-anchored.cpp
index 285efd69d..baf36c0c9 100644
--- a/src/gc-anchored.cpp
+++ b/src/gc-anchored.cpp
@@ -12,7 +12,7 @@
#include <typeinfo>
#include "gc-anchored.h"
#include "debug/event-tracker.h"
-#include "debug/event.h"
+#include "debug/simple-event.h"
#include "util/share.h"
#include "util/format.h"
@@ -20,51 +20,39 @@ namespace Inkscape {
namespace GC {
-class AnchorEvent : public Debug::Event {
-public:
- enum Type { ANCHOR, RELEASE };
-
- AnchorEvent(GC::Anchored const *object, Type type)
- : _base(Util::format("%p", Core::base(const_cast<Anchored *>(object)))),
- _object(Util::format("%p", object)),
- _class_name(Util::share_static_string(typeid(*object).name())),
- _refcount(Util::format("%d", ( type == ANCHOR ? object->_anchored_refcount() + 1 : object->_anchored_refcount() - 1 ))),
- _type(type)
- {}
+namespace {
- static Category category() { return REFCOUNT; }
+typedef Debug::SimpleEvent<Debug::Event::REFCOUNT> RefCountEvent;
- Util::ptr_shared<char> name() const {
- if ( _type == ANCHOR ) {
- return Util::share_static_string("gc-anchor");
- } else {
- return Util::share_static_string("gc-release");
- }
- }
- unsigned propertyCount() const { return 4; }
- PropertyPair property(unsigned index) const {
- switch (index) {
- case 0:
- return PropertyPair("base", _base);
- case 1:
- return PropertyPair("pointer", _object);
- case 2:
- return PropertyPair("class", _class_name);
- case 3:
- return PropertyPair("new-refcount", _refcount);
- default:
- return PropertyPair();
- }
+class BaseAnchorEvent : public RefCountEvent {
+public:
+ BaseAnchorEvent(Anchored const *object, int bias,
+ Util::ptr_shared<char> name)
+ : RefCountEvent(name)
+ {
+ _addProperty("base", Util::format("%p", Core::base(const_cast<Anchored *>(object))));
+ _addProperty("pointer", Util::format("%p", object));
+ _addProperty("class", Util::share_static_string(typeid(*object).name()));
+ _addProperty("new-refcount", Util::format("%d", object->_anchored_refcount() + bias));
}
+};
-private:
- Util::ptr_shared<char> _base;
- Util::ptr_shared<char> _object;
- Util::ptr_shared<char> _class_name;
- Util::ptr_shared<char> _refcount;
- Type _type;
+class AnchorEvent : public BaseAnchorEvent {
+public:
+ AnchorEvent(Anchored const *object)
+ : BaseAnchorEvent(object, 1, Util::share_static_string("gc-anchor"))
+ {}
};
+class ReleaseEvent : public BaseAnchorEvent {
+public:
+ ReleaseEvent(Anchored const *object)
+ : BaseAnchorEvent(object, -1, Util::share_static_string("gc-release"))
+ {}
+};
+
+}
+
Anchored::Anchor *Anchored::_new_anchor() const {
return new Anchor(this);
}
@@ -74,7 +62,7 @@ void Anchored::_free_anchor(Anchored::Anchor *anchor) const {
}
void Anchored::anchor() const {
- Debug::EventTracker<AnchorEvent> tracker(this, AnchorEvent::ANCHOR);
+ Debug::EventTracker<AnchorEvent> tracker(this);
if (!_anchor) {
_anchor = _new_anchor();
}
@@ -82,7 +70,7 @@ void Anchored::anchor() const {
}
void Anchored::release() const {
- Debug::EventTracker<AnchorEvent> tracker(this, AnchorEvent::RELEASE);
+ Debug::EventTracker<ReleaseEvent> tracker(this);
if (!--_anchor->refcount) {
_free_anchor(_anchor);
_anchor = NULL;