diff options
Diffstat (limited to 'dep/ACE_wrappers/ace/ACE.h')
-rw-r--r-- | dep/ACE_wrappers/ace/ACE.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/dep/ACE_wrappers/ace/ACE.h b/dep/ACE_wrappers/ace/ACE.h index 15c05da00de..ea7a3fa02e4 100644 --- a/dep/ACE_wrappers/ace/ACE.h +++ b/dep/ACE_wrappers/ace/ACE.h @@ -1,4 +1,5 @@ // -*- C++ -*- + //============================================================================= /** * @file ACE.h @@ -15,13 +16,18 @@ * @author Douglas C. Schmidt <schmidt@cs.wustl.edu> */ //============================================================================= + #ifndef ACE_ACE_H #define ACE_ACE_H + #include /**/ "ace/pre.h" + #include "ace/config-lite.h" + #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ + #include "ace/OS_NS_math.h" #include "ace/Flag_Manip.h" #include "ace/Handle_Ops.h" @@ -29,16 +35,20 @@ #include "ace/Init_ACE.h" #include "ace/Sock_Connect.h" #include "ace/Default_Constants.h" + #if defined (ACE_EXPORT_MACRO) # undef ACE_EXPORT_MACRO #endif #define ACE_EXPORT_MACRO ACE_Export + // Open versioned namespace, if enabled by the user. ACE_BEGIN_VERSIONED_NAMESPACE_DECL + // Forward declarations. class ACE_Time_Value; class ACE_Message_Block; class ACE_Handle_Set; + /** * @namespace ACE * @@ -53,26 +63,35 @@ namespace ACE // = ACE version information. /// e.g., the "5" in ACE 5.1.12. extern ACE_Export u_int major_version (void); + /// e.g., the "1" in ACE 5.1.12. extern ACE_Export u_int minor_version (void); + /// e.g., the "12" in ACE 5.1.12. /// Returns 0 for "stable" (non-beta) releases. extern ACE_Export u_int beta_version (void); + // = C++ compiler version information. /// E.g., the "SunPro C++" in SunPro C++ 4.32.0 extern ACE_Export const ACE_TCHAR * compiler_name (void); + /// E.g., the "4" in SunPro C++ 4.32.0 extern ACE_Export u_int compiler_major_version (void); + /// E.g., the "32" in SunPro C++ 4.32.0 extern ACE_Export u_int compiler_minor_version (void); + /// E.g., the "0" in SunPro C++ 4.32.0 extern ACE_Export u_int compiler_beta_version (void); + /// Check if error indicates the process being out of handles (file /// descriptors). extern ACE_Export int out_of_handles (int error); + /// Simple wildcard matching function supporting '*' and '?' /// return true if string s matches pattern. extern ACE_Export bool wild_match(const char* s, const char* pattern, bool case_sensitive = true); + /** * @name I/O operations * @@ -127,21 +146,27 @@ namespace ACE size_t len, int flags, const ACE_Time_Value *timeout = 0); + #if defined (ACE_HAS_TLI) + extern ACE_Export ssize_t t_rcv (ACE_HANDLE handle, void *buf, size_t len, int *flags, const ACE_Time_Value *timeout = 0); + #endif /* ACE_HAS_TLI */ + extern ACE_Export ssize_t recv (ACE_HANDLE handle, void *buf, size_t len, const ACE_Time_Value *timeout = 0); + extern ACE_Export ssize_t recvmsg (ACE_HANDLE handle, struct msghdr *msg, int flags, const ACE_Time_Value *timeout = 0); + extern ACE_Export ssize_t recvfrom (ACE_HANDLE handle, char *buf, int len, @@ -149,6 +174,7 @@ namespace ACE struct sockaddr *addr, int *addrlen, const ACE_Time_Value *timeout = 0); + ACE_NAMESPACE_INLINE_FUNCTION ssize_t recv_n (ACE_HANDLE handle, void *buf, @@ -156,7 +182,9 @@ namespace ACE int flags, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + #if defined (ACE_HAS_TLI) + ACE_NAMESPACE_INLINE_FUNCTION ssize_t t_rcv_n (ACE_HANDLE handle, void *buf, @@ -164,13 +192,16 @@ namespace ACE int *flags, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + #endif /* ACE_HAS_TLI */ + ACE_NAMESPACE_INLINE_FUNCTION ssize_t recv_n (ACE_HANDLE handle, void *buf, size_t len, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + /// Receive into a variable number of pieces. /** * Accepts a variable, caller-specified, number of pointer/length @@ -182,40 +213,50 @@ namespace ACE * @return -1 on error, else total number of bytes received. */ extern ACE_Export ssize_t recv (ACE_HANDLE handle, size_t n, ...); + extern ACE_Export ssize_t recvv (ACE_HANDLE handle, iovec *iov, int iovcnt, const ACE_Time_Value *timeout = 0); + ACE_NAMESPACE_INLINE_FUNCTION ssize_t recvv_n (ACE_HANDLE handle, iovec *iov, int iovcnt, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + extern ACE_Export ssize_t recv_n (ACE_HANDLE handle, ACE_Message_Block *message_block, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + extern ACE_Export ssize_t send (ACE_HANDLE handle, const void *buf, size_t len, int flags, const ACE_Time_Value *timeout = 0); + #if defined (ACE_HAS_TLI) + extern ACE_Export ssize_t t_snd (ACE_HANDLE handle, const void *buf, size_t len, int flags, const ACE_Time_Value *timeout = 0); + #endif /* ACE_HAS_TLI */ + extern ACE_Export ssize_t send (ACE_HANDLE handle, const void *buf, size_t len, const ACE_Time_Value *timeout = 0); + extern ACE_Export ssize_t sendmsg (ACE_HANDLE handle, const struct msghdr *msg, int flags, const ACE_Time_Value *timeout = 0); + extern ACE_Export ssize_t sendto (ACE_HANDLE handle, const char *buf, int len, @@ -223,6 +264,7 @@ namespace ACE const struct sockaddr *addr, int addrlen, const ACE_Time_Value *timeout = 0); + ACE_NAMESPACE_INLINE_FUNCTION ssize_t send_n (ACE_HANDLE handle, const void *buf, @@ -230,7 +272,9 @@ namespace ACE int flags, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + #if defined (ACE_HAS_TLI) + ACE_NAMESPACE_INLINE_FUNCTION ssize_t t_snd_n (ACE_HANDLE handle, const void *buf, @@ -238,25 +282,31 @@ namespace ACE int flags, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + #endif /* ACE_HAS_TLI */ + ACE_NAMESPACE_INLINE_FUNCTION ssize_t send_n (ACE_HANDLE handle, const void *buf, size_t len, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + /// Varargs variant. extern ACE_Export ssize_t send (ACE_HANDLE handle, size_t n, ...); + extern ACE_Export ssize_t sendv (ACE_HANDLE handle, const iovec *iov, int iovcnt, const ACE_Time_Value *timeout = 0); + ACE_NAMESPACE_INLINE_FUNCTION ssize_t sendv_n (ACE_HANDLE handle, const iovec *iov, int iovcnt, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + /// Send all the @a message_blocks chained through their @c next and /// @c cont pointers. This call uses the underlying OS gather-write /// operation to reduce the domain-crossing penalty. @@ -264,32 +314,39 @@ namespace ACE const ACE_Message_Block *message_block, const ACE_Time_Value *timeout = 0, size_t *bytes_transferred = 0); + // = File system I/O functions (these don't support timeouts). + ACE_NAMESPACE_INLINE_FUNCTION ssize_t read_n (ACE_HANDLE handle, void *buf, size_t len, size_t *bytes_transferred = 0); + ACE_NAMESPACE_INLINE_FUNCTION ssize_t write_n (ACE_HANDLE handle, const void *buf, size_t len, size_t *bytes_transferred = 0); + /// Write all the @a message_blocks chained through their @c next /// and @c cont pointers. This call uses the underlying OS /// gather-write operation to reduce the domain-crossing penalty. extern ACE_Export ssize_t write_n (ACE_HANDLE handle, const ACE_Message_Block *message_block, size_t *bytes_transferred = 0); + extern ACE_Export ssize_t readv_n (ACE_HANDLE handle, iovec *iov, int iovcnt, size_t *bytes_transferred = 0); + extern ACE_Export ssize_t writev_n (ACE_HANDLE handle, const iovec *iov, int iovcnt, size_t *bytes_transferred = 0); //@} + /** * Wait up to @a timeout amount of time to passively establish a * connection. This method doesn't perform the @c accept, it just @@ -298,6 +355,7 @@ namespace ACE extern ACE_Export int handle_timed_accept (ACE_HANDLE listener, ACE_Time_Value *timeout, int restart); + /** * Wait up to @a timeout amount of time to complete an actively * established non-blocking connection. If @a is_tli is non-0 then @@ -308,6 +366,7 @@ namespace ACE ACE_HANDLE listener, const ACE_Time_Value *timeout, int is_tli = 0); + /** * Reset the limit on the number of open handles. If @a new_limit * == -1 set the limit to the maximum allowable. Otherwise, set @@ -316,12 +375,14 @@ namespace ACE */ extern ACE_Export int set_handle_limit (int new_limit = -1, int increase_limit_only = 0); + /** * Returns the maximum number of open handles currently permitted in * this process. This maximum may be extended using * @c ACE::set_handle_limit. */ extern ACE_Export int max_handles (void); + // = String functions #if !defined (ACE_HAS_WINCE) /** @@ -332,28 +393,40 @@ namespace ACE */ extern ACE_Export ACE_TCHAR *strenvdup (const ACE_TCHAR *str); #endif /* ACE_HAS_WINCE */ + /// Returns a pointer to the "end" of the string, i.e., the character /// past the '\0'. extern ACE_Export const char *strend (const char *s); + /// This method is just like @c strdup, except that it uses /// @c operator @c new rather than @c malloc. If @a s is NULL /// returns NULL rather than segfaulting. extern ACE_Export char *strnew (const char *s); + /// Delete the memory allocated by @c strnew. ACE_NAMESPACE_INLINE_FUNCTION void strdelete (char *s); + /// Create a fresh new copy of @a str, up to @a n chars long. Uses /// @c ACE_OS::malloc to allocate the new string. extern ACE_Export char *strndup (const char *str, size_t n); + /// Create a fresh new copy of @a str, up to @a n chars long. Uses /// @c ACE_OS::malloc to allocate the new string. extern ACE_Export char *strnnew (const char *str, size_t n); + #if defined (ACE_HAS_WCHAR) extern ACE_Export const wchar_t *strend (const wchar_t *s); + extern ACE_Export wchar_t *strnew (const wchar_t *s); + ACE_NAMESPACE_INLINE_FUNCTION void strdelete (wchar_t *s); + extern ACE_Export wchar_t *strndup (const wchar_t *str, size_t n); + extern ACE_Export wchar_t *strnnew (const wchar_t *str, size_t n); + #endif /* ACE_HAS_WCHAR */ + /** * On Windows, determines if a specified pathname ends with ".exe" * (not case sensitive). If on Windows and there is no ".exe" suffix, @@ -371,6 +444,7 @@ namespace ACE * memory using delete []. */ extern ACE_Export const ACE_TCHAR *execname (const ACE_TCHAR *pathname); + /** * Returns the "basename" of a @a pathname separated by @a delim. * For instance, the basename of "/tmp/foo.cpp" is "foo.cpp" when @@ -379,6 +453,7 @@ namespace ACE extern ACE_Export const ACE_TCHAR *basename (const ACE_TCHAR *pathname, ACE_TCHAR delim = ACE_DIRECTORY_SEPARATOR_CHAR); + /** * Returns the "dirname" of a @a pathname. For instance, the * dirname of "/tmp/foo.cpp" is "/tmp" when @a delim is @a '/'. If @@ -388,6 +463,7 @@ namespace ACE extern ACE_Export const ACE_TCHAR *dirname (const ACE_TCHAR *pathname, ACE_TCHAR delim = ACE_DIRECTORY_SEPARATOR_CHAR); + /** * Returns the current timestamp in the form * "hour:minute:second:microsecond." The month, day, and year are @@ -402,6 +478,7 @@ namespace ACE extern ACE_Export ACE_TCHAR *timestamp (ACE_TCHAR date_and_time[], size_t time_len, bool return_pointer_to_first_digit = false); + /** * if @a avoid_zombies == 0 call @c ACE_OS::fork directly, else * create an orphan process that's inherited by the init process; @@ -414,6 +491,7 @@ namespace ACE extern ACE_Export pid_t fork ( const ACE_TCHAR *program_name = ACE_TEXT ("<unknown>"), int avoid_zombies = 0); + /** * Become a daemon process using the algorithm in Richard Stevens * "Advanced Programming in the UNIX Environment." If @@ -424,47 +502,63 @@ namespace ACE const ACE_TCHAR pathname[] = ACE_TEXT ("/"), bool close_all_handles = ACE_DEFAULT_CLOSE_ALL_HANDLES, const ACE_TCHAR program_name[] = ACE_TEXT ("<unknown>")); + // = Miscellaneous functions. /// Rounds the request to a multiple of the page size. extern ACE_Export size_t round_to_pagesize (size_t len); + /// Rounds the request to a multiple of the allocation granularity. extern ACE_Export size_t round_to_allocation_granularity (size_t len); + // @@ UNICODE what about buffer? /// Format buffer into printable format. This is useful for /// debugging. extern ACE_Export size_t format_hexdump (const char *buffer, size_t size, ACE_TCHAR *obuf, size_t obuf_sz); + /// Computes the hash value of {str} using the "Hash PJW" routine. extern ACE_Export u_long hash_pjw (const char *str); + /// Computes the hash value of {str} using the "Hash PJW" routine. extern ACE_Export u_long hash_pjw (const char *str, size_t len); + #if defined (ACE_HAS_WCHAR) /// Computes the hash value of {str} using the "Hash PJW" routine. extern ACE_Export u_long hash_pjw (const wchar_t *str); + /// Computes the hash value of {str} using the "Hash PJW" routine. extern ACE_Export u_long hash_pjw (const wchar_t *str, size_t len); #endif /* ACE_HAS_WCHAR */ + /// Computes CRC-CCITT for the string. extern ACE_Export ACE_UINT16 crc_ccitt(const char *str); + /// Computes CRC-CCITT for the buffer. extern ACE_Export ACE_UINT16 crc_ccitt(const void *buf, size_t len, ACE_UINT16 crc = 0); + /// Computes CRC-CCITT for the @ len iovec buffers. extern ACE_Export ACE_UINT16 crc_ccitt(const iovec *iov, int len, ACE_UINT16 crc = 0); + /// Computes the ISO 8802-3 standard 32 bits CRC for the string. extern ACE_Export ACE_UINT32 crc32 (const char *str); + /// Computes the ISO 8802-3 standard 32 bits CRC for the buffer. extern ACE_Export ACE_UINT32 crc32 (const void *buf, size_t len, ACE_UINT32 crc = 0); + /// Computes the ISO 8802-3 standard 32 bits CRC for the /// @ len iovec buffers. extern ACE_Export ACE_UINT32 crc32 (const iovec *iov, int len, ACE_UINT32 crc = 0); + /// Euclid's greatest common divisor algorithm. extern ACE_Export u_long gcd (u_long x, u_long y); + /// Calculates the minimum enclosing frame size for the given values. extern ACE_Export u_long minimum_frame_size (u_long period1, u_long period2); + /** * Function that can burn up noticeable CPU time: brute-force * determination of whether number @a n is prime. Returns 0 if @@ -476,23 +570,28 @@ namespace ACE extern ACE_Export u_long is_prime (const u_long n, const u_long min_factor, const u_long max_factor); + /// Map troublesome win32 errno values to values that standard C /// strerr function understands. Thank you Microsoft. extern ACE_Export int map_errno (int error); + /// Returns a string containing the error message corresponding to a /// WinSock error. This works around an omission in the Win32 API. /// @internal extern ACE_Export const ACE_TCHAR * sock_error (int error); + /// Determins whether the given error code corresponds to to a /// WinSock error. If so returns true, false otherwise. /// @internal extern ACE_Export bool is_sock_error (int error); + /** * Checks if process with {pid} is still alive. Returns 1 if it is * still alive, 0 if it isn't alive, and -1 if something weird * happened. */ extern ACE_Export int process_active (pid_t pid); + /** * Terminate the process abruptly with id @a pid. On Win32 platforms * this uses {TerminateProcess} and on POSIX platforms is uses @@ -502,6 +601,7 @@ namespace ACE * cleanup before it shuts down. */ extern ACE_Export int terminate_process (pid_t pid); + /** * This method uses process id and object pointer to come up with a * machine wide unique name. The process ID will provide uniqueness @@ -513,169 +613,213 @@ namespace ACE ACE_NAMESPACE_INLINE_FUNCTION void unique_name (const void *object, ACE_TCHAR *name, size_t length); + /// Computes the base 2 logarithm of {num}. ACE_NAMESPACE_INLINE_FUNCTION u_long log2 (u_long num); + /// Hex conversion utility. ACE_NAMESPACE_INLINE_FUNCTION ACE_TCHAR nibble2hex (u_int n); + /// Convert a hex character to its byte representation. ACE_NAMESPACE_INLINE_FUNCTION u_char hex2byte (ACE_TCHAR c); + // = Set/get the debug level. extern ACE_Export bool debug (void); extern ACE_Export void debug (bool onoff); + /// Wrapper facade for @c select that uses @c ACE_Handle_Sets. extern ACE_Export int select (int width, ACE_Handle_Set *readfds, ACE_Handle_Set *writefds = 0, ACE_Handle_Set *exceptfds = 0, const ACE_Time_Value *timeout = 0); + /// Wrapper facade for the most common use of @c select that uses /// @c ACE_Handle_Sets. extern ACE_Export int select (int width, ACE_Handle_Set &readfds, const ACE_Time_Value *timeout = 0); + /// Timed wait for handle to get read ready. ACE_NAMESPACE_INLINE_FUNCTION int handle_read_ready (ACE_HANDLE handle, const ACE_Time_Value *timeout); + /// Timed wait for handle to get write ready. ACE_NAMESPACE_INLINE_FUNCTION int handle_write_ready (ACE_HANDLE handle, const ACE_Time_Value *timeout); + /// Timed wait for handle to get exception ready. ACE_NAMESPACE_INLINE_FUNCTION int handle_exception_ready (ACE_HANDLE handle, const ACE_Time_Value *timeout); + /// Timed wait for handle to get read, write, or exception ready. extern ACE_Export int handle_ready (ACE_HANDLE handle, const ACE_Time_Value *timeout, int read_ready, int write_ready, int exception_ready); + /// Wait for @a timeout before proceeding to a @c recv operation. /// @a val keeps track of whether we're in non-blocking mode or /// not. extern ACE_Export int enter_recv_timedwait (ACE_HANDLE handle, const ACE_Time_Value *timeout, int &val); + /// Wait for @a timeout before proceeding to a @c send operation. /// @a val keeps track of whether we're in non-blocking mode or /// not. extern ACE_Export int enter_send_timedwait (ACE_HANDLE handle, const ACE_Time_Value* timeout, int &val); + /// This makes sure that @a handle is set into non-blocking mode. /// @a val keeps track of whether were in non-blocking mode or not. extern ACE_Export void record_and_set_non_blocking_mode (ACE_HANDLE handle, int &val); + /// Cleanup after a timed operation, restore the appropriate /// non-blocking status of @a handle. extern ACE_Export void restore_non_blocking_mode (ACE_HANDLE handle, int val); + // private: // These functions aren't meant to be used internally, so they are // not exported. + // // = Recv_n helpers // + ACE_NAMESPACE_INLINE_FUNCTION ssize_t recv_i (ACE_HANDLE handle, void *buf, size_t len); + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, void *buf, size_t len, int flags, size_t *bytes_transferred); + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, void *buf, size_t len, int flags, const ACE_Time_Value *timeout, size_t *bytes_transferred); + #if defined (ACE_HAS_TLI) + extern ACE_Export ssize_t t_rcv_n_i (ACE_HANDLE handle, void *buf, size_t len, int *flags, size_t *bytes_transferred); + extern ACE_Export ssize_t t_rcv_n_i (ACE_HANDLE handle, void *buf, size_t len, int *flags, const ACE_Time_Value *timeout, size_t *bytes_transferred); + #endif /* ACE_HAS_TLI */ + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, void *buf, size_t len, size_t *bytes_transferred); + extern ACE_Export ssize_t recv_n_i (ACE_HANDLE handle, void *buf, size_t len, const ACE_Time_Value *timeout, size_t *bytes_transferred); + extern ACE_Export ssize_t recvv_n_i (ACE_HANDLE handle, iovec *iov, int iovcnt, size_t *bytes_transferred); + extern ACE_Export ssize_t recvv_n_i (ACE_HANDLE handle, iovec *iov, int iovcnt, const ACE_Time_Value *timeout, size_t *bytes_transferred); + // // = Send_n helpers // + ACE_NAMESPACE_INLINE_FUNCTION ssize_t send_i (ACE_HANDLE handle, const void *buf, size_t len); + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, const void *buf, size_t len, int flags, size_t *bytes_transferred); + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, const void *buf, size_t len, int flags, const ACE_Time_Value *timeout, size_t *bytes_transferred); + #if defined (ACE_HAS_TLI) + extern ACE_Export ssize_t t_snd_n_i (ACE_HANDLE handle, const void *buf, size_t len, int flags, size_t *bytes_transferred); + extern ACE_Export ssize_t t_snd_n_i (ACE_HANDLE handle, const void *buf, size_t len, int flags, const ACE_Time_Value *timeout, size_t *bytes_transferred); + #endif /* ACE_HAS_TLI */ + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, const void *buf, size_t len, size_t *bytes_transferred); + extern ACE_Export ssize_t send_n_i (ACE_HANDLE handle, const void *buf, size_t len, const ACE_Time_Value *timeout, size_t *bytes_transferred); + extern ACE_Export ssize_t sendv_n_i (ACE_HANDLE handle, const iovec *iov, int iovcnt, size_t *bytes_transferred); + extern ACE_Export ssize_t sendv_n_i (ACE_HANDLE handle, const iovec *iov, int iovcnt, const ACE_Time_Value *timeout, size_t *bytes_transferred); + } + // Close versioned namespace, if enabled by the user. ACE_END_VERSIONED_NAMESPACE_DECL + #if defined (__ACE_INLINE__) #include "ace/ACE.inl" #endif /* __ACE_INLINE__ */ + #include /**/ "ace/post.h" + #endif /* ACE_ACE_H */ |