summaryrefslogtreecommitdiff
path: root/libs/pbd3
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pbd3')
-rw-r--r--libs/pbd3/SConscript9
-rw-r--r--libs/pbd3/base_ui.cc1
-rw-r--r--libs/pbd3/basename.cc31
-rw-r--r--libs/pbd3/pathscanner.cc2
-rw-r--r--libs/pbd3/pbd/abstract_ui.cc2
-rw-r--r--libs/pbd3/pbd/abstract_ui.h5
-rw-r--r--libs/pbd3/pbd/basename.h4
-rw-r--r--libs/pbd3/pbd/error.h18
-rw-r--r--libs/pbd3/pbd/pool.h9
-rw-r--r--libs/pbd3/pbd/ringbuffer.h47
-rw-r--r--libs/pbd3/pbd/ringbufferNPT.h52
-rw-r--r--libs/pbd3/pbd/transmitter.h1
-rw-r--r--libs/pbd3/pool.cc31
-rw-r--r--libs/pbd3/transmitter.cc11
-rw-r--r--libs/pbd3/undo.cc2
15 files changed, 105 insertions, 120 deletions
diff --git a/libs/pbd3/SConscript b/libs/pbd3/SConscript
index 4d1b2a8681..2766b3c5ed 100644
--- a/libs/pbd3/SConscript
+++ b/libs/pbd3/SConscript
@@ -10,7 +10,7 @@ pbd3 = env.Copy()
domain = 'libpbd'
-pbd3.Append(DOMAIN=domain,MAJOR=3,MINOR=2,MICRO=0)
+pbd3.Append(DOMAIN=domain,MAJOR=4,MINOR=0,MICRO=0)
pbd3.Append(CXXFLAGS="-DPACKAGE=\\\"" + domain + "\\\"")
pbd3.Append(CXXFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
pbd3.Append(CXXFLAGS="-DLIBSIGC_DISABLE_DEPRECATED")
@@ -21,8 +21,8 @@ pbd3_files = Split("""
basename.cc
base_ui.cc
convert.cc
-dirname.cc
dmalloc.cc
+error.cc
mountpoint.cc
pathscanner.cc
pool.cc
@@ -33,7 +33,6 @@ strsplit.cc
textreceiver.cc
transmitter.cc
undo.cc
-unescape.cc
version.cc
whitespace.cc
xml++.cc
@@ -46,7 +45,7 @@ if conf.CheckCHeader('execinfo.h'):
conf.env.Append(CXXFLAGS="-DHAVE_EXECINFO")
pbd3 = conf.Finish()
-pbd3.Merge ([ libraries['sigc2'], libraries['xml'] ])
+pbd3.Merge ([ libraries['sigc2'], libraries['xml'], libraries['glibmm2'], libraries['glib2'] ])
pbd3.VersionBuild(['version.cc','pbd/version.h'], 'SConscript')
@@ -60,7 +59,7 @@ if env['NLS']:
env.Alias('install', env.Install(os.path.join(install_prefix, 'lib/ardour2'), libpbd3))
env.Alias('tarball', env.Distribute (env['DISTTREE'],
- [ 'SConscript', 'i18n.h' ] +
+ [ 'SConscript', 'i18n.h', 'gettext.h', 'pbd/abstract_ui.cc' ] +
pbd3_files +
glob.glob('po/*.po') +
glob.glob('pbd/*.h')))
diff --git a/libs/pbd3/base_ui.cc b/libs/pbd3/base_ui.cc
index 5598b20021..d3c8d5e4c7 100644
--- a/libs/pbd3/base_ui.cc
+++ b/libs/pbd3/base_ui.cc
@@ -11,6 +11,7 @@
#include "i18n.h"
using namespace std;
+using namespace PBD;
uint32_t BaseUI::rt_bit = 1;
BaseUI::RequestType BaseUI::CallSlot = BaseUI::new_request_type();
diff --git a/libs/pbd3/basename.cc b/libs/pbd3/basename.cc
index b8c5c64d91..a51e393b78 100644
--- a/libs/pbd3/basename.cc
+++ b/libs/pbd3/basename.cc
@@ -2,37 +2,10 @@
#include <string.h>
#include <pbd/basename.h>
-char *
-PBD::basename (const char *path)
-
-{
- char *slash;
-
- if ((slash = strrchr (path, '/')) == 0) {
- return strdup (path);
- }
-
- if (*(slash+1) == '\0') {
- return strdup ("");
- }
-
- return strdup (slash+1);
-}
-
-std::string
-PBD::basename (const std::string str)
-{
- std::string::size_type slash = str.find_last_of ('/');
-
- if (slash == std::string::npos) {
- return str;
- }
-
- return str.substr (slash+1);
-}
+// implement this using Glib::path_get_basename
std::string
-PBD::basename_nosuffix (const std::string str)
+PBD::basename_nosuffix (const std::string& str)
{
std::string::size_type slash = str.find_last_of ('/');
std::string noslash;
diff --git a/libs/pbd3/pathscanner.cc b/libs/pbd3/pathscanner.cc
index 5b96284a90..2af227a3a0 100644
--- a/libs/pbd3/pathscanner.cc
+++ b/libs/pbd3/pathscanner.cc
@@ -27,6 +27,8 @@
#include <pbd/pathscanner.h>
#include <pbd/stl_delete.h>
+using namespace PBD;
+
vector<string *> *
PathScanner::operator() (const string &dirpath, const string &regexp,
bool match_fullpath, bool return_fullpath,
diff --git a/libs/pbd3/pbd/abstract_ui.cc b/libs/pbd3/pbd/abstract_ui.cc
index 06cf1665a3..0e34787a2d 100644
--- a/libs/pbd3/pbd/abstract_ui.cc
+++ b/libs/pbd3/pbd/abstract_ui.cc
@@ -29,7 +29,7 @@ AbstractUI<RequestObject>::register_thread_with_request_count (pthread_t thread_
RequestBuffer* b = new RequestBuffer (num_requests);
{
- PBD::LockMonitor lm (request_buffer_map_lock, __LINE__, __FILE__);
+ Glib::Mutex::Lock lm (request_buffer_map_lock);
request_buffers[thread_id] = b;
}
diff --git a/libs/pbd3/pbd/abstract_ui.h b/libs/pbd3/pbd/abstract_ui.h
index 98f077cb48..f80db7bf1a 100644
--- a/libs/pbd3/pbd/abstract_ui.h
+++ b/libs/pbd3/pbd/abstract_ui.h
@@ -27,8 +27,9 @@
#include <sigc++/sigc++.h>
+#include <glibmm/thread.h>
+
#include <pbd/receiver.h>
-#include <pbd/lockmonitor.h>
#include <pbd/ringbufferNPT.h>
#include <pbd/base_ui.h>
@@ -62,7 +63,7 @@ class AbstractUI : public BaseUI
typedef typename RequestBuffer::rw_vector RequestBufferVector;
typedef typename std::map<pthread_t,RequestBuffer*>::iterator RequestBufferMapIterator;
- PBD::Lock request_buffer_map_lock;
+ Glib::Mutex request_buffer_map_lock;
typedef std::map<pthread_t,RequestBuffer*> RequestBufferMap;
RequestBufferMap request_buffers;
pthread_key_t thread_request_buffer_key;
diff --git a/libs/pbd3/pbd/basename.h b/libs/pbd3/pbd/basename.h
index 01f40b6b6a..35aebe166c 100644
--- a/libs/pbd3/pbd/basename.h
+++ b/libs/pbd3/pbd/basename.h
@@ -6,9 +6,7 @@
namespace PBD
{
-extern char *basename (const char *);
-extern std::string basename (const std::string);
-extern std::string basename_nosuffix (const std::string);
+extern std::string basename_nosuffix (const std::string&);
};
diff --git a/libs/pbd3/pbd/error.h b/libs/pbd3/pbd/error.h
index cb822e6210..4136f02ee2 100644
--- a/libs/pbd3/pbd/error.h
+++ b/libs/pbd3/pbd/error.h
@@ -1,5 +1,5 @@
/*
- Copyright (C) 1998-99 Paul Barton-Davis
+ Copyright (C) 1998-2006 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
@@ -17,14 +17,16 @@
$Id$
*/
-#ifndef __libmisc_error_h__
-#define __libmisc_error_h__
+#ifndef __libpbd_error_h__
+#define __libpbd_error_h__
#include "transmitter.h"
-extern Transmitter error;
-extern Transmitter info;
-extern Transmitter warning;
-extern Transmitter fatal;
+namespace PBD {
+ extern Transmitter error;
+ extern Transmitter info;
+ extern Transmitter warning;
+ extern Transmitter fatal;
+}
-#endif // __libmisc_error_h__
+#endif // __libpbd_error_h__
diff --git a/libs/pbd3/pbd/pool.h b/libs/pbd3/pbd/pool.h
index c8e9740acd..f8e19e72fb 100644
--- a/libs/pbd3/pbd/pool.h
+++ b/libs/pbd3/pbd/pool.h
@@ -23,7 +23,9 @@
#include <vector>
#include <string>
-#include <pthread.h>
+
+#include <glibmm/thread.h>
+
#include <pbd/ringbuffer.h>
class Pool
@@ -53,7 +55,7 @@ class SingleAllocMultiReleasePool : public Pool
virtual void release (void *);
private:
- pthread_mutex_t lock;
+ Glib::Mutex* m_lock;
};
@@ -67,8 +69,7 @@ class MultiAllocSingleReleasePool : public Pool
virtual void release (void *);
private:
- pthread_mutex_t lock;
+ Glib::Mutex* m_lock;
};
-
#endif // __qm_pool_h__
diff --git a/libs/pbd3/pbd/ringbuffer.h b/libs/pbd3/pbd/ringbuffer.h
index d276d19086..1d9c9b04e3 100644
--- a/libs/pbd3/pbd/ringbuffer.h
+++ b/libs/pbd3/pbd/ringbuffer.h
@@ -21,8 +21,9 @@
#ifndef ringbuffer_h
#define ringbuffer_h
-#include <sys/mman.h>
-#include <pbd/atomic.h>
+//#include <sys/mman.h>
+
+#include <glib.h>
template<class T>
class RingBuffer
@@ -47,14 +48,14 @@ class RingBuffer
void reset () {
/* !!! NOT THREAD SAFE !!! */
- atomic_set (&write_ptr, 0);
- atomic_set (&read_ptr, 0);
+ g_atomic_int_set (&write_ptr, 0);
+ g_atomic_int_set (&read_ptr, 0);
}
void set (size_t r, size_t w) {
/* !!! NOT THREAD SAFE !!! */
- atomic_set (&write_ptr, w);
- atomic_set (&read_ptr, r);
+ g_atomic_int_set (&write_ptr, w);
+ g_atomic_int_set (&read_ptr, r);
}
size_t read (T *dest, size_t cnt);
@@ -69,22 +70,22 @@ class RingBuffer
void get_write_vector (rw_vector *);
void decrement_read_ptr (size_t cnt) {
- atomic_set (&read_ptr, (atomic_read(&read_ptr) - cnt) & size_mask);
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) - cnt) & size_mask);
}
void increment_read_ptr (size_t cnt) {
- atomic_set (&read_ptr, (atomic_read(&read_ptr) + cnt) & size_mask);
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) + cnt) & size_mask);
}
void increment_write_ptr (size_t cnt) {
- atomic_set (&write_ptr, (atomic_read(&write_ptr) + cnt) & size_mask);
+ g_atomic_int_set (&write_ptr, (g_atomic_int_get(&write_ptr) + cnt) & size_mask);
}
size_t write_space () {
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
return ((r - w + size) & size_mask) - 1;
@@ -98,8 +99,8 @@ class RingBuffer
size_t read_space () {
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
return w - r;
@@ -109,8 +110,8 @@ class RingBuffer
}
T *buffer () { return buf; }
- size_t get_write_ptr () const { return atomic_read (&write_ptr); }
- size_t get_read_ptr () const { return atomic_read (&read_ptr); }
+ size_t get_write_ptr () const { return g_atomic_int_get (&write_ptr); }
+ size_t get_read_ptr () const { return g_atomic_int_get (&read_ptr); }
size_t bufsize () const { return size; }
protected:
@@ -130,7 +131,7 @@ RingBuffer<T>::read (T *dest, size_t cnt)
size_t n1, n2;
size_t priv_read_ptr;
- priv_read_ptr=atomic_read(&read_ptr);
+ priv_read_ptr=g_atomic_int_get(&read_ptr);
if ((free_cnt = read_space ()) == 0) {
return 0;
@@ -156,7 +157,7 @@ RingBuffer<T>::read (T *dest, size_t cnt)
priv_read_ptr = n2;
}
- atomic_set(&read_ptr, priv_read_ptr);
+ g_atomic_int_set(&read_ptr, priv_read_ptr);
return to_read;
}
@@ -170,7 +171,7 @@ RingBuffer<T>::write (T *src, size_t cnt)
size_t n1, n2;
size_t priv_write_ptr;
- priv_write_ptr=atomic_read(&write_ptr);
+ priv_write_ptr=g_atomic_int_get(&write_ptr);
if ((free_cnt = write_space ()) == 0) {
return 0;
@@ -196,7 +197,7 @@ RingBuffer<T>::write (T *src, size_t cnt)
priv_write_ptr = n2;
}
- atomic_set(&write_ptr, priv_write_ptr);
+ g_atomic_int_set(&write_ptr, priv_write_ptr);
return to_write;
}
@@ -208,8 +209,8 @@ RingBuffer<T>::get_read_vector (RingBuffer<T>::rw_vector *vec)
size_t cnt2;
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
free_cnt = w - r;
@@ -248,8 +249,8 @@ RingBuffer<T>::get_write_vector (RingBuffer<T>::rw_vector *vec)
size_t cnt2;
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
free_cnt = ((r - w + size) & size_mask) - 1;
diff --git a/libs/pbd3/pbd/ringbufferNPT.h b/libs/pbd3/pbd/ringbufferNPT.h
index ccfcae42a5..fee2efce3d 100644
--- a/libs/pbd3/pbd/ringbufferNPT.h
+++ b/libs/pbd3/pbd/ringbufferNPT.h
@@ -21,12 +21,12 @@
#ifndef ringbuffer_npt_h
#define ringbuffer_npt_h
-#include <sys/mman.h>
-#include <pbd/atomic.h>
+//#include <sys/mman.h>
+
+#include <glib.h>
+
+/* ringbuffer class where the element size is not required to be a power of two */
-/** Ringbuffer class where the element size is not required to be a
- * power of two.
- */
template<class T>
class RingBufferNPT
{
@@ -44,14 +44,14 @@ class RingBufferNPT
void reset () {
/* !!! NOT THREAD SAFE !!! */
- atomic_set (&write_ptr, 0);
- atomic_set (&read_ptr, 0);
+ g_atomic_int_set (&write_ptr, 0);
+ g_atomic_int_set (&read_ptr, 0);
}
void set (size_t r, size_t w) {
/* !!! NOT THREAD SAFE !!! */
- atomic_set (&write_ptr, w);
- atomic_set (&read_ptr, r);
+ g_atomic_int_set (&write_ptr, w);
+ g_atomic_int_set (&read_ptr, r);
}
size_t read (T *dest, size_t cnt);
@@ -66,22 +66,22 @@ class RingBufferNPT
void get_write_vector (rw_vector *);
void decrement_read_ptr (size_t cnt) {
- atomic_set (&read_ptr, (atomic_read(&read_ptr) - cnt) % size);
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) - cnt) % size);
}
void increment_read_ptr (size_t cnt) {
- atomic_set (&read_ptr, (atomic_read(&read_ptr) + cnt) % size);
+ g_atomic_int_set (&read_ptr, (g_atomic_int_get(&read_ptr) + cnt) % size);
}
void increment_write_ptr (size_t cnt) {
- atomic_set (&write_ptr, (atomic_read(&write_ptr) + cnt) % size);
+ g_atomic_int_set (&write_ptr, (g_atomic_int_get(&write_ptr) + cnt) % size);
}
size_t write_space () {
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
return ((r - w + size) % size) - 1;
@@ -95,8 +95,8 @@ class RingBufferNPT
size_t read_space () {
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
return w - r;
@@ -106,8 +106,8 @@ class RingBufferNPT
}
T *buffer () { return buf; }
- size_t get_write_ptr () const { return atomic_read (&write_ptr); }
- size_t get_read_ptr () const { return atomic_read (&read_ptr); }
+ size_t get_write_ptr () const { return g_atomic_int_get (&write_ptr); }
+ size_t get_read_ptr () const { return g_atomic_int_get (&read_ptr); }
size_t bufsize () const { return size; }
protected:
@@ -126,7 +126,7 @@ RingBufferNPT<T>::read (T *dest, size_t cnt)
size_t n1, n2;
size_t priv_read_ptr;
- priv_read_ptr=atomic_read(&read_ptr);
+ priv_read_ptr=g_atomic_int_get(&read_ptr);
if ((free_cnt = read_space ()) == 0) {
return 0;
@@ -152,7 +152,7 @@ RingBufferNPT<T>::read (T *dest, size_t cnt)
priv_read_ptr = n2;
}
- atomic_set(&read_ptr, priv_read_ptr);
+ g_atomic_int_set(&read_ptr, priv_read_ptr);
return to_read;
}
@@ -165,7 +165,7 @@ RingBufferNPT<T>::write (T *src, size_t cnt)
size_t n1, n2;
size_t priv_write_ptr;
- priv_write_ptr=atomic_read(&write_ptr);
+ priv_write_ptr=g_atomic_int_get(&write_ptr);
if ((free_cnt = write_space ()) == 0) {
return 0;
@@ -191,7 +191,7 @@ RingBufferNPT<T>::write (T *src, size_t cnt)
priv_write_ptr = n2;
}
- atomic_set(&write_ptr, priv_write_ptr);
+ g_atomic_int_set(&write_ptr, priv_write_ptr);
return to_write;
}
@@ -202,8 +202,8 @@ RingBufferNPT<T>::get_read_vector (RingBufferNPT<T>::rw_vector *vec)
size_t cnt2;
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
free_cnt = w - r;
@@ -241,8 +241,8 @@ RingBufferNPT<T>::get_write_vector (RingBufferNPT<T>::rw_vector *vec)
size_t cnt2;
size_t w, r;
- w = atomic_read (&write_ptr);
- r = atomic_read (&read_ptr);
+ w = g_atomic_int_get (&write_ptr);
+ r = g_atomic_int_get (&read_ptr);
if (w > r) {
free_cnt = ((r - w + size) % size) - 1;
diff --git a/libs/pbd3/pbd/transmitter.h b/libs/pbd3/pbd/transmitter.h
index 07fc266bce..357cb9965f 100644
--- a/libs/pbd3/pbd/transmitter.h
+++ b/libs/pbd3/pbd/transmitter.h
@@ -104,6 +104,7 @@ endmsg (std::ostream &ostr)
return ostr;
}
+
extern "C" { void pbd_c_error (const char *); }
#endif // __libmisc_transmitter_h__
diff --git a/libs/pbd3/pool.cc b/libs/pbd3/pool.cc
index f05d88381c..089766482d 100644
--- a/libs/pbd3/pool.cc
+++ b/libs/pbd3/pool.cc
@@ -19,15 +19,13 @@
*/
#include <iostream>
-#include <sys/mman.h>
#include <vector>
#include <pbd/pool.h>
#include <pbd/error.h>
-#include <pbd/stl_delete.h>
-#include <pbd/pthread_utils.h>
using namespace std;
+using namespace PBD;
Pool::Pool (string n, unsigned long item_size, unsigned long nitems)
{
@@ -84,32 +82,39 @@ Pool::release (void *ptr)
/*---------------------------------------------*/
MultiAllocSingleReleasePool::MultiAllocSingleReleasePool (string n, unsigned long isize, unsigned long nitems)
- : Pool (n, isize, nitems)
+ : Pool (n, isize, nitems),
+ m_lock(0)
{
- pthread_mutex_init (&lock, 0);
}
MultiAllocSingleReleasePool::~MultiAllocSingleReleasePool ()
{
+ if(m_lock) delete m_lock;
}
SingleAllocMultiReleasePool::SingleAllocMultiReleasePool (string n, unsigned long isize, unsigned long nitems)
- : Pool (n, isize, nitems)
+ : Pool (n, isize, nitems),
+ m_lock(0)
{
- pthread_mutex_init (&lock, 0);
}
SingleAllocMultiReleasePool::~SingleAllocMultiReleasePool ()
{
+ if(m_lock) delete m_lock;
}
void*
MultiAllocSingleReleasePool::alloc ()
{
void *ptr;
- pthread_mutex_lock (&lock);
+ if(!m_lock) {
+ m_lock = new Glib::Mutex();
+ // umm, I'm not sure that this doesn't also allocate memory.
+ if(!m_lock) error << "cannot create Glib::Mutex in pool.cc" << endmsg;
+ }
+
+ Glib::Mutex::Lock guard(*m_lock);
ptr = Pool::alloc ();
- pthread_mutex_unlock (&lock);
return ptr;
}
@@ -128,8 +133,12 @@ SingleAllocMultiReleasePool::alloc ()
void
SingleAllocMultiReleasePool::release (void* ptr)
{
- pthread_mutex_lock (&lock);
+ if(!m_lock) {
+ m_lock = new Glib::Mutex();
+ // umm, I'm not sure that this doesn't also allocate memory.
+ if(!m_lock) error << "cannot create Glib::Mutex in pool.cc" << endmsg;
+ }
+ Glib::Mutex::Lock guard(*m_lock);
Pool::release (ptr);
- pthread_mutex_unlock (&lock);
}
diff --git a/libs/pbd3/transmitter.cc b/libs/pbd3/transmitter.cc
index 63f676a04f..876a9d86e5 100644
--- a/libs/pbd3/transmitter.cc
+++ b/libs/pbd3/transmitter.cc
@@ -24,17 +24,12 @@
#include <string>
#include <pbd/transmitter.h>
+#include <pbd/error.h>
using std::string;
using std::ios;
-Transmitter error (Transmitter::Error);
-Transmitter info (Transmitter::Info);
-Transmitter fatal (Transmitter::Fatal);
-Transmitter warning (Transmitter::Warning);
-
Transmitter::Transmitter (Channel c)
-
{
channel = c;
switch (c) {
@@ -110,11 +105,11 @@ Transmitter::does_not_return ()
}
}
+
extern "C" {
void pbd_c_error (const char *str)
{
- extern Transmitter error;
- error << str << endmsg;
+ PBD::error << str << endmsg;
}
}
diff --git a/libs/pbd3/undo.cc b/libs/pbd3/undo.cc
index 0af1cc2e7a..f2f11b1c5c 100644
--- a/libs/pbd3/undo.cc
+++ b/libs/pbd3/undo.cc
@@ -77,6 +77,7 @@ UndoCommand::clear ()
void
UndoCommand::undo ()
{
+ cerr << "Undo " << _name << endl;
for (list<UndoAction>::reverse_iterator i = undo_actions.rbegin(); i != undo_actions.rend(); ++i) {
(*i)();
}
@@ -85,6 +86,7 @@ UndoCommand::undo ()
void
UndoCommand::redo ()
{
+ cerr << "Redo " << _name << endl;
for (list<UndoAction>::iterator i = redo_actions.begin(); i != redo_actions.end(); ++i) {
(*i)();
}