diff options
author | nxf32288 <ganesh.deva_1@nxp.com> | 2018-05-07 10:08:03 +0530 |
---|---|---|
committer | nxf24591 <nanjesh.s_1@nxp.com> | 2018-06-13 18:04:38 +0530 |
commit | 382a7c6e663e21f0363dadfd104883755f28776d (patch) | |
tree | d49400ebee47935778e394ef4d6cba9a90c50a36 /utils/include | |
parent | 21cdc5b3e87871c8cf1444a61f8c11e9ab2afb61 (diff) | |
download | android_vendor_nxp_opensource_external_libnfc-nci-382a7c6e663e21f0363dadfd104883755f28776d.tar.gz android_vendor_nxp_opensource_external_libnfc-nci-382a7c6e663e21f0363dadfd104883755f28776d.tar.bz2 android_vendor_nxp_opensource_external_libnfc-nci-382a7c6e663e21f0363dadfd104883755f28776d.zip |
Create libnfcutils static library and add native tests
First commit to establish native unit test framework and break out
independent modules into shared libraries to allow inclusing into unit
test binaries.
Diffstat (limited to 'utils/include')
-rw-r--r-- | utils/include/ringbuffer.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/utils/include/ringbuffer.h b/utils/include/ringbuffer.h new file mode 100644 index 0000000..d2c310a --- /dev/null +++ b/utils/include/ringbuffer.h @@ -0,0 +1,62 @@ +/****************************************************************************** + * + * Copyright (C) 2017 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#pragma once + +#include <stdint.h> + +typedef struct ringbuffer_t ringbuffer_t; + +// NOTE: +// None of the functions below are thread safe when it comes to accessing the +// *rb pointer. It is *NOT* possible to insert and pop/delete at the same time. +// Callers must protect the *rb pointer separately. + +// Create a ringbuffer with the specified size +// Returns NULL if memory allocation failed. Resulting pointer must be freed +// using |ringbuffer_free|. +ringbuffer_t* ringbuffer_init(const size_t size); + +// Frees the ringbuffer structure and buffer +// Save to call with NULL. +void ringbuffer_free(ringbuffer_t* rb); + +// Returns remaining buffer size +size_t ringbuffer_available(const ringbuffer_t* rb); + +// Returns size of data in buffer +size_t ringbuffer_size(const ringbuffer_t* rb); + +// Attempts to insert up to |length| bytes of data at |p| into the buffer +// Return actual number of bytes added. Can be less than |length| if buffer +// is full. +size_t ringbuffer_insert(ringbuffer_t* rb, const uint8_t* p, size_t length); + +// Peek |length| number of bytes from the ringbuffer, starting at |offset|, +// into the buffer |p|. Return the actual number of bytes peeked. Can be less +// than |length| if there is less than |length| data available. |offset| must +// be non-negative. +size_t ringbuffer_peek(const ringbuffer_t* rb, off_t offset, uint8_t* p, + size_t length); + +// Does the same as |ringbuffer_peek|, but also advances the ring buffer head +size_t ringbuffer_pop(ringbuffer_t* rb, uint8_t* p, size_t length); + +// Deletes |length| bytes from the ringbuffer starting from the head +// Return actual number of bytes deleted. +size_t ringbuffer_delete(ringbuffer_t* rb, size_t length); |