summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog-97a8
-rw-r--r--ace/Singleton.cpp18
-rw-r--r--ace/Singleton.h2
-rw-r--r--ace/Stream.h3
-rw-r--r--ace/UPIPE_Stream.cpp4
5 files changed, 29 insertions, 6 deletions
diff --git a/ChangeLog-97a b/ChangeLog-97a
index d33584f3705..3f9d358a8aa 100644
--- a/ChangeLog-97a
+++ b/ChangeLog-97a
@@ -1,4 +1,10 @@
-Wed May 14 15:45:30 1997 Douglas C. Schmidt <schmidt@flamenco.cs.wustl.edu>
+Wed May 14 21:52:22 1997 Douglas C. Schmidt <schmidt@tango.cs.wustl.edu>
+
+ * ace/UPIPE_Stream.cpp (control): We need to "cast away const" so
+ that this method can call the Stream's control() method
+ (which is non-const). Thanks to David Levine for locating this.
+
+ * ace/Singleton.cpp: Finished re-implementing ACE_Singleton.
* examples/ASX/Message_Queue/buffer_stream.cpp: Updated this
example to illustrate (1) how filters work in an ACE_Stream and
diff --git a/ace/Singleton.cpp b/ace/Singleton.cpp
index a715f776d85..cffdfbe0080 100644
--- a/ace/Singleton.cpp
+++ b/ace/Singleton.cpp
@@ -77,13 +77,13 @@ ACE_Singleton<TYPE, LOCK>::instance (TYPE *new_instance)
{
ACE_TRACE ("ACE_Singleton::set_instance");
- TYPE *&singleton = ACE_Singleton<TYPE, LOCK>::instance_i ();
ACE_GUARD_RETURN (LOCK, ace_mon, (ACE_Singleton<TYPE, LOCK>::singleton_lock_i ()), 0);
+ TYPE *&singleton = ACE_Singleton<TYPE, LOCK>::instance_i ();
TYPE *old_instance = singleton;
singleton = new_instance;
- return singleton;
+ return old_instance;
}
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
@@ -160,6 +160,20 @@ ACE_SingletonEx<TYPE, LOCK, MEMORY>::instance (void)
return singleton->ts_object ();
}
+template <class TYPE, class LOCK, ACE_SingletonEx_Strategy MEMORY> TYPE *
+ACE_Singleton<TYPE, LOCK, MEMORY>::instance (TYPE *new_instance)
+{
+ ACE_TRACE ("ACE_Singleton<TYPE, LOCK, MEMORY>::set_instance");
+
+ ACE_GUARD_RETURN (LOCK, ace_mon, (ACE_SingletonEx<TYPE, LOCK, MEMORY>::singleton_lock_i ()), 0);
+
+ TYPE *&singleton = ACE_Singleton<TYPE, LOCK, MEMORY>::instance_i ();
+ TYPE *old_instance = singleton;
+ singleton = new_instance;
+
+ return old_instance;
+}
+
#if !defined (ACE_LACKS_STATIC_DATA_MEMBER_TEMPLATES)
// Pointer to the Singleton instance.
template <class TYPE, class LOCK, ACE_SingletonEx_Strategy MEMORY> TYPE *
diff --git a/ace/Singleton.h b/ace/Singleton.h
index 853910ad172..1304087a840 100644
--- a/ace/Singleton.h
+++ b/ace/Singleton.h
@@ -71,7 +71,7 @@ public:
static TYPE *instance (void);
// Global access point to the Singleton.
- static TYPE *instance (TYPE*);
+ static TYPE *instance (TYPE *);
// Set the Singleton instance.
static void dump (void);
diff --git a/ace/Stream.h b/ace/Stream.h
index 2d81e618a0b..d0a9a2addeb 100644
--- a/ace/Stream.h
+++ b/ace/Stream.h
@@ -114,7 +114,8 @@ public:
// Wait for upto <timeout> amount of time for the operation to
// complete (or block forever if <timeout> == 0).
- int control (ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd, void *args);
+ int control (ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds cmd,
+ void *args);
// Send control message down the stream.
int wait (void);
diff --git a/ace/UPIPE_Stream.cpp b/ace/UPIPE_Stream.cpp
index adda14c1855..596265045db 100644
--- a/ace/UPIPE_Stream.cpp
+++ b/ace/UPIPE_Stream.cpp
@@ -32,7 +32,9 @@ ACE_UPIPE_Stream::control (int cmd,
void * val) const
{
ACE_TRACE ("ACE_UPIPE_Stream::control");
- return this->stream_.control ((ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds) cmd, val);
+
+ return ((ACE_UPIPE_Stream *) this)->stream_.control
+ ((ACE_IO_Cntl_Msg::ACE_IO_Cntl_Cmds) cmd, val);
}
void