summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarkus Engel <markus.engel@tum.de>2013-03-31 22:07:00 +0000
committerMarkus Engel <markus.engel@tum.de>2013-03-31 22:07:00 +0000
commita5d6e692d661f0bf7648e64e8fcb04588bb8f3ab (patch)
treec2da53e170ecb9317e4fdf2e8ab3e884008eccaa /src
parentAdded TypeInfo class. (diff)
downloadinkscape-a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab.tar.gz
inkscape-a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab.zip
Prepared exchange of casting macros.
(bzr r11608.1.63)
Diffstat (limited to 'src')
-rw-r--r--src/box3d-side.cpp1
-rw-r--r--src/box3d.cpp1
-rw-r--r--src/color-profile.cpp1
-rw-r--r--src/filters/blend.cpp1
-rw-r--r--src/filters/colormatrix.cpp1
-rw-r--r--src/filters/componenttransfer-funcnode.cpp1
-rw-r--r--src/filters/componenttransfer.cpp1
-rw-r--r--src/filters/composite.cpp1
-rw-r--r--src/filters/convolvematrix.cpp1
-rw-r--r--src/filters/diffuselighting.cpp1
-rw-r--r--src/filters/displacementmap.cpp1
-rw-r--r--src/filters/distantlight.cpp1
-rw-r--r--src/filters/flood.cpp1
-rw-r--r--src/filters/gaussian-blur.cpp1
-rw-r--r--src/filters/image.cpp1
-rw-r--r--src/filters/merge.cpp1
-rw-r--r--src/filters/mergenode.cpp1
-rw-r--r--src/filters/morphology.cpp1
-rw-r--r--src/filters/offset.cpp1
-rw-r--r--src/filters/pointlight.cpp1
-rw-r--r--src/filters/specularlighting.cpp1
-rw-r--r--src/filters/spotlight.cpp1
-rw-r--r--src/filters/tile.cpp1
-rw-r--r--src/filters/turbulence.cpp1
-rw-r--r--src/live_effects/lpeobject.cpp1
-rw-r--r--src/marker.cpp1
-rw-r--r--src/persp3d.cpp1
-rw-r--r--src/sp-anchor.cpp1
-rw-r--r--src/sp-clippath.cpp1
-rw-r--r--src/sp-defs.cpp1
-rw-r--r--src/sp-desc.cpp1
-rw-r--r--src/sp-ellipse.cpp4
-rw-r--r--src/sp-filter-primitive.cpp1
-rw-r--r--src/sp-filter.cpp1
-rw-r--r--src/sp-flowdiv.cpp5
-rw-r--r--src/sp-flowregion.cpp2
-rw-r--r--src/sp-flowtext.cpp1
-rw-r--r--src/sp-font-face.cpp1
-rw-r--r--src/sp-font.cpp1
-rw-r--r--src/sp-glyph-kerning.cpp1
-rw-r--r--src/sp-glyph.cpp1
-rw-r--r--src/sp-gradient.cpp7
-rw-r--r--src/sp-guide.cpp1
-rw-r--r--src/sp-image.cpp1
-rw-r--r--src/sp-item-group.cpp1
-rw-r--r--src/sp-item.cpp1
-rw-r--r--src/sp-line.cpp1
-rw-r--r--src/sp-lpe-item.cpp1
-rw-r--r--src/sp-mask.cpp1
-rw-r--r--src/sp-metadata.cpp1
-rw-r--r--src/sp-missing-glyph.cpp1
-rw-r--r--src/sp-namedview.cpp1
-rw-r--r--src/sp-object-group.cpp1
-rw-r--r--src/sp-object.cpp4
-rw-r--r--src/sp-object.h4
-rw-r--r--src/sp-offset.cpp1
-rw-r--r--src/sp-paint-server.cpp1
-rw-r--r--src/sp-path.cpp1
-rw-r--r--src/sp-pattern.cpp1
-rw-r--r--src/sp-polygon.cpp1
-rw-r--r--src/sp-polyline.cpp1
-rw-r--r--src/sp-rect.cpp1
-rw-r--r--src/sp-root.cpp1
-rw-r--r--src/sp-script.cpp1
-rw-r--r--src/sp-shape.cpp1
-rw-r--r--src/sp-spiral.cpp1
-rw-r--r--src/sp-star.cpp1
-rw-r--r--src/sp-string.cpp1
-rw-r--r--src/sp-style-elem.cpp1
-rw-r--r--src/sp-switch.cpp1
-rw-r--r--src/sp-symbol.cpp1
-rw-r--r--src/sp-text.cpp1
-rw-r--r--src/sp-title.cpp1
-rw-r--r--src/sp-tref.cpp1
-rw-r--r--src/sp-tspan.cpp2
-rw-r--r--src/sp-use.cpp1
76 files changed, 97 insertions, 0 deletions
diff --git a/src/box3d-side.cpp b/src/box3d-side.cpp
index c2672d89a..a04fffa86 100644
--- a/src/box3d-side.cpp
+++ b/src/box3d-side.cpp
@@ -45,6 +45,7 @@ static void
box3d_side_init (Box3DSide * side)
{
side->cbox3dside = new CBox3DSide(side);
+ side->typeHierarchy.insert(typeid(Box3DSide));
delete side->cpolygon;
side->cpolygon = side->cbox3dside;
diff --git a/src/box3d.cpp b/src/box3d.cpp
index a7e6b0538..f44f1bde3 100644
--- a/src/box3d.cpp
+++ b/src/box3d.cpp
@@ -60,6 +60,7 @@ static void
box3d_init(SPBox3D *box)
{
box->cbox3d = new CBox3D(box);
+ box->typeHierarchy.insert(typeid(SPBox3D));
delete box->cgroup;
box->cgroup = box->cbox3d;
diff --git a/src/color-profile.cpp b/src/color-profile.cpp
index a2810d22c..ae647944b 100644
--- a/src/color-profile.cpp
+++ b/src/color-profile.cpp
@@ -234,6 +234,7 @@ CColorProfile::~CColorProfile() {
void ColorProfile::init( ColorProfile *cprof )
{
cprof->ccolorprofile = new CColorProfile(cprof);
+ cprof->typeHierarchy.insert(typeid(ColorProfile));
delete cprof->cobject;
cprof->cobject = cprof->ccolorprofile;
diff --git a/src/filters/blend.cpp b/src/filters/blend.cpp
index b0704e23d..06678c826 100644
--- a/src/filters/blend.cpp
+++ b/src/filters/blend.cpp
@@ -49,6 +49,7 @@ static void
sp_feBlend_init(SPFeBlend *feBlend)
{
feBlend->cfeblend = new CFeBlend(feBlend);
+ feBlend->typeHierarchy.insert(typeid(SPFeBlend));
delete feBlend->cfilterprimitive;
feBlend->cfilterprimitive = feBlend->cfeblend;
diff --git a/src/filters/colormatrix.cpp b/src/filters/colormatrix.cpp
index d4e65bdc1..8dabf90fc 100644
--- a/src/filters/colormatrix.cpp
+++ b/src/filters/colormatrix.cpp
@@ -48,6 +48,7 @@ static void
sp_feColorMatrix_init(SPFeColorMatrix *feColorMatrix)
{
feColorMatrix->cfecolormatrix = new CFeColorMatrix(feColorMatrix);
+ feColorMatrix->typeHierarchy.insert(typeid(SPFeColorMatrix));
delete feColorMatrix->cfilterprimitive;
feColorMatrix->cfilterprimitive = feColorMatrix->cfecolormatrix;
diff --git a/src/filters/componenttransfer-funcnode.cpp b/src/filters/componenttransfer-funcnode.cpp
index f1015eced..6d8f4bc66 100644
--- a/src/filters/componenttransfer-funcnode.cpp
+++ b/src/filters/componenttransfer-funcnode.cpp
@@ -140,6 +140,7 @@ static void
sp_fefuncnode_init(SPFeFuncNode *fefuncnode)
{
fefuncnode->cfefuncnode = new CFeFuncNode(fefuncnode);
+ fefuncnode->typeHierarchy.insert(typeid(SPFeFuncNode));
delete fefuncnode->cobject;
fefuncnode->cobject = fefuncnode->cfefuncnode;
diff --git a/src/filters/componenttransfer.cpp b/src/filters/componenttransfer.cpp
index d94198506..6ab1e5d12 100644
--- a/src/filters/componenttransfer.cpp
+++ b/src/filters/componenttransfer.cpp
@@ -46,6 +46,7 @@ static void
sp_feComponentTransfer_init(SPFeComponentTransfer *feComponentTransfer)
{
feComponentTransfer->cfecomponenttransfer = new CFeComponentTransfer(feComponentTransfer);
+ feComponentTransfer->typeHierarchy.insert(typeid(SPFeComponentTransfer));
delete feComponentTransfer->cfilterprimitive;
feComponentTransfer->cfilterprimitive = feComponentTransfer->cfecomponenttransfer;
diff --git a/src/filters/composite.cpp b/src/filters/composite.cpp
index 1d065da77..e09b92d15 100644
--- a/src/filters/composite.cpp
+++ b/src/filters/composite.cpp
@@ -44,6 +44,7 @@ static void
sp_feComposite_init(SPFeComposite *feComposite)
{
feComposite->cfecomposite = new CFeComposite(feComposite);
+ feComposite->typeHierarchy.insert(typeid(SPFeComposite));
delete feComposite->cfilterprimitive;
feComposite->cfilterprimitive = feComposite->cfecomposite;
diff --git a/src/filters/convolvematrix.cpp b/src/filters/convolvematrix.cpp
index a25c4621e..b3db5fa8c 100644
--- a/src/filters/convolvematrix.cpp
+++ b/src/filters/convolvematrix.cpp
@@ -47,6 +47,7 @@ static void
sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix)
{
feConvolveMatrix->cfeconvolvematrix = new CFeConvolveMatrix(feConvolveMatrix);
+ feConvolveMatrix->typeHierarchy.insert(typeid(SPFeConvolveMatrix));
delete feConvolveMatrix->cfilterprimitive;
feConvolveMatrix->cfilterprimitive = feConvolveMatrix->cfeconvolvematrix;
diff --git a/src/filters/diffuselighting.cpp b/src/filters/diffuselighting.cpp
index 621c36e1a..3c6268266 100644
--- a/src/filters/diffuselighting.cpp
+++ b/src/filters/diffuselighting.cpp
@@ -54,6 +54,7 @@ static void
sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting)
{
feDiffuseLighting->cfediffuselighting = new CFeDiffuseLighting(feDiffuseLighting);
+ feDiffuseLighting->typeHierarchy.insert(typeid(SPFeDiffuseLighting));
delete feDiffuseLighting->cfilterprimitive;
feDiffuseLighting->cfilterprimitive = feDiffuseLighting->cfediffuselighting;
diff --git a/src/filters/displacementmap.cpp b/src/filters/displacementmap.cpp
index 1f82efcef..2985647cf 100644
--- a/src/filters/displacementmap.cpp
+++ b/src/filters/displacementmap.cpp
@@ -44,6 +44,7 @@ static void
sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap)
{
feDisplacementMap->cfedisplacementmap = new CFeDisplacementMap(feDisplacementMap);
+ feDisplacementMap->typeHierarchy.insert(typeid(SPFeDisplacementMap));
delete feDisplacementMap->cfilterprimitive;
feDisplacementMap->cfilterprimitive = feDisplacementMap->cfedisplacementmap;
diff --git a/src/filters/distantlight.cpp b/src/filters/distantlight.cpp
index 30cbb03fe..90f7dcf89 100644
--- a/src/filters/distantlight.cpp
+++ b/src/filters/distantlight.cpp
@@ -47,6 +47,7 @@ static void
sp_fedistantlight_init(SPFeDistantLight *fedistantlight)
{
fedistantlight->cfedistantlight = new CFeDistantLight(fedistantlight);
+ fedistantlight->typeHierarchy.insert(typeid(SPFeDistantLight));
delete fedistantlight->cobject;
fedistantlight->cobject = fedistantlight->cfedistantlight;
diff --git a/src/filters/flood.cpp b/src/filters/flood.cpp
index 7c780b5ca..58c1dd7e6 100644
--- a/src/filters/flood.cpp
+++ b/src/filters/flood.cpp
@@ -44,6 +44,7 @@ CFeFlood::~CFeFlood() {
static void sp_feFlood_init(SPFeFlood *feFlood)
{
feFlood->cfeflood = new CFeFlood(feFlood);
+ feFlood->typeHierarchy.insert(typeid(SPFeFlood));
delete feFlood->cfilterprimitive;
feFlood->cfilterprimitive = feFlood->cfeflood;
diff --git a/src/filters/gaussian-blur.cpp b/src/filters/gaussian-blur.cpp
index 90bdb4780..61f7dfdc3 100644
--- a/src/filters/gaussian-blur.cpp
+++ b/src/filters/gaussian-blur.cpp
@@ -49,6 +49,7 @@ static void
sp_gaussianBlur_init(SPGaussianBlur *gaussianBlur)
{
gaussianBlur->cgaussianblur = new CGaussianBlur(gaussianBlur);
+ gaussianBlur->typeHierarchy.insert(typeid(SPGaussianBlur));
delete gaussianBlur->cfilterprimitive;
gaussianBlur->cfilterprimitive = gaussianBlur->cgaussianblur;
diff --git a/src/filters/image.cpp b/src/filters/image.cpp
index aeae90471..840f51eed 100644
--- a/src/filters/image.cpp
+++ b/src/filters/image.cpp
@@ -46,6 +46,7 @@ CFeImage::~CFeImage() {
static void sp_feImage_init(SPFeImage *feImage)
{
feImage->cfeimage = new CFeImage(feImage);
+ feImage->typeHierarchy.insert(typeid(SPFeImage));
delete feImage->cfilterprimitive;
feImage->cfilterprimitive = feImage->cfeimage;
diff --git a/src/filters/merge.cpp b/src/filters/merge.cpp
index b3e87f1a4..b49ad4850 100644
--- a/src/filters/merge.cpp
+++ b/src/filters/merge.cpp
@@ -43,6 +43,7 @@ static void
sp_feMerge_init(SPFeMerge *feMerge)
{
feMerge->cfemerge = new CFeMerge(feMerge);
+ feMerge->typeHierarchy.insert(typeid(SPFeMerge));
delete feMerge->cfilterprimitive;
feMerge->cfilterprimitive = feMerge->cfemerge;
diff --git a/src/filters/mergenode.cpp b/src/filters/mergenode.cpp
index 4f9524c91..c91e69019 100644
--- a/src/filters/mergenode.cpp
+++ b/src/filters/mergenode.cpp
@@ -41,6 +41,7 @@ static void
sp_feMergeNode_init(SPFeMergeNode *feMergeNode)
{
feMergeNode->cfemergenode = new CFeMergeNode(feMergeNode);
+ feMergeNode->typeHierarchy.insert(typeid(SPFeMergeNode));
delete feMergeNode->cobject;
feMergeNode->cobject = feMergeNode->cfemergenode;
diff --git a/src/filters/morphology.cpp b/src/filters/morphology.cpp
index fb58b5fcf..e35406833 100644
--- a/src/filters/morphology.cpp
+++ b/src/filters/morphology.cpp
@@ -45,6 +45,7 @@ static void
sp_feMorphology_init(SPFeMorphology *feMorphology)
{
feMorphology->cfemorphology = new CFeMorphology(feMorphology);
+ feMorphology->typeHierarchy.insert(typeid(SPFeMorphology));
delete feMorphology->cfilterprimitive;
feMorphology->cfilterprimitive = feMorphology->cfemorphology;
diff --git a/src/filters/offset.cpp b/src/filters/offset.cpp
index cc1eb42fa..542bfb244 100644
--- a/src/filters/offset.cpp
+++ b/src/filters/offset.cpp
@@ -44,6 +44,7 @@ static void
sp_feOffset_init(SPFeOffset *feOffset)
{
feOffset->cfeoffset = new CFeOffset(feOffset);
+ feOffset->typeHierarchy.insert(typeid(SPFeOffset));
delete feOffset->cfilterprimitive;
feOffset->cfilterprimitive = feOffset->cfeoffset;
diff --git a/src/filters/pointlight.cpp b/src/filters/pointlight.cpp
index 718f9813c..e39c4811c 100644
--- a/src/filters/pointlight.cpp
+++ b/src/filters/pointlight.cpp
@@ -47,6 +47,7 @@ static void
sp_fepointlight_init(SPFePointLight *fepointlight)
{
fepointlight->cfepointlight = new CFePointLight(fepointlight);
+ fepointlight->typeHierarchy.insert(typeid(SPFePointLight));
delete fepointlight->cobject;
fepointlight->cobject = fepointlight->cfepointlight;
diff --git a/src/filters/specularlighting.cpp b/src/filters/specularlighting.cpp
index 4f4b4e2e2..97c905d51 100644
--- a/src/filters/specularlighting.cpp
+++ b/src/filters/specularlighting.cpp
@@ -54,6 +54,7 @@ static void
sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting)
{
feSpecularLighting->cfespecularlighting = new CFeSpecularLighting(feSpecularLighting);
+ feSpecularLighting->typeHierarchy.insert(typeid(SPFeSpecularLighting));
delete feSpecularLighting->cfilterprimitive;
feSpecularLighting->cfilterprimitive = feSpecularLighting->cfespecularlighting;
diff --git a/src/filters/spotlight.cpp b/src/filters/spotlight.cpp
index b56265c54..cb6dc17e7 100644
--- a/src/filters/spotlight.cpp
+++ b/src/filters/spotlight.cpp
@@ -47,6 +47,7 @@ static void
sp_fespotlight_init(SPFeSpotLight *fespotlight)
{
fespotlight->cfespotlight = new CFeSpotLight(fespotlight);
+ fespotlight->typeHierarchy.insert(typeid(SPFeSpotLight));
delete fespotlight->cobject;
fespotlight->cobject = fespotlight->cfespotlight;
diff --git a/src/filters/tile.cpp b/src/filters/tile.cpp
index 436f9cd0b..31e2342c3 100644
--- a/src/filters/tile.cpp
+++ b/src/filters/tile.cpp
@@ -41,6 +41,7 @@ static void
sp_feTile_init(SPFeTile *feTile)
{
feTile->cfetile = new CFeTile(feTile);
+ feTile->typeHierarchy.insert(typeid(SPFeTile));
delete feTile->cfilterprimitive;
feTile->cfilterprimitive = feTile->cfetile;
diff --git a/src/filters/turbulence.cpp b/src/filters/turbulence.cpp
index 759fb6c23..74194ba24 100644
--- a/src/filters/turbulence.cpp
+++ b/src/filters/turbulence.cpp
@@ -47,6 +47,7 @@ static void
sp_feTurbulence_init(SPFeTurbulence *feTurbulence)
{
feTurbulence->cfeturbulence = new CFeTurbulence(feTurbulence);
+ feTurbulence->typeHierarchy.insert(typeid(SPFeTurbulence));
delete feTurbulence->cfilterprimitive;
feTurbulence->cfilterprimitive = feTurbulence->cfeturbulence;
diff --git a/src/live_effects/lpeobject.cpp b/src/live_effects/lpeobject.cpp
index 93f038473..d404b9743 100644
--- a/src/live_effects/lpeobject.cpp
+++ b/src/live_effects/lpeobject.cpp
@@ -85,6 +85,7 @@ LivePathEffectObject::livepatheffect_init(LivePathEffectObject *lpeobj)
#endif
lpeobj->clivepatheffectobject = new CLivePathEffectObject(lpeobj);
+ lpeobj->typeHierarchy.insert(typeid(LivePathEffectObject));
delete lpeobj->cobject;
lpeobj->cobject = lpeobj->clivepatheffectobject;
diff --git a/src/marker.cpp b/src/marker.cpp
index f27715d92..adf89b0be 100644
--- a/src/marker.cpp
+++ b/src/marker.cpp
@@ -67,6 +67,7 @@ static void
sp_marker_init (SPMarker *marker)
{
marker->cmarker = new CMarker(marker);
+ marker->typeHierarchy.insert(typeid(SPMarker));
delete marker->cgroup;
marker->cgroup = marker->cmarker;
diff --git a/src/persp3d.cpp b/src/persp3d.cpp
index b6012f038..50ecd6522 100644
--- a/src/persp3d.cpp
+++ b/src/persp3d.cpp
@@ -76,6 +76,7 @@ static void
persp3d_init(Persp3D *persp)
{
persp->cpersp3d = new CPersp3D(persp);
+ persp->typeHierarchy.insert(typeid(Persp3D));
delete persp->cobject;
persp->cobject = persp->cpersp3d;
diff --git a/src/sp-anchor.cpp b/src/sp-anchor.cpp
index 846bf3c66..2c955419f 100644
--- a/src/sp-anchor.cpp
+++ b/src/sp-anchor.cpp
@@ -41,6 +41,7 @@ CAnchor::~CAnchor() {
static void sp_anchor_init(SPAnchor *anchor)
{
anchor->canchor = new CAnchor(anchor);
+ anchor->typeHierarchy.insert(typeid(SPAnchor));
delete anchor->cgroup;
anchor->cgroup = anchor->canchor;
diff --git a/src/sp-clippath.cpp b/src/sp-clippath.cpp
index 18ea91cc2..f4503386c 100644
--- a/src/sp-clippath.cpp
+++ b/src/sp-clippath.cpp
@@ -58,6 +58,7 @@ static void
sp_clippath_init(SPClipPath *cp)
{
cp->cclippath = new CClipPath(cp);
+ cp->typeHierarchy.insert(typeid(SPClipPath));
delete cp->cobjectgroup;
cp->cobjectgroup = cp->cclippath;
diff --git a/src/sp-defs.cpp b/src/sp-defs.cpp
index ef3c7182b..0a8bdb3cb 100644
--- a/src/sp-defs.cpp
+++ b/src/sp-defs.cpp
@@ -33,6 +33,7 @@ static void
sp_defs_init(SPDefs* defs)
{
defs->cdefs = new CDefs(defs);
+ defs->typeHierarchy.insert(typeid(SPDefs));
delete defs->cobject;
defs->cobject = defs->cdefs;
diff --git a/src/sp-desc.cpp b/src/sp-desc.cpp
index 41619eb87..d4836f86a 100644
--- a/src/sp-desc.cpp
+++ b/src/sp-desc.cpp
@@ -34,6 +34,7 @@ CDesc::~CDesc() {
static void sp_desc_init(SPDesc *desc)
{
desc->cdesc = new CDesc(desc);
+ desc->typeHierarchy.insert(typeid(SPDesc));
delete desc->cobject;
desc->cobject = desc->cdesc;
diff --git a/src/sp-ellipse.cpp b/src/sp-ellipse.cpp
index 29f7f0397..ac0351a5e 100644
--- a/src/sp-ellipse.cpp
+++ b/src/sp-ellipse.cpp
@@ -83,6 +83,7 @@ static void
sp_genericellipse_init(SPGenericEllipse *ellipse)
{
ellipse->cgenericEllipse = new CGenericEllipse(ellipse);
+ ellipse->typeHierarchy.insert(typeid(SPGenericEllipse));
delete ellipse->cshape;
ellipse->cshape = ellipse->cgenericEllipse;
@@ -360,6 +361,7 @@ static void
sp_ellipse_init(SPEllipse *ellipse)
{
ellipse->cellipse = new CEllipse(ellipse);
+ ellipse->typeHierarchy.insert(typeid(SPEllipse));
delete ellipse->cgenericEllipse;
ellipse->cgenericEllipse = ellipse->cellipse;
@@ -472,6 +474,7 @@ static void
sp_circle_init(SPCircle *circle)
{
circle->ccircle = new CCircle(circle);
+ circle->typeHierarchy.insert(typeid(SPCircle));
delete circle->cgenericEllipse;
circle->cgenericEllipse = circle->ccircle;
@@ -559,6 +562,7 @@ static void
sp_arc_init(SPArc *arc)
{
arc->carc = new CArc(arc);
+ arc->typeHierarchy.insert(typeid(SPArc));
delete arc->cgenericEllipse;
arc->cgenericEllipse = arc->carc;
diff --git a/src/sp-filter-primitive.cpp b/src/sp-filter-primitive.cpp
index 34f028518..d788b4314 100644
--- a/src/sp-filter-primitive.cpp
+++ b/src/sp-filter-primitive.cpp
@@ -75,6 +75,7 @@ void CFilterPrimitive::build_renderer(Inkscape::Filters::Filter* filter) {
static void sp_filter_primitive_init(SPFilterPrimitive *filter_primitive)
{
filter_primitive->cfilterprimitive = new CFilterPrimitive(filter_primitive);
+ filter_primitive->typeHierarchy.insert(typeid(SPFilterPrimitive));
delete filter_primitive->cobject;
filter_primitive->cobject = filter_primitive->cfilterprimitive;
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp
index 0f9d47478..67fdd1ed9 100644
--- a/src/sp-filter.cpp
+++ b/src/sp-filter.cpp
@@ -59,6 +59,7 @@ static void
sp_filter_init(SPFilter *filter)
{
filter->cfilter = new CFilter(filter);
+ filter->typeHierarchy.insert(typeid(SPFilter));
delete filter->cobject;
filter->cobject = filter->cfilter;
diff --git a/src/sp-flowdiv.cpp b/src/sp-flowdiv.cpp
index 90c0e8795..ee387e88f 100644
--- a/src/sp-flowdiv.cpp
+++ b/src/sp-flowdiv.cpp
@@ -36,6 +36,7 @@ CFlowdiv::~CFlowdiv() {
static void sp_flowdiv_init(SPFlowdiv *group)
{
group->cflowdiv = new CFlowdiv(group);
+ group->typeHierarchy.insert(typeid(SPFlowdiv));
delete group->citem;
group->citem = group->cflowdiv;
@@ -185,6 +186,7 @@ CFlowtspan::~CFlowtspan() {
static void sp_flowtspan_init(SPFlowtspan *group)
{
group->cflowtspan = new CFlowtspan(group);
+ group->typeHierarchy.insert(typeid(SPFlowtspan));
delete group->citem;
group->citem = group->cflowtspan;
@@ -333,6 +335,7 @@ CFlowpara::~CFlowpara() {
static void sp_flowpara_init (SPFlowpara *group)
{
group->cflowpara = new CFlowpara(group);
+ group->typeHierarchy.insert(typeid(SPFlowpara));
delete group->citem;
group->citem = group->cflowpara;
@@ -479,6 +482,7 @@ CFlowline::~CFlowline() {
static void sp_flowline_init(SPFlowline *group)
{
group->cflowline = new CFlowline(group);
+ group->typeHierarchy.insert(typeid(SPFlowline));
delete group->cobject;
group->cobject = group->cflowline;
@@ -532,6 +536,7 @@ CFlowregionbreak::~CFlowregionbreak() {
static void sp_flowregionbreak_init(SPFlowregionbreak *group)
{
group->cflowregionbreak = new CFlowregionbreak(group);
+ group->typeHierarchy.insert(typeid(SPFlowregionbreak));
delete group->cobject;
group->cobject = group->cflowregionbreak;
diff --git a/src/sp-flowregion.cpp b/src/sp-flowregion.cpp
index da30db7d3..3c4bc84a1 100644
--- a/src/sp-flowregion.cpp
+++ b/src/sp-flowregion.cpp
@@ -54,6 +54,7 @@ static void
sp_flowregion_init (SPFlowregion *group)
{
group->cflowregion = new CFlowregion(group);
+ group->typeHierarchy.insert(typeid(SPFlowregion));
delete group->citem;
group->citem = group->cflowregion;
@@ -235,6 +236,7 @@ static void
sp_flowregionexclude_init (SPFlowregionExclude *group)
{
group->cflowregionexclude = new CFlowregionExclude(group);
+ group->typeHierarchy.insert(typeid(SPFlowregionExclude));
delete group->citem;
group->citem = group->cflowregionexclude;
diff --git a/src/sp-flowtext.cpp b/src/sp-flowtext.cpp
index 6496d017d..7a695d68d 100644
--- a/src/sp-flowtext.cpp
+++ b/src/sp-flowtext.cpp
@@ -58,6 +58,7 @@ static void
sp_flowtext_init(SPFlowtext *group)
{
group->cflowtext = new CFlowtext(group);
+ group->typeHierarchy.insert(typeid(SPFlowtext));
delete group->citem;
group->citem = group->cflowtext;
diff --git a/src/sp-font-face.cpp b/src/sp-font-face.cpp
index 0da5f7e6a..5baff2751 100644
--- a/src/sp-font-face.cpp
+++ b/src/sp-font-face.cpp
@@ -275,6 +275,7 @@ CFontFace::~CFontFace() {
static void sp_fontface_init(SPFontFace *face)
{
face->cfontface = new CFontFace(face);
+ face->typeHierarchy.insert(typeid(SPFontFace));
delete face->cobject;
face->cobject = face->cfontface;
diff --git a/src/sp-font.cpp b/src/sp-font.cpp
index 0028310a6..0a7c63e33 100644
--- a/src/sp-font.cpp
+++ b/src/sp-font.cpp
@@ -46,6 +46,7 @@ CFont::~CFont() {
static void sp_font_init(SPFont *font)
{
font->cfont = new CFont(font);
+ font->typeHierarchy.insert(typeid(SPFont));
delete font->cobject;
font->cobject = font->cfont;
diff --git a/src/sp-glyph-kerning.cpp b/src/sp-glyph-kerning.cpp
index bdec3d089..c7dd90933 100644
--- a/src/sp-glyph-kerning.cpp
+++ b/src/sp-glyph-kerning.cpp
@@ -91,6 +91,7 @@ CGlyphKerning::~CGlyphKerning() {
static void sp_glyph_kerning_init(SPGlyphKerning *glyph)
{
glyph->cglyphkerning = new CGlyphKerning(glyph);
+ glyph->typeHierarchy.insert(typeid(SPGlyphKerning));
delete glyph->cobject;
glyph->cobject = glyph->cglyphkerning;
diff --git a/src/sp-glyph.cpp b/src/sp-glyph.cpp
index 332b720bc..1554fa08f 100644
--- a/src/sp-glyph.cpp
+++ b/src/sp-glyph.cpp
@@ -38,6 +38,7 @@ CGlyph::~CGlyph() {
static void sp_glyph_init(SPGlyph *glyph)
{
glyph->cglyph = new CGlyph(glyph);
+ glyph->typeHierarchy.insert(typeid(SPGlyph));
delete glyph->cobject;
glyph->cobject = glyph->cglyph;
diff --git a/src/sp-gradient.cpp b/src/sp-gradient.cpp
index b4bb9243e..889151cf8 100644
--- a/src/sp-gradient.cpp
+++ b/src/sp-gradient.cpp
@@ -91,6 +91,7 @@ static void
sp_stop_init(SPStop *stop)
{
stop->cstop = new CStop(stop);
+ stop->typeHierarchy.insert(typeid(SPStop));
delete stop->cobject;
stop->cobject = stop->cstop;
@@ -364,6 +365,7 @@ CMeshRow::~CMeshRow() {
static void sp_meshrow_init(SPMeshRow * meshrow)
{
meshrow->cmeshrow = new CMeshRow(meshrow);
+ meshrow->typeHierarchy.insert(typeid(SPMeshRow));
delete meshrow->cobject;
meshrow->cobject = meshrow->cmeshrow;
@@ -422,6 +424,7 @@ CMeshPatch::~CMeshPatch() {
static void sp_meshpatch_init(SPMeshPatch * meshpatch)
{
meshpatch->cmeshpatch = new CMeshPatch(meshpatch);
+ meshpatch->typeHierarchy.insert(typeid(SPMeshPatch));
delete meshpatch->cobject;
meshpatch->cobject = meshpatch->cmeshpatch;
@@ -527,6 +530,7 @@ CGradient::~CGradient() {
void CGradient::init(SPGradient *gr)
{
gr->cgradient = new CGradient(gr);
+ gr->typeHierarchy.insert(typeid(SPGradient));
delete gr->cpaintserver;
gr->cpaintserver = gr->cgradient;
@@ -1398,6 +1402,7 @@ CLinearGradient::~CLinearGradient() {
static void sp_lineargradient_init(SPLinearGradient *lg)
{
lg->clineargradient = new CLinearGradient(lg);
+ lg->typeHierarchy.insert(typeid(SPLinearGradient));
delete lg->cgradient;
lg->cgradient = lg->clineargradient;
@@ -1525,6 +1530,7 @@ static void
sp_radialgradient_init(SPRadialGradient *rg)
{
rg->cradialgradient = new CRadialGradient(rg);
+ rg->typeHierarchy.insert(typeid(SPRadialGradient));
delete rg->cgradient;
rg->cgradient = rg->cradialgradient;
@@ -1681,6 +1687,7 @@ static void
sp_meshgradient_init(SPMeshGradient *mg)
{
mg->cmeshgradient = new CMeshGradient(mg);
+ mg->typeHierarchy.insert(typeid(SPMeshGradient));
delete mg->cgradient;
mg->cgradient = mg->cmeshgradient;
diff --git a/src/sp-guide.cpp b/src/sp-guide.cpp
index c25c44913..9083a6ef7 100644
--- a/src/sp-guide.cpp
+++ b/src/sp-guide.cpp
@@ -92,6 +92,7 @@ CGuide::~CGuide() {
static void sp_guide_init(SPGuide *guide)
{
guide->cguide = new CGuide(guide);
+ guide->typeHierarchy.insert(typeid(SPGuide));
delete guide->cobject;
guide->cobject = guide->cguide;
diff --git a/src/sp-image.cpp b/src/sp-image.cpp
index fa75915f9..ab3a1ac1b 100644
--- a/src/sp-image.cpp
+++ b/src/sp-image.cpp
@@ -515,6 +515,7 @@ CImage::~CImage() {
static void sp_image_init( SPImage *image )
{
image->cimage = new CImage(image);
+ image->typeHierarchy.insert(typeid(SPImage));
delete image->citem;
image->citem = image->cimage;
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index 7a6e0c1ba..a95b347cf 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -78,6 +78,7 @@ static void
sp_group_init (SPGroup *group)
{
group->cgroup = new CGroup(group);
+ group->typeHierarchy.insert(typeid(SPGroup));
delete group->clpeitem;
group->clpeitem = group->cgroup;
diff --git a/src/sp-item.cpp b/src/sp-item.cpp
index ccc3e2313..5075bdcd3 100644
--- a/src/sp-item.cpp
+++ b/src/sp-item.cpp
@@ -103,6 +103,7 @@ static void
sp_item_init(SPItem *item)
{
item->citem = new CItem(item);
+ item->typeHierarchy.insert(typeid(SPItem));
delete item->cobject;
item->cobject = item->citem;
diff --git a/src/sp-line.cpp b/src/sp-line.cpp
index 71a9a78d6..588e4f375 100644
--- a/src/sp-line.cpp
+++ b/src/sp-line.cpp
@@ -43,6 +43,7 @@ static void
sp_line_init(SPLine * line)
{
line->cline = new CLine(line);
+ line->typeHierarchy.insert(typeid(SPLine));
delete line->cshape;
line->cshape = line->cline;
diff --git a/src/sp-lpe-item.cpp b/src/sp-lpe-item.cpp
index f20818a64..5001cb76e 100644
--- a/src/sp-lpe-item.cpp
+++ b/src/sp-lpe-item.cpp
@@ -71,6 +71,7 @@ static void
sp_lpe_item_init(SPLPEItem *lpeitem)
{
lpeitem->clpeitem = new CLPEItem(lpeitem);
+ lpeitem->typeHierarchy.insert(typeid(SPLPEItem));
delete lpeitem->citem;
lpeitem->citem = lpeitem->clpeitem;
diff --git a/src/sp-mask.cpp b/src/sp-mask.cpp
index e777ee154..8c7fbe53e 100644
--- a/src/sp-mask.cpp
+++ b/src/sp-mask.cpp
@@ -55,6 +55,7 @@ static void
sp_mask_init (SPMask *mask)
{
mask->cmask = new CMask(mask);
+ mask->typeHierarchy.insert(typeid(SPMask));
delete mask->cobjectgroup;
mask->cobjectgroup = mask->cmask;
diff --git a/src/sp-metadata.cpp b/src/sp-metadata.cpp
index d788ec48d..28bf1767b 100644
--- a/src/sp-metadata.cpp
+++ b/src/sp-metadata.cpp
@@ -51,6 +51,7 @@ static void
sp_metadata_init (SPMetadata *metadata)
{
metadata->cmetadata = new CMetadata(metadata);
+ metadata->typeHierarchy.insert(typeid(SPMetadata));
delete metadata->cobject;
metadata->cobject = metadata->cmetadata;
diff --git a/src/sp-missing-glyph.cpp b/src/sp-missing-glyph.cpp
index 227f4d802..b69c8f162 100644
--- a/src/sp-missing-glyph.cpp
+++ b/src/sp-missing-glyph.cpp
@@ -35,6 +35,7 @@ CMissingGlyph::~CMissingGlyph() {
static void sp_missing_glyph_init(SPMissingGlyph *glyph)
{
glyph->cmissingglyph = new CMissingGlyph(glyph);
+ glyph->typeHierarchy.insert(typeid(SPMissingGlyph));
delete glyph->cobject;
glyph->cobject = glyph->cmissingglyph;
diff --git a/src/sp-namedview.cpp b/src/sp-namedview.cpp
index 1771b0787..56e278b78 100644
--- a/src/sp-namedview.cpp
+++ b/src/sp-namedview.cpp
@@ -71,6 +71,7 @@ CNamedView::~CNamedView() {
static void sp_namedview_init(SPNamedView *nv)
{
nv->cnamedview = new CNamedView(nv);
+ nv->typeHierarchy.insert(typeid(SPNamedView));
delete nv->cobjectgroup;
nv->cobjectgroup = nv->cnamedview;
diff --git a/src/sp-object-group.cpp b/src/sp-object-group.cpp
index ad2210574..093d044c4 100644
--- a/src/sp-object-group.cpp
+++ b/src/sp-object-group.cpp
@@ -28,6 +28,7 @@ static void
sp_objectgroup_init(SPObjectGroup * objectgroup)
{
objectgroup->cobjectgroup = new CObjectGroup(objectgroup);
+ objectgroup->typeHierarchy.insert(typeid(SPObjectGroup));
delete objectgroup->cobject;
objectgroup->cobject = objectgroup->cobjectgroup;
diff --git a/src/sp-object.cpp b/src/sp-object.cpp
index 3984617bb..82f3f1c81 100644
--- a/src/sp-object.cpp
+++ b/src/sp-object.cpp
@@ -128,6 +128,9 @@ sp_object_init(SPObject *object)
object->cobject = new CObject(object);
+ new (&object->typeHierarchy) std::set<TypeInfo>();
+ object->typeHierarchy.insert(typeid(SPObject));
+
object->hrefcount = 0;
object->_total_hrefcount = 0;
object->document = NULL;
@@ -179,6 +182,7 @@ sp_object_finalize(GObject *object)
{
SPObject *spobject = (SPObject *)object;
+ spobject->typeHierarchy.~set();
delete spobject->cobject;
g_free(spobject->_label);
diff --git a/src/sp-object.h b/src/sp-object.h
index b6162cc79..cd6dbc247 100644
--- a/src/sp-object.h
+++ b/src/sp-object.h
@@ -49,6 +49,9 @@ class SPObjectClass;
#define SP_OBJECT_WRITE_EXT (1 << 1)
#define SP_OBJECT_WRITE_ALL (1 << 2)
+#include <set>
+#include "type-info.h"
+
#include <glib-object.h>
#include <stddef.h>
#include <sigc++/connection.h>
@@ -196,6 +199,7 @@ public:
};
CObject* cobject;
+ std::set<TypeInfo> typeHierarchy;
unsigned int cloned : 1;
unsigned int uflags : 8;
diff --git a/src/sp-offset.cpp b/src/sp-offset.cpp
index d6ad5e426..511a0c4b1 100644
--- a/src/sp-offset.cpp
+++ b/src/sp-offset.cpp
@@ -113,6 +113,7 @@ static void
sp_offset_init(SPOffset *offset)
{
offset->coffset = new COffset(offset);
+ offset->typeHierarchy.insert(typeid(SPOffset));
delete offset->cshape;
offset->cshape = offset->coffset;
diff --git a/src/sp-paint-server.cpp b/src/sp-paint-server.cpp
index 75078f4ef..f75176f0e 100644
--- a/src/sp-paint-server.cpp
+++ b/src/sp-paint-server.cpp
@@ -47,6 +47,7 @@ static void
sp_paint_server_init(SPPaintServer *ps)
{
ps->cpaintserver = new CPaintServer(ps);
+ ps->typeHierarchy.insert(typeid(SPPaintServer));
delete ps->cobject;
ps->cobject = ps->cpaintserver;
diff --git a/src/sp-path.cpp b/src/sp-path.cpp
index cc469d027..43bf0a6a2 100644
--- a/src/sp-path.cpp
+++ b/src/sp-path.cpp
@@ -141,6 +141,7 @@ static void
sp_path_init(SPPath *path)
{
path->cpath = new CPath(path);
+ path->typeHierarchy.insert(typeid(SPPath));
delete path->cshape;
path->cshape = path->cpath;
diff --git a/src/sp-pattern.cpp b/src/sp-pattern.cpp
index 46e1978d3..f04ba3f0a 100644
--- a/src/sp-pattern.cpp
+++ b/src/sp-pattern.cpp
@@ -61,6 +61,7 @@ static void
sp_pattern_init (SPPattern *pat)
{
pat->cpattern = new CPattern(pat);
+ pat->typeHierarchy.insert(typeid(SPPattern));
delete pat->cpaintserver;
pat->cpaintserver = pat->cpattern;
diff --git a/src/sp-polygon.cpp b/src/sp-polygon.cpp
index b694c1755..7f9192839 100644
--- a/src/sp-polygon.cpp
+++ b/src/sp-polygon.cpp
@@ -41,6 +41,7 @@ CPolygon::~CPolygon() {
static void sp_polygon_init(SPPolygon *polygon)
{
polygon->cpolygon = new CPolygon(polygon);
+ polygon->typeHierarchy.insert(typeid(SPPolygon));
delete polygon->cshape;
polygon->cshape = polygon->cpolygon;
diff --git a/src/sp-polyline.cpp b/src/sp-polyline.cpp
index e8144d2a5..27d17d081 100644
--- a/src/sp-polyline.cpp
+++ b/src/sp-polyline.cpp
@@ -38,6 +38,7 @@ CPolyLine::~CPolyLine() {
void sp_polyline_init(SPPolyLine * polyline)
{
polyline->cpolyline = new CPolyLine(polyline);
+ polyline->typeHierarchy.insert(typeid(SPPolyLine));
delete polyline->cshape;
polyline->cshape = polyline->cpolyline;
diff --git a/src/sp-rect.cpp b/src/sp-rect.cpp
index 17a03ab19..7ab9854d4 100644
--- a/src/sp-rect.cpp
+++ b/src/sp-rect.cpp
@@ -49,6 +49,7 @@ static void
sp_rect_init(SPRect *rect)
{
rect->crect = new CRect(rect);
+ rect->typeHierarchy.insert(typeid(SPRect));
delete rect->cshape;
rect->cshape = rect->crect;
diff --git a/src/sp-root.cpp b/src/sp-root.cpp
index 715d4659e..1767c4cd2 100644
--- a/src/sp-root.cpp
+++ b/src/sp-root.cpp
@@ -54,6 +54,7 @@ CRoot::~CRoot() {
static void sp_root_init(SPRoot *root)
{
root->croot = new CRoot(root);
+ root->typeHierarchy.insert(typeid(SPRoot));
delete root->cgroup;
root->cgroup = root->croot;
diff --git a/src/sp-script.cpp b/src/sp-script.cpp
index 8190fe81c..6c2a029a0 100644
--- a/src/sp-script.cpp
+++ b/src/sp-script.cpp
@@ -32,6 +32,7 @@ CScript::~CScript() {
static void sp_script_init(SPScript *script)
{
script->cscript = new CScript(script);
+ script->typeHierarchy.insert(typeid(SPScript));
delete script->cobject;
script->cobject = script->cscript;
diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp
index afaeb91a8..42b6ec6dd 100644
--- a/src/sp-shape.cpp
+++ b/src/sp-shape.cpp
@@ -83,6 +83,7 @@ static void
sp_shape_init(SPShape *shape)
{
shape->cshape = new CShape(shape);
+ shape->typeHierarchy.insert(typeid(SPShape));
delete shape->clpeitem;
shape->clpeitem = shape->cshape;
diff --git a/src/sp-spiral.cpp b/src/sp-spiral.cpp
index 348d9ca68..6c1deb4d5 100644
--- a/src/sp-spiral.cpp
+++ b/src/sp-spiral.cpp
@@ -51,6 +51,7 @@ static void
sp_spiral_init (SPSpiral * spiral)
{
spiral->cspiral = new CSpiral(spiral);
+ spiral->typeHierarchy.insert(typeid(SPSpiral));
delete spiral->cshape;
spiral->cshape = spiral->cspiral;
diff --git a/src/sp-star.cpp b/src/sp-star.cpp
index 7d22484cf..0b89ed10c 100644
--- a/src/sp-star.cpp
+++ b/src/sp-star.cpp
@@ -49,6 +49,7 @@ static void
sp_star_init (SPStar * star)
{
star->cstar = new CStar(star);
+ star->typeHierarchy.insert(typeid(SPStar));
delete star->cpolygon;
star->cpolygon = star->cstar;
diff --git a/src/sp-string.cpp b/src/sp-string.cpp
index 81dc9576f..1625729b1 100644
--- a/src/sp-string.cpp
+++ b/src/sp-string.cpp
@@ -55,6 +55,7 @@ static void
sp_string_init(SPString *string)
{
string->cstring = new CString(string);
+ string->typeHierarchy.insert(typeid(SPString));
delete string->cobject;
string->cobject = string->cstring;
diff --git a/src/sp-style-elem.cpp b/src/sp-style-elem.cpp
index 65beaba07..5fc7f6377 100644
--- a/src/sp-style-elem.cpp
+++ b/src/sp-style-elem.cpp
@@ -25,6 +25,7 @@ static void
sp_style_elem_init(SPStyleElem *style_elem)
{
style_elem->cstyleelem = new CStyleElem(style_elem);
+ style_elem->typeHierarchy.insert(typeid(SPStyleElem));
delete style_elem->cobject;
style_elem->cobject = style_elem->cstyleelem;
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index f6c267f79..68f021fda 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -42,6 +42,7 @@ CSwitch::~CSwitch() {
static void sp_switch_init (SPSwitch *sw)
{
sw->cswitch = new CSwitch(sw);
+ sw->typeHierarchy.insert(typeid(SPSwitch));
delete sw->cgroup;
sw->cgroup = sw->cswitch;
diff --git a/src/sp-symbol.cpp b/src/sp-symbol.cpp
index 896e5b3a8..43d86c746 100644
--- a/src/sp-symbol.cpp
+++ b/src/sp-symbol.cpp
@@ -42,6 +42,7 @@ CSymbol::~CSymbol() {
static void sp_symbol_init(SPSymbol *symbol)
{
symbol->csymbol = new CSymbol(symbol);
+ symbol->typeHierarchy.insert(typeid(SPSymbol));
delete symbol->cgroup;
symbol->cgroup = symbol->csymbol;
diff --git a/src/sp-text.cpp b/src/sp-text.cpp
index 45f159b9d..8db9b5be3 100644
--- a/src/sp-text.cpp
+++ b/src/sp-text.cpp
@@ -79,6 +79,7 @@ static void
sp_text_init (SPText *text)
{
text->ctext = new CText(text);
+ text->typeHierarchy.insert(typeid(SPText));
delete text->citem;
text->citem = text->ctext;
diff --git a/src/sp-title.cpp b/src/sp-title.cpp
index 522901eaf..815f0e009 100644
--- a/src/sp-title.cpp
+++ b/src/sp-title.cpp
@@ -34,6 +34,7 @@ static void
sp_title_init(SPTitle *desc)
{
desc->ctitle = new CTitle(desc);
+ desc->typeHierarchy.insert(typeid(SPTitle));
delete desc->cobject;
desc->cobject = desc->ctitle;
diff --git a/src/sp-tref.cpp b/src/sp-tref.cpp
index 7d17f9d3b..6eee54450 100644
--- a/src/sp-tref.cpp
+++ b/src/sp-tref.cpp
@@ -77,6 +77,7 @@ static void
sp_tref_init(SPTRef *tref)
{
tref->ctref = new CTRef(tref);
+ tref->typeHierarchy.insert(typeid(SPTRef));
delete tref->citem;
tref->citem = tref->ctref;
diff --git a/src/sp-tspan.cpp b/src/sp-tspan.cpp
index fcbda7123..853966e46 100644
--- a/src/sp-tspan.cpp
+++ b/src/sp-tspan.cpp
@@ -65,6 +65,7 @@ static void
sp_tspan_init(SPTSpan *tspan)
{
tspan->ctspan = new CTSpan(tspan);
+ tspan->typeHierarchy.insert(typeid(SPTSpan));
delete tspan->citem;
tspan->citem = tspan->ctspan;
@@ -267,6 +268,7 @@ static void
sp_textpath_init(SPTextPath *textpath)
{
textpath->ctextpath = new CTextPath(textpath);
+ textpath->typeHierarchy.insert(typeid(SPTextPath));
delete textpath->citem;
textpath->citem = textpath->ctextpath;
diff --git a/src/sp-use.cpp b/src/sp-use.cpp
index f3c478194..c195b34e9 100644
--- a/src/sp-use.cpp
+++ b/src/sp-use.cpp
@@ -67,6 +67,7 @@ static void
sp_use_init(SPUse *use)
{
use->cuse = new CUse(use);
+ use->typeHierarchy.insert(typeid(SPUse));
delete use->citem;
use->citem = use->cuse;