diff options
| author | Ted Gould <ted@gould.cx> | 2006-05-02 05:49:17 +0000 |
|---|---|---|
| committer | gouldtj <gouldtj@users.sourceforge.net> | 2006-05-02 05:49:17 +0000 |
| commit | c0f13f760674b431f30b5ff17469030c5fa5a8d4 (patch) | |
| tree | 6286959e37edefe5122a963efe6f8f66fdd67bcc /src/gc-anchored.cpp | |
| parent | r11623@tres: ted | 2006-05-01 22:17:40 -0700 (diff) | |
| download | inkscape-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.cpp | 72 |
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; |
