summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog-97a68
-rw-r--r--ace/IOStream.cpp251
-rw-r--r--ace/IOStream.h61
-rw-r--r--ace/Map_Manager.cpp6
-rw-r--r--ace/Map_Manager.h4
-rw-r--r--ace/README1
-rw-r--r--ace/Set.cpp263
-rw-r--r--ace/Set.h64
-rw-r--r--ace/config-hpux-10.x-g++.h1
-rw-r--r--ace/config-irix5.3-g++.h2
-rw-r--r--ace/config-mvs.h163
-rw-r--r--ace/config-osf1-4.0-g++.h1
-rw-r--r--ace/config-osf1-4.0.h1
-rw-r--r--ace/config-sunos4-g++.h2
-rw-r--r--ace/config-sunos5.4-g++.h1
-rw-r--r--ace/config-sunos5.5-g++.h1
-rw-r--r--ace/config-unixware-2.01-g++.h1
-rw-r--r--ace/config-vxworks5.2-g++.h1
-rw-r--r--apps/Gateway/Gateway/proxy_config2
19 files changed, 525 insertions, 369 deletions
diff --git a/ChangeLog-97a b/ChangeLog-97a
index 413ea249b8c..5827942f231 100644
--- a/ChangeLog-97a
+++ b/ChangeLog-97a
@@ -1,5 +1,55 @@
+Fri May 2 14:57:56 1997 Douglas C. Schmidt <schmidt@flamenco.cs.wustl.edu>
+
+ * ace/Map_Manager.cpp: Added a no-op destructor to ACE_Map_Entry
+ just to keep some compilers happy. Thanks to Chuck Gehr for
+ reporting this.
+
+ * ace/config-osf1-4.0.h: Added
+
+ #define ACE_LACKS_IOSTREAM_FX
+ #define ACE_LACKS_LINEBUFFERED_STREAMBUF
+ #define ACE_LACKS_SIGNED_CHAR
+
+ Thanks to James CE Johnson <jjohnson@lads.com> for reporting
+ this.
+
+ * ace/Timer_{Wheel,Heap,List}_T.h: Fixed a typo in all these
+ classes that was failing to put the keyword "class" after
+ "friend." Also, replaced the use of the typedef with the
+ expanded name of the class to work around problems with DEC
+ C++. Thanks to James CE Johnson <jjohnson@lads.com> for
+ reporting this.
+
+ * ace/Set: Added a find() method that will return the "ith"
+ element in the set.
+
+ * ace/Set: Added copy constructors and assignment operators to all
+ the ACE_*_Set classes.
+
+ * ace/Set.cpp: Changed the implementation of ACE_Unbounded_Set to
+ use a dummy node and a circular list. This improves performance
+ and also makes it possible to implement "queue" semantics for
+ inserting at the tail of the set.
+
+ * ace/config-osf1-4.0.h: Added the ACE_HAS_STRING_CLASS macro.
+ Thanks to James CE Johnson <jcej@lads.com> for this.
+
+ * ace/IOStream: Added the ACE_HAS_STRING_CLASS macro to
+ replace the nasty #ifdefs we had previously. Thanks to
+ James CE Johnson <jcej@lads.com> for this.
+
+ * ace/config*.g++: Added ACE_HAS_STRING_CLASS for all the GNU
+ compilers and Win32.
+
+ * ace/config-mvs.h: Added a new version that contains support for
+ IBM OS/390 r2. Thanks to Chuck Gehr for this.
+
Fri May 02 08:14:30 1997 David L. Levine <levine@cs.wustl.edu>
+ * examples/ASX/Event_Server/Transceiver/transceiver.cpp: removed
+ specializations of ACE Guards because they're in libGateway.
+ Thanks to Joey Zhu <joey.zhu@wcom.com> for reporting this problem.
+
* examples/ASX/Event_Server/Transceiver/{Makefile,transceiver.cpp}:
added template specializations to transceiver.cpp so that it no
longer needs to be linked with libGateway.
@@ -22,24 +72,6 @@ Fri May 02 08:14:30 1997 David L. Levine <levine@cs.wustl.edu>
* tests/Conn_Test.cpp: changed some fprintf print specifiers to avoid
g++ warnings about printing pointer values.
-Thu May 1 10:16:34 1997 Douglas C. Schmidt <schmidt@flamenco.cs.wustl.edu>
-
- * ace/config-osf1-4.0.h: Added
-
- #define ACE_LACKS_IOSTREAM_FX
- #define ACE_LACKS_LINEBUFFERED_STREAMBUF
- #define ACE_LACKS_SIGNED_CHAR
-
- Thanks to James CE Johnson <jjohnson@lads.com> for reporting
- this.
-
- * ace/Timer_{Wheel,Heap,List}_T.h: Fixed a typo in all these
- classes that was failing to put the keyword "class" after
- "friend." Also, replaced the use of the typedef with the
- expanded name of the class to work around problems with DEC
- C++. Thanks to James CE Johnson <jjohnson@lads.com> for
- reporting this.
-
Thu May 01 00:05:59 1997 <irfan@TWOSTEP>
* tests/Time_Service_Test.cpp (main): Made sure that the backing
diff --git a/ace/IOStream.cpp b/ace/IOStream.cpp
index 79e28154d74..92143eb727f 100644
--- a/ace/IOStream.cpp
+++ b/ace/IOStream.cpp
@@ -18,7 +18,7 @@
class myiostream : public iostream
{
public:
- myiostream& operator>>(String & s)
+ myiostream& operator>> (String & s)
{
...
}
@@ -28,19 +28,19 @@
int i;
String s;
- myiostream foo(...);
+ myiostream foo (...);
foo >> s;
// OK
- // invokes myiostream::operator>>(String&) returning myiostream&
+ // invokes myiostream::operator>> (String&) returning myiostream&
foo >> i;
// OK
- // invokes iostream::operator>>(int&) returning iostream&
+ // invokes iostream::operator>> (int&) returning iostream&
foo >> i >> s;
// BAD
- // invokes iostream::operator>>(int&) then iostream::operator>>(String&)
+ // invokes iostream::operator>> (int&) then iostream::operator>> (String&)
//
// What has happened is that the first >> is invoked on the base class and returns
// a reference to iostream. The second >> has no idea of the ACE_IOStream and
@@ -52,12 +52,12 @@
class myiostream : public iostream
{
public:
- myiostream& operator>>(int & i)
+ myiostream& operator>> (int & i)
{
- return((myiostream&)iostream::operator>>(i));
+ return ((myiostream&)iostream::operator>> (i));
}
- myiostream& operator>>(String & s)
+ myiostream& operator>> (String & s)
{
...
}
@@ -67,41 +67,39 @@
int i;
String s;
- myiostream foo(...);
+ myiostream foo (...);
foo >> s;
// OK
- // invokes myiostream::operator>>(String&) returning myiostream&
+ // invokes myiostream::operator>> (String&) returning myiostream&
foo >> i;
// OK
- // invokes myiostream::operator>>(int&) returning myiostream&
+ // invokes myiostream::operator>> (int&) returning myiostream&
foo >> i >> s;
// OK
- // Because you provided operator>>(int&) in class myiostream, that
+ // Because you provided operator>> (int&) in class myiostream, that
// function will be invoked by the first >>. Since it returns
// a myiostream&, the second >> will be invoked as desired. */
-///////////////////////////////////////////////////////////////////////////
-
-#if ! defined( ACE_IOSTREAM_BUILDING_TEMPLATE )
+#if ! defined (ACE_IOSTREAM_BUILDING_TEMPLATE)
ACE_Time_Value *
-ACE_Streambuf_T::recv_timeout( ACE_Time_Value * tv )
+ACE_Streambuf_T::recv_timeout (ACE_Time_Value * tv)
{
- ACE_Time_Value * rval = recv_timeout_;
- if( tv )
- {
- recv_timeout_value_ = *tv;
- recv_timeout_ = &recv_timeout_value_;
- }
- else
- recv_timeout_ = NULL;
+ ACE_Time_Value * rval = recv_timeout_;
+ if (tv)
+ {
+ recv_timeout_value_ = *tv;
+ recv_timeout_ = &recv_timeout_value_;
+ }
+ else
+ recv_timeout_ = NULL;
- return rval;
+ return rval;
}
int
@@ -110,7 +108,7 @@ ACE_Streambuf_T::underflow (void)
// If input mode is not set, any attempt to read from the stream is
// a failure.
- if (!(mode_ & ios::in))
+ if (! (mode_ & ios::in))
return EOF;
// If base () is empty then this is the first time any get/put
@@ -172,7 +170,7 @@ ACE_Streambuf_T::underflow (void)
//
setp (0, 0);
- // Like the case where base () is false, we now point base()
+ // Like the case where base () is false, we now point base ()
// to use our private get buffer.
setb (this->eback_saved_,
@@ -227,7 +225,7 @@ int
ACE_Streambuf_T::overflow (int c)
{
// Check to see if output is allowed at all.
- if (!(mode_ & ios::out))
+ if (! (mode_ & ios::out))
return EOF;
// First invokation of a get or put function
@@ -339,26 +337,26 @@ ACE_Streambuf_T::sync (void)
int
ACE_Streambuf_T::flushbuf (void)
{
- // pptr() is one character beyond the last character put
- // into the buffer. pbase() points to the beginning of
- // the put buffer. Unless pptr() is greater than pbase()
+ // pptr () is one character beyond the last character put
+ // into the buffer. pbase () points to the beginning of
+ // the put buffer. Unless pptr () is greater than pbase ()
// there is nothing to be sent to the peer.
//
- if( pptr() <= pbase() )
+ if (pptr () <= pbase ())
return 0;
// 4/12/97 -- JCEJ
// Kludge!!!
// If the remote side shuts down the connection, an attempt to
- // send() to the remote will result in the message 'Broken Pipe'
+ // send () to the remote will result in the message 'Broken Pipe'
// I think this is an OS message, I've tracked it down to the
// ACE_OS::write () function. That's the last one to be called
// before the message. I can only test this on Linux though, so
// I don't know how other systems will react.
//
- // To get around this gracefully, I do a PEEK recv() with an
- // immediate (nearly) timeout. recv() is much more graceful
- // on it's failure. If we get -1 from recv() not due to timeout
+ // To get around this gracefully, I do a PEEK recv () with an
+ // immediate (nearly) timeout. recv () is much more graceful
+ // on it's failure. If we get -1 from recv () not due to timeout
// then we know we're SOL.
//
// Q: Is 'errno' threadsafe? Should the section below be a
@@ -366,12 +364,12 @@ ACE_Streambuf_T::flushbuf (void)
//
//
// char tbuf[1];
- // ACE_Time_Value to(0,1);
- // if( this->recv( tbuf, 1, MSG_PEEK, &to ) == -1 )
+ // ACE_Time_Value to (0,1);
+ // if (this->recv (tbuf, 1, MSG_PEEK, &to) == -1)
// {
- // if( errno != ETIME )
+ // if (errno != ETIME)
// {
- // perror("OOPS preparing to send to peer");
+ // perror ("OOPS preparing to send to peer");
// return EOF;
// }
// }
@@ -385,7 +383,7 @@ ACE_Streambuf_T::flushbuf (void)
// data as there is waiting. send guarantees that all
// of the data will be sent or an error will be returned.
//
- if( this->send( pbase(), pptr() - pbase() ) == -1 )
+ if (this->send (pbase (), pptr () - pbase ()) == -1)
{
return EOF;
}
@@ -399,15 +397,15 @@ ACE_Streambuf_T::flushbuf (void)
}
int
-ACE_Streambuf_T::get_one_byte ( void )
+ACE_Streambuf_T::get_one_byte (void)
{
// The recv function will return immediately if there is no data
// waiting. So, we use recv_n to wait for exactly one byte to come
// from the peer. Later, we can use recv to see if there is
- // anything else in the buffer. (Ok, we could use flags to tell it
+ // anything else in the buffer. (Ok, we could use flags to tell it
// to block but I like this better.)
- if( this->recv_n( base(), 1, MSG_PEEK, recv_timeout_ ) != 1 )
+ if (this->recv_n (base (), 1, MSG_PEEK, recv_timeout_) != 1)
return EOF;
return 1;
@@ -421,13 +419,13 @@ ACE_Streambuf_T::fillbuf (void)
// Invoke recv_n to get exactly one byte from the remote. This
// will block until something shows up.
//
- if( get_one_byte() == EOF )
+ if (get_one_byte () == EOF)
return EOF;
// Now, get whatever else may be in the buffer. This will return if
// there is nothing in the buffer.
- int bc = this->recv ( base(), blen(), recv_timeout_ );
+ int bc = this->recv (base (), blen (), recv_timeout_);
// recv will give us -1 if there was a problem. If there was
// nothing waiting to be read, it will give us 0. That isn't an
@@ -438,7 +436,7 @@ ACE_Streambuf_T::fillbuf (void)
// Move the get pointer to reflect the number of bytes we just read.
- setg (base (), base (), base () + bc );
+ setg (base (), base (), base () + bc);
// Return the byte-read-count including the one from <get_one_byte>
return bc;
@@ -449,32 +447,32 @@ ACE_Streambuf_T::ACE_Streambuf_T (u_int streambuf_size, int io_mode)
put_mode_ (2),
mode_ (io_mode),
streambuf_size_ (streambuf_size),
- recv_timeout_(NULL)
+ recv_timeout_ (NULL)
{
- (void)reset_get_buffer();
- (void)reset_put_buffer();
+ (void)reset_get_buffer ();
+ (void)reset_put_buffer ();
}
-u_int ACE_Streambuf_T::streambuf_size(void)
+u_int ACE_Streambuf_T::streambuf_size (void)
{
return streambuf_size_;
}
-u_int ACE_Streambuf_T::get_waiting(void)
+u_int ACE_Streambuf_T::get_waiting (void)
// Return the number of bytes not yet gotten.
// eback + get_waiting = gptr
{
return this->gptr_saved_ - this->eback_saved_;
}
-u_int ACE_Streambuf_T::get_avail(void)
+u_int ACE_Streambuf_T::get_avail (void)
// Return the number of bytes in the get area (includes some already gotten);
// eback + get_avail = egptr
{
return this->egptr_saved_ - this->eback_saved_;
}
-u_int ACE_Streambuf_T::put_avail(void)
+u_int ACE_Streambuf_T::put_avail (void)
// Return the number of bytes to be 'put' onto the stream media.
// pbase + put_avail = pptr
{
@@ -482,14 +480,14 @@ u_int ACE_Streambuf_T::put_avail(void)
}
char *
-ACE_Streambuf_T::reset_get_buffer(char * newBuffer, u_int _streambuf_size, u_int _gptr, u_int _egptr )
+ACE_Streambuf_T::reset_get_buffer (char * newBuffer, u_int _streambuf_size, u_int _gptr, u_int _egptr)
//
// Typical usage:
//
-// u_int newGptr = otherStream->get_waiting();
-// u_int newEgptr = otherStream->get_avail();
-// char * newBuf = otherStream->reset_get_buffer();
-// char * oldgetbuf = myStream->reset_get_buffer( newBuf, otherStream->streambuf_size(), newGptr, newEgptr );
+// u_int newGptr = otherStream->get_waiting ();
+// u_int newEgptr = otherStream->get_avail ();
+// char * newBuf = otherStream->reset_get_buffer ();
+// char * oldgetbuf = myStream->reset_get_buffer (newBuf, otherStream->streambuf_size (), newGptr, newEgptr);
//
// 'myStream' now has the get buffer of 'otherStream' and can use it in any way.
// 'otherStream' now has a new, empty get buffer.
@@ -513,9 +511,9 @@ ACE_Streambuf_T::reset_get_buffer(char * newBuffer, u_int _streambuf_size, u_int
// the variables below. Initially, they all point to the beginning
// of our read-dedicated buffer.
//
- if( newBuffer )
+ if (newBuffer)
{
- if( streambuf_size_ != _streambuf_size )
+ if (streambuf_size_ != _streambuf_size)
return NULL;
this->eback_saved_ = newBuffer;
}
@@ -531,19 +529,19 @@ ACE_Streambuf_T::reset_get_buffer(char * newBuffer, u_int _streambuf_size, u_int
// invoked on the first get operation.
setg (0, 0, 0);
- reset_base();
+ reset_base ();
return rval;
}
char *
-ACE_Streambuf_T::reset_put_buffer(char * newBuffer, u_int _streambuf_size, u_int _pptr )
+ACE_Streambuf_T::reset_put_buffer (char * newBuffer, u_int _streambuf_size, u_int _pptr)
//
// Typical usage:
//
-// u_int newPptr = otherStream->put_avail();
-// char * newBuf = otherStream->reset_put_buffer();
-// char * oldputbuf = otherStream->reset_put_buffer( newBuf, otherStream->streambuf_size(), newPptr );
+// u_int newPptr = otherStream->put_avail ();
+// char * newBuf = otherStream->reset_put_buffer ();
+// char * oldputbuf = otherStream->reset_put_buffer (newBuf, otherStream->streambuf_size (), newPptr);
//
{
char * rval = this->pbase_saved_;
@@ -561,9 +559,9 @@ ACE_Streambuf_T::reset_put_buffer(char * newBuffer, u_int _streambuf_size, u_int
// Again to switch quickly between modes, we keep copies of
// these three pointers.
//
- if( newBuffer )
+ if (newBuffer)
{
- if( streambuf_size_ != _streambuf_size )
+ if (streambuf_size_ != _streambuf_size)
return NULL;
this->pbase_saved_ = newBuffer;
}
@@ -579,13 +577,13 @@ ACE_Streambuf_T::reset_put_buffer(char * newBuffer, u_int _streambuf_size, u_int
// to any put operator.
setp (0, 0);
- reset_base();
+ reset_base ();
return rval;
}
void
-ACE_Streambuf_T::reset_base(void)
+ACE_Streambuf_T::reset_base (void)
{
// Until we experience the first get or put operation, we do not
// know what our current IO mode is.
@@ -619,8 +617,8 @@ ACE_Streambuf_T::~ACE_Streambuf_T (void)
// streambuf objects, we can be input-only, output-only or both.
template <class STREAM>
-ACE_Streambuf<STREAM>::ACE_Streambuf (STREAM *peer, u_int streambuf_size, int io_mode )
- : ACE_Streambuf_T( streambuf_size, io_mode ), peer_ (peer)
+ACE_Streambuf<STREAM>::ACE_Streambuf (STREAM *peer, u_int streambuf_size, int io_mode)
+ : ACE_Streambuf_T (streambuf_size, io_mode), peer_ (peer)
{
// A streambuf allows for unbuffered IO where every character is
// read as requested and written as provided. To me, this seems
@@ -649,15 +647,15 @@ ACE_Streambuf<STREAM>::ACE_Streambuf (STREAM *peer, u_int streambuf_size, int io
// STREAM.
template <class STREAM>
-ACE_IOStream<STREAM>::ACE_IOStream ( STREAM & stream, u_int streambuf_size )
- : iostream(streambuf_ = new ACE_Streambuf<STREAM> ((STREAM *) this, streambuf_size)),
- STREAM(stream)
+ACE_IOStream<STREAM>::ACE_IOStream (STREAM & stream, u_int streambuf_size)
+ : iostream (streambuf_ = new ACE_Streambuf<STREAM> ((STREAM *) this, streambuf_size)),
+ STREAM (stream)
{
}
template <class STREAM>
-ACE_IOStream<STREAM>::ACE_IOStream ( u_int streambuf_size )
- : iostream(streambuf_ = new ACE_Streambuf<STREAM> ((STREAM *) this, streambuf_size))
+ACE_IOStream<STREAM>::ACE_IOStream (u_int streambuf_size)
+ : iostream (streambuf_ = new ACE_Streambuf<STREAM> ((STREAM *) this, streambuf_size))
{
}
@@ -680,14 +678,14 @@ ACE_IOStream<STREAM>::close (void)
}
template <class STREAM> ACE_IOStream<STREAM> &
-ACE_IOStream<STREAM>::operator>>(ACE_Time_Value *& tv )
+ACE_IOStream<STREAM>::operator>> (ACE_Time_Value *& tv)
{
- ACE_Time_Value * old_tv = this->streambuf_->recv_timeout(tv);
+ ACE_Time_Value * old_tv = this->streambuf_->recv_timeout (tv);
tv = old_tv;
return *this;
}
-#if (defined(__GNUC__) && !defined (CHORUS)) || defined(ACE_WIN32)
+#if (ACE_HAS_STRING_CLASS)
// A simple string operator. The base iostream has 'em for char* but
// that isn't always the best thing for a String. If we don't provide
@@ -696,7 +694,7 @@ ACE_IOStream<STREAM>::operator>>(ACE_Time_Value *& tv )
template <class STREAM> ACE_IOStream<STREAM> &
ACE_IOStream<STREAM>::operator>> (ACE_IOStream_String & v)
{
- if( ipfx0() )
+ if (ipfx0 ())
{
char c;
iostream::operator>> (c);
@@ -705,7 +703,7 @@ ACE_IOStream<STREAM>::operator>> (ACE_IOStream_String & v)
continue;
}
- isfx();
+ isfx ();
return *this;
}
@@ -714,19 +712,17 @@ ACE_IOStream<STREAM>::operator>> (ACE_IOStream_String & v)
template <class STREAM> ACE_IOStream<STREAM> &
ACE_IOStream<STREAM>::operator<< (ACE_IOStream_String & v)
{
- if( opfx() )
- {
+ if (opfx ())
+ {
#if defined (ACE_WIN32)
- for( int i = 0 ; i < v.GetLength() ; ++i )
+ for (int i = 0 ; i < v.GetLength () ; ++i)
#else
- for( u_int i = 0 ; i < (u_int)v.length() ; ++i )
+ for (u_int i = 0 ; i < (u_int) v.length () ; ++i)
#endif
- {
- this->put( v[i] );
- }
- }
+ this->put (v[i]);
+ }
- osfx();
+ osfx ();
return *this;
}
@@ -739,38 +735,31 @@ ACE_IOStream<STREAM>::operator<< (ACE_IOStream_String & v)
template <class STREAM> ACE_IOStream<STREAM> &
ACE_IOStream<STREAM>::operator>> (QuotedString & str)
{
- if( ipfx0() )
- {
- char c;
-
- if( !(*this >> c) ) // eat space up to the first char
- {
- // this->set(ios::eofbit|ios::failbit);
- return *this;
- }
+ if (ipfx0 ())
+ {
+ char c;
- str = ""; // Initialize the string
+ if (! (*this >> c)) // eat space up to the first char
+ // this->set (ios::eofbit|ios::failbit);
+ return *this;
- // if we don't have a quote, append until we see space
- if (c != '"')
- {
- for( str = c ; this->get(c) && !isspace(c) ; str += c );
- }
- else
- {
- for( ; this->get(c) && c != '"' ; str += c )
- {
- if (c == '\\')
- {
- this->get(c);
- if (c != '"')
- str += '\\';
- }
- }
- }
- }
+ str = ""; // Initialize the string
+
+ // if we don't have a quote, append until we see space
+ if (c != '"')
+ for (str = c ; this->get (c) && !isspace (c) ; str += c)
+ continue;
+ else
+ for (; this->get (c) && c != '"' ; str += c)
+ if (c == '\\')
+ {
+ this->get (c);
+ if (c != '"')
+ str += '\\';
+ }
+ }
- isfx();
+ isfx ();
return *this;
}
@@ -778,27 +767,23 @@ ACE_IOStream<STREAM>::operator>> (QuotedString & str)
template <class STREAM> ACE_IOStream<STREAM> &
ACE_IOStream<STREAM>::operator<< (QuotedString & str)
{
- if( opfx() )
+ if (opfx ())
{
- this->put('"');
- for( u_int i = 0 ; i < str.length() ; ++i )
+ this->put ('"');
+ for (u_int i = 0 ; i < str.length () ; ++i)
{
- if( str[i] == '"' )
- this->put('\\');
- this->put( str[i] );
+ if (str[i] == '"')
+ this->put ('\\');
+ this->put (str[i]);
}
- this->put('"');
+ this->put ('"');
}
- osfx();
+ osfx ();
return *this;
}
-
-///////////////////////////////////////////////////////////////////////////
-
-
-#endif /* (__GNUC__ && ! CHORUS) || ACE_WIN32 */
+#endif /* ACE_HAS_STRING_CLASS */
#endif /* ACE_IOSTREAM_C */
diff --git a/ace/IOStream.h b/ace/IOStream.h
index 86865241ef6..0b1ef15ce28 100644
--- a/ace/IOStream.h
+++ b/ace/IOStream.h
@@ -83,49 +83,42 @@
#include "ace/INET_Addr.h"
#include <iomanip.h>
-#if defined (__GNUC__) && !defined (CHORUS)
-#include <String.h>
-typedef String ACE_IOStream_String;
-#endif /* __GNUC__ */
-//
+#if defined (ACE_HAS_STRING_CLASS)
#if defined (ACE_WIN32)
typedef CString ACE_IOStream_String;
+#else
+#include <String.h>
+typedef String ACE_IOStream_String;
#endif /* ACE_WIN32 */
+#endif /* ACE_HAS_STRING_CLASS */
-#if defined(__GNUC__) || defined(ACE_WIN32)
+#if defined (ACE_HAS_STRING_CLASS)
class QuotedString : public ACE_IOStream_String
{
public:
- inline QuotedString() {
- *this = "";
- }
- inline QuotedString(const char * c) {
- *this = ACE_IOStream_String(c);
- }
- inline QuotedString(const ACE_IOStream_String& s) {
- *this = s;
- }
- inline QuotedString& operator=(const ACE_IOStream_String& s) {
- return (QuotedString&) ACE_IOStream_String::operator=(s);
- }
- inline QuotedString & operator =(const char c) {
- return (QuotedString&) ACE_IOStream_String::operator=(c);
- }
- inline QuotedString & operator =(const char* c) {
- return (QuotedString&) ACE_IOStream_String::operator=(c);
- }
- inline bool operator < (const QuotedString& s) const {
- return *(ACE_IOStream_String *)this < (ACE_IOStream_String)s;
- }
+ inline QuotedString (void) { *this = ""; }
+ inline QuotedString (const char * c) { *this = ACE_IOStream_String (c); }
+ inline QuotedString (const ACE_IOStream_String& s) { *this = s; }
+ inline QuotedString& operator= (const ACE_IOStream_String& s)
+ {
+ return (QuotedString&) ACE_IOStream_String::operator= (s);
+ }
+ inline QuotedString & operator = (const char c) {
+ return (QuotedString&) ACE_IOStream_String::operator= (c);
+ }
+ inline QuotedString & operator = (const char* c) {
+ return (QuotedString&) ACE_IOStream_String::operator= (c);
+ }
+ inline bool operator < (const QuotedString& s) const {
+ return * (ACE_IOStream_String *)this < (ACE_IOStream_String)s;
+ }
#if defined (ACE_WIN32)
- inline int length(void) {
- return this->GetLength();
- }
-#endif
+ inline int length (void) { return this->GetLength (); }
+#endif /* ACE_WIN32 */
};
-#endif /* __GNUC__ || ACE_WIN32 */
+#endif /* ACE_HAS_STRING_CLASS */
///////////////////////////////////////////////////////////////////////////
@@ -517,7 +510,7 @@ public:
// The only ambituity in the multiple inheritance is the close()
// function.
-#if defined(__GNUC__) || defined(ACE_WIN32)
+#if defined (ACE_HAS_STRING_CLASS)
virtual ACE_IOStream & operator>>(ACE_IOStream_String & v);
// A simple string operator. The base iostream has 'em for char*
// but that isn't always the best thing for a String. If we don't
@@ -532,7 +525,7 @@ public:
virtual ACE_IOStream & operator<<(QuotedString &v);
// The converse of the QuotedString put operator.
-#endif /* __GNUC__ || ACE_WIN32 */
+#endif /* ACE_HAS_STRING_CLASS */
// = Using the macros to provide get/set operators.
#if !defined (ACE_LACKS_IOSTREAM_SETGET)
diff --git a/ace/Map_Manager.cpp b/ace/Map_Manager.cpp
index 96639b94df5..3bb1a9f7d2f 100644
--- a/ace/Map_Manager.cpp
+++ b/ace/Map_Manager.cpp
@@ -17,6 +17,12 @@
ACE_ALLOC_HOOK_DEFINE(ACE_Map_Entry)
template <class EXT_ID, class INT_ID> void
+ACE_Map_Entry<EXT_ID, INT_ID>::~ACE_Map_Entry (void)
+{
+ // No-op just to keep some compilers happy...
+}
+
+template <class EXT_ID, class INT_ID> void
ACE_Map_Entry<EXT_ID, INT_ID>::dump (void) const
{
ACE_TRACE ("ACE_Map_Entry<EXT_ID, INT_ID>::dump");
diff --git a/ace/Map_Manager.h b/ace/Map_Manager.h
index 23190077974..c93c0768fc9 100644
--- a/ace/Map_Manager.h
+++ b/ace/Map_Manager.h
@@ -36,6 +36,10 @@ struct ACE_Map_Entry
int is_free_;
// Keeps track whether entry is free or not.
+ ~ACE_Map_Entry (void);
+ // We need this destructor to keep some compilers from complaining.
+ // It's just a no-op, however.
+
void dump (void) const;
// Dump the state of an object.
diff --git a/ace/README b/ace/README
index 37d6a8dbada..57a5c48af03 100644
--- a/ace/README
+++ b/ace/README
@@ -113,6 +113,7 @@ ACE_HAS_STREAMS Platform supports STREAMS
ACE_HAS_STREAM_PIPES Platform supports STREAM pipes
ACE_HAS_STRERROR Compiler/platform supports strerror ()
ACE_HAS_STRICT Use the STRICT compilation mode on Win32.
+ACE_HAS_STRING_CLASS Platform/Compiler supports a String class (e.g., GNU or Win32).
ACE_HAS_STRUCT_NETDB_DATA Compiler/platform has strange hostent API for socket *_r() calls
ACE_HAS_STRUCT_PROTOENT_DATA Compiler/platform has strange protoent API for socket *_r() calls
ACE_HAS_SUNOS4_GETTIMEOFDAY SunOS 4 style prototype.
diff --git a/ace/Set.cpp b/ace/Set.cpp
index 716d526fd57..c6c3bfcbd4a 100644
--- a/ace/Set.cpp
+++ b/ace/Set.cpp
@@ -47,6 +47,30 @@ ACE_Fixed_Set<T, SIZE>::~ACE_Fixed_Set (void)
}
template <class T, size_t SIZE>
+ACE_Fixed_Set<T, SIZE>::ACE_Fixed_Set (const ACE_Fixed_Set<T, SIZE> &fs)
+ : cur_size_ (fs.cur_size_)
+{
+ ACE_TRACE ("ACE_Fixed_Set<T>::ACE_Fixed_Set");
+
+ for (size_t i = 0; i < this->cur_size_; i++)
+ this->search_structure_[i] = fs.search_structure_[i];
+}
+
+template <class T, size_t SIZE> void
+ACE_Fixed_Set<T, SIZE>::operator = (const ACE_Fixed_Set<T, SIZE> &fs)
+{
+ ACE_TRACE ("ACE_Fixed_Set<T>::operator =");
+
+ if (this == &fs)
+ return;
+
+ this->cur_size_ = bs.cur_size_;
+
+ for (size_t i = 0; i < this->cur_size_; i++)
+ this->search_structure_[i] = fs.search_structure_[i];
+}
+
+template <class T, size_t SIZE>
ACE_Fixed_Set<T, SIZE>::ACE_Fixed_Set (void)
: cur_size_ (0),
max_size_ (SIZE)
@@ -71,6 +95,23 @@ ACE_Fixed_Set<T, SIZE>::find (const T &item) const
}
template <class T, size_t SIZE> int
+ACE_Fixed_Set<T, SIZE>::find (T &item, size_t index) const
+{
+ ACE_TRACE ("ACE_Fixed_Set<T, SIZE>::find");
+
+ if (index > this->cur_size_
+ || this->search_structure_[index].is_free_ != 0)
+ return 0;
+ else
+ {
+ item = this->search_structure_[i].item_;
+ return 1;
+ }
+
+ return 0;
+}
+
+template <class T, size_t SIZE> int
ACE_Fixed_Set<T, SIZE>::insert (const T &item)
{
@@ -215,6 +256,40 @@ ACE_Bounded_Set<T>::ACE_Bounded_Set (void)
}
template <class T>
+ACE_Bounded_Set<T>::ACE_Bounded_Set (const ACE_Bounded_Set<T> &bs)
+ : cur_size_ (bs.cur_size_),
+ max_size_ (bs.max_size_)
+{
+ ACE_TRACE ("ACE_Bounded_Set<T>::ACE_Bounded_Set");
+
+ ACE_NEW (this->search_structure_, ACE_Bounded_Set<T>::Search_Structure[this->max_size_]);
+
+ for (size_t i = 0; i < this->cur_size_; i++)
+ this->search_structure_[i] = bs.search_structure_[i];
+}
+
+template <class T> void
+ACE_Bounded_Set<T>::operator = (const ACE_Bounded_Set<T> &bs)
+{
+ ACE_TRACE ("ACE_Bounded_Set<T>::operator =");
+
+ if (this == &bs)
+ return;
+ else if (this->max_size_ < bs.cur_size_)
+ {
+ delete [] this->search_structure_;
+ ACE_NEW (this->search_structure_,
+ ACE_Bounded_Set<T>::Search_Structure[bs.cur_size_]);
+ this->max_size_ = bs.cur_size_;
+ }
+
+ this->cur_size_ = bs.cur_size_;
+
+ for (size_t i = 0; i < this->cur_size_; i++)
+ this->search_structure_[i] = bs.search_structure_[i];
+}
+
+template <class T>
ACE_Bounded_Set<T>::ACE_Bounded_Set (size_t size)
: cur_size_ (0),
max_size_ (size)
@@ -241,6 +316,23 @@ ACE_Bounded_Set<T>::find (const T &item) const
}
template <class T> int
+ACE_Bounded_Set<T>::find (T &item, size_t index) const
+{
+ ACE_TRACE ("ACE_Bounded_Set<T>::find");
+
+ if (index > this->cur_size_
+ || this->search_structure_[index].is_free_ != 0)
+ return 0;
+ else
+ {
+ item = this->search_structure_[i].item_;
+ return 1;
+ }
+
+ return 0;
+}
+
+template <class T> int
ACE_Bounded_Set<T>::insert (const T &item)
{
ACE_TRACE ("ACE_Bounded_Set<T>::insert");
@@ -402,38 +494,135 @@ ACE_Unbounded_Set<T>::dump (void) const
// ACE_TRACE ("ACE_Unbounded_Set<T>::dump");
}
-template <class T>
-ACE_Unbounded_Set<T>::~ACE_Unbounded_Set (void)
+template <class T> void
+ACE_Unbounded_Set<T>::copy_nodes (const ACE_Unbounded_Set<T> &us)
{
-// ACE_TRACE ("ACE_Unbounded_Set<T>::~ACE_Unbounded_Set");
- while (this->head_ != 0)
+ for (ACE_Set_Node<T> *curr = us.head_->next_;
+ curr != us.head_;
+ curr = curr->next_)
+ this->insert_tail (curr->item_);
+}
+
+template <class T> void
+ACE_Unbounded_Set<T>::delete_nodes (void)
+{
+ ACE_Set_Node<T> *curr = this->head_->next_;
+
+ // Keep looking until we've hit the dummy node.
+
+ while (curr != this->head_)
{
- ACE_Set_Node<T> *temp = this->head_;
- this->head_ = this->head_->next_;
- this->cur_size_--;
+ ACE_Set_Node<T> *temp = curr;
+ curr = curr->next_;
delete temp;
+ this->cur_size_--;
}
+
+ // Reset the list to be a circular list with just a dummy node.
+ this->head_->next_ = this->head_;
+}
+
+template <class T>
+ACE_Unbounded_Set<T>::~ACE_Unbounded_Set (void)
+{
+// ACE_TRACE ("ACE_Unbounded_Set<T>::~ACE_Unbounded_Set");
+
+ this->delete_nodes ();
+
+ // Delete the dummy node.
+ delete this->head_;
+ this->head_ = 0;
}
template <class T> int
ACE_Unbounded_Set<T>::find (const T &item) const
{
// ACE_TRACE ("ACE_Unbounded_Set<T>::find");
- for (ACE_Set_Node<T> *temp = this->head_;
- temp != 0;
- temp = temp->next_)
- if (temp->item_ == item)
- return 1;
+ // Set <item> into the dummy node.
+ this->head_->item_ = item;
+
+ ACE_Set_Node<T> *temp = this->head_->next_;
+
+ // Keep looping until we find the item.
+ while (!(temp->item_ == item))
+ temp = temp->next_;
- return 0;
+ // If we found the dummy node then it's not really there, otherwise,
+ // it is there.
+ return temp == this->head_ ? 0 : 1;
+}
+
+template <class T> int
+ACE_Unbounded_Set<T>::find (T &item, size_t index) const
+{
+ ACE_TRACE ("ACE_Unbounded_Set<T>::find");
+
+ ACE_Set_Node<T> *curr = this->head_->next_;
+
+ size_t i;
+
+ for (i = 0; i < this->cur_size_; i++)
+ {
+ if (i == index)
+ break;
+
+ curr = curr->next_;
+ }
+
+ if (i < this->cur_size_)
+ {
+ ACE_ASSERT (curr != this->head_);
+ item = curr->item_;
+ return 1;
+ }
+ else
+ return 0;
}
template <class T>
ACE_Unbounded_Set<T>::ACE_Unbounded_Set (void)
- : head_ (0),
+ : head_ (new ACE_Set_Node<T>),
cur_size_ (0)
{
// ACE_TRACE ("ACE_Unbounded_Set<T>::ACE_Unbounded_Set");
+ // Make the list circular by pointing it back to itself.
+ this->head_->next_ = this->head_;
+}
+
+template <class T>
+ACE_Unbounded_Set<T>::ACE_Unbounded_Set (const ACE_Unbounded_Set<T> &us)
+ : head_ (new ACE_Set_Node<T>),
+ cur_size_ (us.cur_size_)
+{
+ ACE_TRACE ("ACE_Unbounded_Set<T>::ACE_Unbounded_Set");
+
+ this->head_->next_ = this->head_;
+ this->copy_nodes (us);
+}
+
+template <class T> void
+ACE_Unbounded_Set<T>::operator = (const ACE_Unbounded_Set<T> &us)
+{
+ ACE_TRACE ("ACE_Unbounded_Set<T>::operator =");
+
+ if (this == &us)
+ return;
+
+ this->delete_nodes ();
+ this->copy_nodes (us);
+}
+
+// Insert the new node at the tail of the list.
+
+template <class T> int
+ACE_Unbounded_Set<T>::insert_tail (const T &item)
+{
+// ACE_TRACE ("ACE_Unbounded_Set<T>::insert");
+ ACE_Set_Node<T> *temp;
+ ACE_NEW_RETURN (temp, ACE_Set_Node<T> (item, this->head_->next_), -1);
+ this->head_->next_ = temp;
+ this->cur_size_++;
+ return 0;
}
template <class T> int
@@ -441,11 +630,7 @@ ACE_Unbounded_Set<T>::insert (const T &item)
{
// ACE_TRACE ("ACE_Unbounded_Set<T>::insert");
if (this->find (item) == 0)
- {
- ACE_NEW_RETURN (this->head_, ACE_Set_Node<T> (item, this->head_), -1);
- this->cur_size_++;
- return 0;
- }
+ return this->insert_tail (item);
else
return 1;
}
@@ -454,29 +639,26 @@ template <class T> int
ACE_Unbounded_Set<T>::remove (const T &item)
{
// ACE_TRACE ("ACE_Unbounded_Set<T>::remove");
- ACE_Set_Node<T> *prev = 0;
- ACE_Set_Node<T> *temp;
- for (temp = this->head_;
- temp != 0;
- temp = temp->next_)
- {
- if (temp->item_ == item)
- break;
- prev = temp;
- }
+ // Insert the item to be founded into the dummy node.
+ this->head_->item_ = item;
- if (temp == 0)
- return 0;
- else if (prev == 0) // Deleting the front of the list.
- this->head_ = this->head_->next_;
- else
- prev->next_ = temp->next_;
+ ACE_Set_Node<T> *curr = this->head_;
- this->cur_size_--;
+ while (!(curr->next_->item_ == item))
+ curr = curr->next_;
- delete temp;
- return 1;
+ if (curr->next_ == this->head_)
+ return 0; // Item was not found.
+ else
+ {
+ ACE_Set_Node<T> *temp = curr->next_;
+ // Skip over the node that we're deleting.
+ curr->next_ = temp->next_;
+ this->cur_size_--;
+ delete temp;
+ return 1;
+ }
}
ACE_ALLOC_HOOK_DEFINE(ACE_Unbounded_Set_Iterator)
@@ -489,7 +671,8 @@ ACE_Unbounded_Set_Iterator<T>::dump (void) const
template <class T>
ACE_Unbounded_Set_Iterator<T>::ACE_Unbounded_Set_Iterator (ACE_Unbounded_Set<T> &s)
- : current_ (s.head_)
+ : current_ (s.head_->next_),
+ set_ (s)
{
// ACE_TRACE ("ACE_Unbounded_Set_Iterator<T>::ACE_Unbounded_Set_Iterator");
}
@@ -506,7 +689,7 @@ template <class T> int
ACE_Unbounded_Set_Iterator<T>::next (T *&item)
{
// ACE_TRACE ("ACE_Unbounded_Set_Iterator<T>::next");
- if (this->current_ == 0)
+ if (this->current_ == this->set_.head_)
return 0;
else
{
diff --git a/ace/Set.h b/ace/Set.h
index 3621a5acb40..2c1f5a563da 100644
--- a/ace/Set.h
+++ b/ace/Set.h
@@ -51,6 +51,10 @@ public:
private:
ACE_Set_Node<T> *current_;
+ // Pointer to the current node in the iteration.
+
+ ACE_Unbounded_Set<T> &set_;
+ // Pointer to the set we're iterating over.
};
// Forward declaration (use the "Cheshire Cat" approach to information
@@ -71,14 +75,27 @@ friend class ACE_Unbounded_Set_Iterator<T>;
public:
// = Initialization and termination methods.
ACE_Unbounded_Set (void);
+ // Constructor.
+
+ ACE_Unbounded_Set (const ACE_Unbounded_Set<T> &);
+ // Copy constructor.
+
+ void operator= (const ACE_Unbounded_Set<T> &);
+ // Assignment operator.
+
~ACE_Unbounded_Set (void);
-
+ // Destructor.
+
// = Classic unordered set operations.
int insert (const T &new_item);
// Insert <new_item> into the set (doesn't allow duplicates).
// Returns -1 if failures occur, 1 if item is already present, else
// 0.
+ int insert_tail (const T &new_item);
+ // Insert <new_item> into the set at the tail. Returns -1 if
+ // failures occur else 0.
+
int remove (const T &item);
// Remove first occurrence of <item> from the set. Returns 1 if
// it removes the item, 0 if it can't find the item, and -1 if a
@@ -87,6 +104,10 @@ public:
int find (const T &item) const;
// Return first occurrence of <item> from the set.
// Returns 0 if can't find, else 1.
+
+ int find (T &item, size_t index) const;
+ // Find the <index>th element in the set. Returns 0 if the element
+ // isn't in the range <0..size()>, else 1.
size_t size (void) const;
// Size of the set.
@@ -98,6 +119,12 @@ public:
// Declare the dynamic allocation hooks.
private:
+ void delete_nodes (void);
+ // Delete all the nodes in the Set.
+
+ void copy_nodes (const ACE_Unbounded_Set<T> &);
+ // Copy nodes into this set.
+
ACE_Set_Node<T> *head_;
// Head of the linked list of Nodes.
@@ -158,8 +185,20 @@ friend class ACE_Fixed_Set_Iterator<T, SIZE>;
public:
// = Initialization and termination methods.
ACE_Fixed_Set (void);
+ // Constructor.
+
+ ACE_Fixed_Set (size_t size);
+ // Constructor.
+
+ ACE_Fixed_Set (const ACE_Fixed_Set<T, SIZE> &);
+ // Copy constructor.
+
+ void operator = (const ACE_Fixed_Set<T, SIZE> &);
+ // Assignment operator.
+
~ACE_Fixed_Set (void);
-
+ // Destructor.
+
// = Classic unordered set operations.
int insert (const T &new_item);
// Insert <new_item> into the set (doesn't allow duplicates).
@@ -175,6 +214,10 @@ public:
// Return first occurrence of <item> from the set.
// Returns 0 if can't find, else 1.
+ int find (T &item, size_t index) const;
+ // Find the <index>th element in the set. Returns 0 if the element
+ // isn't in the range <0..size()>, else 1.
+
size_t size (void) const;
// Size of the set.
@@ -260,9 +303,20 @@ public:
// = Initialization and termination methods.
ACE_Bounded_Set (void);
+ // Constructor.
+
ACE_Bounded_Set (size_t size);
+ // Constructor.
+
+ ACE_Bounded_Set (const ACE_Bounded_Set<T> &);
+ // Copy constructor.
+
+ void operator= (const ACE_Bounded_Set<T> &);
+ // Assignment operator.
+
~ACE_Bounded_Set (void);
-
+ // Destructor
+
// = Classic unordered set operations.
int insert (const T &new_item);
// Insert <new_item> into the set (doesn't allow duplicates).
@@ -278,6 +332,10 @@ public:
// Return first occurrence of <item> from the set.
// Returns 0 if can't find, else 1.
+ int find (T &item, size_t index) const;
+ // Find the <index>th element in the set. Returns 0 if the element
+ // isn't in the range <0..size()>, else 1.
+
size_t size (void) const;
// Size of the set.
diff --git a/ace/config-hpux-10.x-g++.h b/ace/config-hpux-10.x-g++.h
index 5eef7dc7869..e15296019d1 100644
--- a/ace/config-hpux-10.x-g++.h
+++ b/ace/config-hpux-10.x-g++.h
@@ -14,6 +14,7 @@
#define ACE_HAS_BROKEN_CONVERSIONS
#define ACE_HAS_STREAMS
+#define ACE_HAS_STRING_CLASS
// They forgot a const in the prototype of putmsg and putpmsg...
#define ACE_LACKS_CONST_STRBUF_PTR
diff --git a/ace/config-irix5.3-g++.h b/ace/config-irix5.3-g++.h
index b76fe08eae5..d0b9e036827 100644
--- a/ace/config-irix5.3-g++.h
+++ b/ace/config-irix5.3-g++.h
@@ -9,7 +9,7 @@
// Platform supports getpagesize() call.
#define ACE_HAS_GETPAGESIZE
-
+#define ACE_HAS_STRING_CLASS
#define IRIX5
#define ACE_HAS_SIGWAIT
diff --git a/ace/config-mvs.h b/ace/config-mvs.h
index 7771322f871..468fa33cd05 100644
--- a/ace/config-mvs.h
+++ b/ace/config-mvs.h
@@ -1,30 +1,11 @@
/* -*- C++ -*- */
// $Id$
-// The following configuration file is designed to work for MVS with
-// OpenEdition.
+// Config file for MVS with OpenEdition
#if !defined (ACE_CONFIG_H)
#define ACE_CONFIG_H
-// log is defined as a macro on MVS in math.h. :-(
-#if defined (log)
-#undef log
-#endif /* log */
-
-#define ACE_LACKS_LINEBUFFERED_STREAMBUF
-
-#define ACE_LACKS_TCP_H
-
-// Platform supports getpagesize() call.
-#define ACE_HAS_GETPAGESIZE
-
-// highest possible errno.
-#define ERRMAX __sys_nerr
-
-// Platform does not define sys_nerr
-#define ACE_LACKS_SYS_NERR
-
// The following #defines are hacks to get around things
// that seem to be missing or different in MVS land
#define MAXPATHLEN 1024 /* sys/param.h not on MVS */
@@ -33,175 +14,81 @@
#define howmany __howmany /* MVS uses different names than most others */
#define fd_mask __fd_mask
#define MAXNAMLEN __DIR_NAME_MAX
+#define ERRMAX __sys_nerr
+#if defined (log) /* log is a macro in math.h */
+#undef log /* conflicts with log function in ACE */
+#endif /* log */
-// Compiler must see template source.
-#define ACE_TEMPLATES_REQUIRE_SOURCE
+// See the README file in this directory
+// for a description of the following ACE_ macros
-// Compiler/platform uses macro for ctime
+#if __COMPILER_VER__ >= 0x21020000 /* OS/390 r2 or higher */
+ #define ACE_HAS_4_4BSD_SENDMSG_RECVMSG
+#endif
#define ACE_HAS_BROKEN_CTIME
-
-// Compiler requires extern "C" functions for signals.
-#define ACE_HAS_SIG_C_FUNC
-
-// Prototypes for both signal() and struct sigaction are consistent.
#define ACE_HAS_CONSISTENT_SIGNAL_PROTOTYPES
-
-// Compiler/platform has correctly prototyped header files.
#define ACE_HAS_CPLUSPLUS_HEADERS
-
-// Compiler supports the getrusage() system call
+#define ACE_HAS_GETPAGESIZE
#define ACE_HAS_GETRUSAGE
-
-// The pthread_create() routine *must* take extern C functions.
-#define ACE_HAS_THR_C_FUNC
-
-// The pthread_keycreate() routine *must* take extern C functions.
-#define ACE_HAS_THR_C_DEST
-
-// The rusage_t structure has only two fields
#define ACE_HAS_LIMITED_RUSAGE_T
-
-// Platform supports recvmsg and sendmsg.
#define ACE_HAS_MSG
-
-// sigwait() takes on argument
#define ACE_HAS_ONEARG_SIGWAIT
-
-// Compiler/platform supports poll().
#define ACE_HAS_POLL
-
-// Platform supports POSIX O_NONBLOCK semantics.
#define ACE_HAS_POSIX_NONBLOCK
-
-// Platform supports POSIX timers via timestruc_t.
#define ACE_HAS_POSIX_TIME
-
-// Platform supports POSIX threads
#define ACE_HAS_PTHREADS
-
-#define ACE_LACKS_RWLOCK_T
-
-// Platform has pthread_condattr_setkind_np()
#define ACE_HAS_PTHREAD_CONDATTR_SETKIND_NP
-
-// Platform has pthread_mutexattr_setkind_np()
-#define ACE_HAS_PTHREAD_MUTEXATTR_SETKIND_NP
-
-// Platform has pthread_equal()
+#define ACE_HAS_PTHREAD_DSTATE_PTR
#define ACE_HAS_PTHREAD_EQUAL
-
-// Platform has struct pthread_t
-#define ACE_HAS_PTHREAD_T
-
-// pthread_getspecific() takes a data pointer for 2nd argument
#define ACE_HAS_PTHREAD_GETSPECIFIC_DATAPTR
-
-// pthread_attr_setdetachstate() takes pointer to 2nd arg
-#define ACE_HAS_PTHREAD_DSTATE_PTR
-
-// Platform has sigwait prototype
+#define ACE_HAS_PTHREAD_MUTEXATTR_SETKIND_NP
+#define ACE_HAS_PTHREAD_T
+#define ACE_HAS_SIGINFO_T
#define ACE_HAS_SIGWAIT
-
-// Compiler/platform defines the sig_atomic_t typedef
#define ACE_HAS_SIG_ATOMIC_T
-
-// Compiler has siginfo_t typedef
-#define ACE_HAS_SIGINFO_T
-
-// Platform supports inet_addr len field.
+#define ACE_HAS_SIG_C_FUNC
#define ACE_HAS_SIN_LEN
-
-// Compiler uses size_t rather than in for socket lenghts
#define ACE_HAS_SIZET_SOCKET_LEN
-
-// Compiler supports the ssize_t typedef.
#define ACE_HAS_SSIZE_T
-
-// Compiler/platform supports strerror ().
#define ACE_HAS_STRERROR
-
-// Platform has strings.h
#define ACE_HAS_STRINGS
-
-// Platform supports System V IPC
#define ACE_HAS_SYSV_IPC
-
-// Platform/compiler supports timezone * as second parameter to gettimeofday()
-#define ACE_HAS_TIMEZONE_GETTIMEOFDAY
-
-// Platform supports threads
#define ACE_HAS_THREADS
-
-// Platform/compiler has thread-specific storage
#define ACE_HAS_THREAD_SPECIFIC_STORAGE
-
-// Platform has the sid_t type
+#define ACE_HAS_THR_C_DEST
+#define ACE_HAS_THR_C_FUNC
#define ACE_HAS_TID_T
-
-// Platform has utime.h
+#define ACE_HAS_TIMEZONE_GETTIMEOFDAY
#define ACE_HAS_UTIME
-
-// Platform uses void * arg 1 for mmap()
#define ACE_HAS_VOIDPTR_MMAP
-
-// Platform uses void * arg 4 for setsockopt()
#define ACE_HAS_VOIDPTR_SOCKOPT
-
-// Platform requrires pthread_yield() to take a NULL
#define ACE_HAS_YIELD_VOID_PTR
-
-// Platform doesn't have pthread_condattr_setpshared()
#define ACE_LACKS_CONDATTR_PSHARED
-
-// iostream header lacks ipfx (), isfx (), etc., declarations
#define ACE_LACKS_IOSTREAM_FX
-
-// Platform doesn't have pthread_key_delete()
#define ACE_LACKS_KEYDELETE
-
-// Platform doesn't have madvise()
+#define ACE_LACKS_LINEBUFFERED_STREAMBUF
#define ACE_LACKS_MADVISE
-
-// Platform doesn't have malloc.h
#define ACE_LACKS_MALLOC_H
-
-// Platform doesn't have struct msgbuf_t
#define ACE_LACKS_MSGBUF_T
-
-// Platform doesn't have <sys/param.h>
#define ACE_LACKS_PARAM_H
-
-// Platform lacks pthread_sigaction
#define ACE_LACKS_PTHREAD_THR_SIGSETMASK
-
-// Platform doesn't have pthread_setsched() and friends.
+#define ACE_LACKS_RWLOCK_T
#define ACE_LACKS_SETSCHED
-
-// Compiler doesn't have <siginfo.h>
#define ACE_LACKS_SIGINFO_H
-
-// Platform doesn't define struct strrecvfd
#define ACE_LACKS_STRRECVFD
-
-// Platform doesn't have pthread_attr_setscope()
+#define ACE_LACKS_SYS_NERR
+#define ACE_LACKS_TCP_H
#define ACE_LACKS_THREAD_PROCESS_SCOPING
-
-// Platform doesn't have pthread_attr_setstackaddr()
#define ACE_LACKS_THREAD_STACK_ADDR
-
-// Compiler doesn't have <ucontext.h>
#define ACE_LACKS_UCONTEXT_H
-
-// Compile using multi-threaded libraries
#define ACE_MT_SAFE
-
#define ACE_NEEDS_DEV_IO_CONVERSION
-
-// <time.h> doesn't automatically #include <sys/time.h>
#define ACE_NEEDS_SYSTIME_H
+#define ACE_TEMPLATES_REQUIRE_SOURCE
#if !defined (ACE_NTRACE)
#define ACE_NTRACE 1
#endif /* ACE_NTRACE */
#endif /* ACE_CONFIG_H */
+
diff --git a/ace/config-osf1-4.0-g++.h b/ace/config-osf1-4.0-g++.h
index d7f3b9c699e..de39278a23a 100644
--- a/ace/config-osf1-4.0-g++.h
+++ b/ace/config-osf1-4.0-g++.h
@@ -23,6 +23,7 @@
// support...
#define ACE_TEMPLATES_REQUIRE_SPECIALIZATION
+#define ACE_HAS_STRING_CLASS
// Compiler's template mechanism must see source code (i.e., .C
// files).
#define ACE_TEMPLATES_REQUIRE_SOURCE
diff --git a/ace/config-osf1-4.0.h b/ace/config-osf1-4.0.h
index aa81be4c4da..8ab712eb3df 100644
--- a/ace/config-osf1-4.0.h
+++ b/ace/config-osf1-4.0.h
@@ -19,6 +19,7 @@
// functionality is lost? Platform supports <sys/procfs.h>
//#define ACE_HAS_PROC_FS
+#define ACE_HAS_STRING_CLASS
#define ACE_LACKS_IOSTREAM_FX
#define ACE_LACKS_LINEBUFFERED_STREAMBUF
#define ACE_LACKS_SIGNED_CHAR
diff --git a/ace/config-sunos4-g++.h b/ace/config-sunos4-g++.h
index e385e4644fd..e6c765a2f71 100644
--- a/ace/config-sunos4-g++.h
+++ b/ace/config-sunos4-g++.h
@@ -12,7 +12,7 @@
// Platform supports pread() and pwrite()
#define ACE_HAS_P_READ_WRITE
-
+#define ACE_HAS_STRING_CLASS
#define ACE_NEEDS_SYSTIME_H
#define ACE_HAS_CHARPTR_SPRINTF
#define ACE_HAS_UNION_WAIT
diff --git a/ace/config-sunos5.4-g++.h b/ace/config-sunos5.4-g++.h
index a731843d794..da23743d5be 100644
--- a/ace/config-sunos5.4-g++.h
+++ b/ace/config-sunos5.4-g++.h
@@ -11,6 +11,7 @@
#define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */
+#define ACE_HAS_STRING_CLASS
#define ACE_HAS_TEMPLATE_SPECIALIZATION
// Platform supports pread() and pwrite()
diff --git a/ace/config-sunos5.5-g++.h b/ace/config-sunos5.5-g++.h
index d8ef2d603f1..529e4f94b8d 100644
--- a/ace/config-sunos5.5-g++.h
+++ b/ace/config-sunos5.5-g++.h
@@ -11,6 +11,7 @@
#define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */
+#define ACE_HAS_STRING_CLASS
#define ACE_HAS_TEMPLATE_SPECIALIZATION
// ACE_HAS_EXCEPTIONS requires -fhandle-exceptions, but that gives
diff --git a/ace/config-unixware-2.01-g++.h b/ace/config-unixware-2.01-g++.h
index 2a65ad56589..6b1ee6adf36 100644
--- a/ace/config-unixware-2.01-g++.h
+++ b/ace/config-unixware-2.01-g++.h
@@ -12,6 +12,7 @@
#define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */
+#define ACE_HAS_STRING_CLASS
#define ACE_LACKS_STRCASECMP
#define ACE_HAS_SIZET_SOCKET_LEN
#define ACE_HAS_AUTOMATIC_INIT_FINI
diff --git a/ace/config-vxworks5.2-g++.h b/ace/config-vxworks5.2-g++.h
index 4a6f2299733..8e92855bc86 100644
--- a/ace/config-vxworks5.2-g++.h
+++ b/ace/config-vxworks5.2-g++.h
@@ -11,6 +11,7 @@
#define __ACE_INLINE__
#endif /* ! __ACE_INLINE__ */
+#define ACE_HAS_STRING_CLASS
#define ACE_LACKS_COND_T
#define ACE_LACKS_EXEC
#define ACE_LACKS_KEY_T
diff --git a/apps/Gateway/Gateway/proxy_config b/apps/Gateway/Gateway/proxy_config
index df034f543b1..e0784e4038e 100644
--- a/apps/Gateway/Gateway/proxy_config
+++ b/apps/Gateway/Gateway/proxy_config
@@ -35,7 +35,7 @@
# ID Port Role Timeout Port
# ---- -------- ------ ------ ---------- ----- --------
1 merengue.cs 10010 S 32 0 1
- 2 mambo.cs 10010 C 32 0 1
+ 2 tango.cs 10010 C 32 0 1
# 3 mambo.cs 10002 C 32 0 1
# 4 lambada.cs 10002 C 32 0 1
# 5 lambada.cs 10002 C 32 0 1