summaryrefslogtreecommitdiff
path: root/libs/pbd
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-03-02 19:12:01 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-03-02 19:12:01 +0000
commit3a85e71031bc26d67d66db985da2159415f84fdb (patch)
tree1c7fbe946684325bcd8980e713e0268844032bae /libs/pbd
parent17088ee3ea5af1e6174b098bb5bcfdaec6ebf9b0 (diff)
(1) stop using mangled names in history state, use demangled ones instead (2) fix region split so that the generated regions have the right start points in the source(s)
git-svn-id: svn://localhost/ardour2/branches/3.0@6721 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd')
-rw-r--r--libs/pbd/pbd/demangle.h48
-rw-r--r--libs/pbd/pbd/memento_command.h3
-rw-r--r--libs/pbd/property_factory.cc53
-rw-r--r--libs/pbd/stateful_diff_command.cc3
-rw-r--r--libs/pbd/wscript1
5 files changed, 52 insertions, 56 deletions
diff --git a/libs/pbd/pbd/demangle.h b/libs/pbd/pbd/demangle.h
new file mode 100644
index 0000000000..adace5d46f
--- /dev/null
+++ b/libs/pbd/pbd/demangle.h
@@ -0,0 +1,48 @@
+/*
+ Copyright (C) 2009 Paul Davis
+ Author: Sakari Bergen
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#ifndef __libpbd_demangle_h__
+#define __libpbd_demangle_h__
+
+#include <string>
+#include <cstdlib>
+
+#ifdef __GNUC__
+#include <cxxabi.h>
+#endif
+
+namespace PBD
+{
+ template<typename T>
+ std::string demangled_name (T const & obj)
+ {
+#ifdef __GNUC__
+ int status;
+ char * res = abi::__cxa_demangle (typeid(obj).name(), 0, 0, &status);
+ if (status == 0) {
+ std::string s(res);
+ free (res);
+ return s;
+ }
+#endif
+ return typeid(obj).name();
+ }
+} // namespace
+
+#endif // __libpbd_demangle_h__
diff --git a/libs/pbd/pbd/memento_command.h b/libs/pbd/pbd/memento_command.h
index 8c3d1a1870..5a385841a6 100644
--- a/libs/pbd/pbd/memento_command.h
+++ b/libs/pbd/pbd/memento_command.h
@@ -26,6 +26,7 @@
#include "pbd/command.h"
#include "pbd/stacktrace.h"
#include "pbd/xml++.h"
+#include "pbd/demangle.h"
#include <sigc++/slot.h>
#include <typeinfo>
@@ -80,7 +81,7 @@ public:
XMLNode* node = new XMLNode(name);
node->add_property("obj_id", obj.id().to_s());
- node->add_property("type_name", typeid(obj).name());
+ node->add_property("type_name", demangled_name (obj));
if (before) {
node->add_child_copy(*before);
diff --git a/libs/pbd/property_factory.cc b/libs/pbd/property_factory.cc
deleted file mode 100644
index af0a91a0bf..0000000000
--- a/libs/pbd/property_factory.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- Copyright (C) 2010 Paul Davis
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include <stdint.h>
-#include <cstdio>
-
-#include "pbd/properties.h"
-#include "pbd/xml++.h"
-
-#include "i18n.h"
-
-using namespace PBD;
-
-PropertyBase*
-PropertyFactory::create (const XMLNode& node)
-{
- const XMLProperty* prop_type = node.property (X_("property-type"));
- const XMLProperty* prop_id = node.property (X_("id"));
- const XMLProperty* prop_val = node.property (X_("val"));
-
- if (!prop_type || !prop_id || !prop_val) {
- return 0;
- }
-
- PropertyID id;
- sscanf (prop_id->value().c_str(), "%u", &id);
-
- if (prop_type->value() == typeid (Property<bool>).name()) {
-
- PropertyDescriptor<bool> pd (id);
- Property<bool>* p = new Property<bool> (pd);
- p->set (p->from_string (prop_val->value()));
- return p;
- }
-
- return 0;
-}
diff --git a/libs/pbd/stateful_diff_command.cc b/libs/pbd/stateful_diff_command.cc
index 0c7b8cc3f2..bfd9f33440 100644
--- a/libs/pbd/stateful_diff_command.cc
+++ b/libs/pbd/stateful_diff_command.cc
@@ -21,6 +21,7 @@
#include "pbd/stateful_diff_command.h"
#include "pbd/property_list.h"
+#include "pbd/demangle.h"
#include "i18n.h"
using namespace std;
@@ -105,7 +106,7 @@ StatefulDiffCommand::get_state ()
XMLNode* node = new XMLNode (X_("StatefulDiffCommand"));
node->add_property ("obj-id", s->id().to_s());
- node->add_property ("type-name", typeid(*s.get()).name());
+ node->add_property ("type-name", demangled_name (*s.get()));
XMLNode* before = new XMLNode (X_("Undo"));
XMLNode* after = new XMLNode (X_("Do"));
diff --git a/libs/pbd/wscript b/libs/pbd/wscript
index 08c0f2670b..6e10fe9fba 100644
--- a/libs/pbd/wscript
+++ b/libs/pbd/wscript
@@ -75,7 +75,6 @@ def build(bld):
mountpoint.cc
pathscanner.cc
pool.cc
- property_factory.cc
property_list.cc
pthread_utils.cc
receiver.cc