+
+               /** Retrieves the minimum number of bytes stored in a particular buffer. This value is computed
+                *  by entering an atomic lock on the buffer while the IN and OUT locations are fetched, so that
+                *  the buffer cannot be modified while the computation takes place. This value should be cached
+                *  when reading out the contents of the buffer, so that as small a time as possible is spent
+                *  in an atomic lock.
+                *
+                *  \note The value returned by this function is guaranteed to only be the minimum number of bytes
+                *        stored in the given buffer; this value may change as other threads write new data and so
+                *        the returned number should be used only to determine how many successive reads may safely
+                *        be performed on the buffer.
+                *
+                *  \param[in] Buffer  Pointer to a ring buffer structure whose count is to be computed
+                */
+               static inline RingBuff_Count_t RingBuffer_GetCount(RingBuff_t* const Buffer)
+               {
+                       RingBuff_Count_t Count;
+
+                       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+                       {
+                               Count = Buffer->Count;
+                       }
+
+                       return Count;
+               }
+
+               /** Atomically determines if the specified ring buffer contains any free space. This should
+                *  be tested before storing data to the buffer, to ensure that no data is lost due to a
+                *  buffer overrun.
+                *
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to insert into
+                *
+                *  \return Boolean true if the buffer contains no free space, false otherwise
+                */
+               static inline bool RingBuffer_IsFull(RingBuff_t* const Buffer)
+               {
+                       return (RingBuffer_GetCount(Buffer) == BUFFER_SIZE);
+               }
+
+               /** Atomically determines if the specified ring buffer contains any data. This should
+                *  be tested before removing data from the buffer, to ensure that the buffer does not
+                *  underflow.
+                *
+                *  If the data is to be removed in a loop, store the total number of bytes stored in the
+                *  buffer (via a call to the \ref RingBuffer_GetCount() function) in a temporary variable
+                *  to reduce the time spent in atomicity locks.
+                *
+                *  \param[in,out] Buffer  Pointer to a ring buffer structure to insert into
+                *
+                *  \return Boolean true if the buffer contains no free space, false otherwise
+                */
+               static inline bool RingBuffer_IsEmpty(RingBuff_t* const Buffer)
+               {
+                       return (RingBuffer_GetCount(Buffer) == 0);
+               }
+