This is an automated email from the ASF dual-hosted git repository. kgiusti pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/master by this push: new e29257a DISPATCH-1389: export qd_buffer_t access methods inline e29257a is described below commit e29257a8b2ec21831ad60d563f78df0d7e4c793a Author: Kenneth Giusti <kgiu...@apache.org> AuthorDate: Mon Jul 22 11:13:50 2019 -0400 DISPATCH-1389: export qd_buffer_t access methods inline The qd_buffer_t structure is defined in the header file as a public structure. There are several trivial methods that are called frequently enough that there is a benefit to performance by inlining them. This closes #544 --- include/qpid/dispatch/buffer.h | 47 +++++++++++++++++++++++++++------- src/buffer.c | 57 ------------------------------------------ 2 files changed, 38 insertions(+), 66 deletions(-) diff --git a/include/qpid/dispatch/buffer.h b/include/qpid/dispatch/buffer.h index 79a4a2a..4de49bd 100644 --- a/include/qpid/dispatch/buffer.h +++ b/include/qpid/dispatch/buffer.h @@ -64,28 +64,40 @@ void qd_buffer_free(qd_buffer_t *buf); * @param buf A pointer to an allocated buffer * @return A pointer to the first octet in the buffer */ -unsigned char *qd_buffer_base(qd_buffer_t *buf); +static inline unsigned char *qd_buffer_base(const qd_buffer_t *buf) +{ + return (unsigned char*) &buf[1]; +} /** * Return a pointer to the first unused byte in the buffer. * @param buf A pointer to an allocated buffer * @return A pointer to the first free octet in the buffer, the insert point for new data. */ -unsigned char *qd_buffer_cursor(qd_buffer_t *buf); +static inline unsigned char *qd_buffer_cursor(const qd_buffer_t *buf) +{ + return ((unsigned char*) &buf[1]) + buf->size; +} /** * Return remaining capacity at end of buffer. * @param buf A pointer to an allocated buffer * @return The number of octets in the buffer's free space, how many octets may be inserted. */ -size_t qd_buffer_capacity(qd_buffer_t *buf); +static inline size_t qd_buffer_capacity(const qd_buffer_t *buf) +{ + return BUFFER_SIZE - buf->size; +} /** * Return the size of the buffers data content. * @param buf A pointer to an allocated buffer * @return The number of octets of data in the buffer */ -size_t qd_buffer_size(qd_buffer_t *buf); +static inline size_t qd_buffer_size(const qd_buffer_t *buf) +{ + return buf->size; +} /** * Notify the buffer that octets have been inserted at the buffer's cursor. This will advance the @@ -94,7 +106,11 @@ size_t qd_buffer_size(qd_buffer_t *buf); * @param buf A pointer to an allocated buffer * @param len The number of octets that have been appended to the buffer */ -void qd_buffer_insert(qd_buffer_t *buf, size_t len); +static inline void qd_buffer_insert(qd_buffer_t *buf, size_t len) +{ + buf->size += len; + assert(buf->size <= BUFFER_SIZE); +} /** * Create a new buffer list by cloning an existing one. @@ -125,26 +141,39 @@ unsigned int qd_buffer_list_length(const qd_buffer_list_t *list); * Set the fanout value on the buffer. * @return the _old_ count before updating */ -uint32_t qd_buffer_set_fanout(qd_buffer_t *buf, uint32_t value); +static inline uint32_t qd_buffer_set_fanout(qd_buffer_t *buf, uint32_t value) +{ + return sys_atomic_set(&buf->bfanout, value); +} /** * Increase the fanout by 1. How many receivers should this buffer be sent to. * @return the _old_ count (pre increment) */ -uint32_t qd_buffer_inc_fanout(qd_buffer_t *buf); +static inline uint32_t qd_buffer_inc_fanout(qd_buffer_t *buf) +{ + return sys_atomic_inc(&buf->bfanout); +} /** * Decrease the fanout by one * @return the _old_ count (pre decrement) */ -uint32_t qd_buffer_dec_fanout(qd_buffer_t *buf); +static inline uint32_t qd_buffer_dec_fanout(qd_buffer_t *buf) +{ + return sys_atomic_dec(&buf->bfanout); +} /** * Advance the buffer by len. Does not manipulate the contents of the buffer * @param buf A pointer to an allocated buffer * @param len The number of octets that by which the buffer should be advanced. */ -unsigned char *qd_buffer_at(qd_buffer_t *buf, size_t len); +static inline unsigned char *qd_buffer_at(const qd_buffer_t *buf, size_t len) +{ + assert(len <= BUFFER_SIZE); + return ((unsigned char*) &buf[1]) + len; +} ///@} diff --git a/src/buffer.c b/src/buffer.c index a127953..40af6c2 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -58,63 +58,6 @@ void qd_buffer_free(qd_buffer_t *buf) } -unsigned char *qd_buffer_base(qd_buffer_t *buf) -{ - return (unsigned char*) &buf[1]; -} - - -unsigned char *qd_buffer_cursor(qd_buffer_t *buf) -{ - return ((unsigned char*) &buf[1]) + buf->size; -} - - -size_t qd_buffer_capacity(qd_buffer_t *buf) -{ - return BUFFER_SIZE - buf->size; -} - - -size_t qd_buffer_size(qd_buffer_t *buf) -{ - return buf->size; -} - - -void qd_buffer_insert(qd_buffer_t *buf, size_t len) -{ - buf->size += len; - assert(buf->size <= BUFFER_SIZE); -} - - -uint32_t qd_buffer_set_fanout(qd_buffer_t *buf, uint32_t value) -{ - return sys_atomic_set(&buf->bfanout, value); -} - - -uint32_t qd_buffer_inc_fanout(qd_buffer_t *buf) -{ - return sys_atomic_inc(&buf->bfanout); -} - - -uint32_t qd_buffer_dec_fanout(qd_buffer_t *buf) -{ - return sys_atomic_dec(&buf->bfanout); -} - - -unsigned char *qd_buffer_at(qd_buffer_t *buf, size_t len) -{ - // If the len is greater than the buffer size, we might point to some garbage. - // We dont want that to happen, so do the assert. - assert(len <= BUFFER_SIZE); - return ((unsigned char*) &buf[1]) + len; -} - unsigned int qd_buffer_list_clone(qd_buffer_list_t *dst, const qd_buffer_list_t *src) { uint32_t len = 0; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org