📄 membuffer.h
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000-2003 Intel Corporation // All rights reserved. //// Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: //// * Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // * Neither name of Intel Corporation nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission.// // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef GENLIB_UTIL_MEMBUFFER_H#define GENLIB_UTIL_MEMBUFFER_H#include <stdlib.h>#include "util.h"#define MINVAL( a, b ) ( (a) < (b) ? (a) : (b) )#define MAXVAL( a, b ) ( (a) > (b) ? (a) : (b) )// pointer to a chunk of memorytypedef struct // memptr{ char *buf; // start of memory (read/write) size_t length; // length of memory (read-only)} memptr;// maintains a block of dynamically allocated memory// note: Total length/capacity should not exceed MAX_INTtypedef struct // membuffer{ char *buf; // mem buffer; must not write // beyond buf[length-1] (read/write) size_t length; // length of buffer (read-only) size_t capacity; // total allocated memory (read-only) size_t size_inc; // used to increase size; MUST be > 0; (read/write) // default value of size_inc #define MEMBUF_DEF_SIZE_INC 5} membuffer;//--------------------------------------------------//////////////// functions ///////////////////////////--------------------------------------------------#ifdef __cplusplusextern "C" {#endif // __cplusplus/************************************************************************* Function : str_alloc** Parameters :* IN const char* str ; input string object* IN size_t str_len ; input string length** Description : Allocate memory and copy information from the input * string to the newly allocated memory.** Return : char* ;* Pointer to the newly allocated memory.* NULL if memory cannot be allocated.** Note :************************************************************************/char* str_alloc( IN const char* str, IN size_t str_len );/************************************************************************* Function : memptr_cmp** Parameters :* IN memptr* m ; input memory object* IN const char* s ; constatnt string for the memory object to be * compared with** Description : Compares characters of strings passed for number of * bytes. If equal for the number of bytes, the length of the bytes * determines which buffer is shorter.** Return : int ;* < 0 string1 substring less than string2 substring * 0 string1 substring identical to string2 substring * > 0 string1 substring greater than string2 substring ** Note :************************************************************************/int memptr_cmp( IN memptr* m, IN const char* s );/************************************************************************* Function : memptr_cmp_nocase** Parameters :* IN memptr* m ; input memory object* IN const char* s ; constatnt string for the memory object to be * compared with** Description : Compares characters of 2 strings irrespective of the * case for a specific count of bytes If the character comparison * is the same the length of the 2 srings determines the shorter * of the 2 strings.** Return : int ;* < 0 string1 substring less than string2 substring * 0 string1 substring identical to string2 substring * > 0 string1 substring greater than string2 substring * * Note :************************************************************************/int memptr_cmp_nocase( IN memptr* m, IN const char* s );/************************************************************************* Function : membuffer_set_size** Parameters :* INOUT membuffer* m ; buffer whose size is to be modified* IN size_t new_length ; new size to which the buffer will be * modified** Description : Increases or decreases buffer cap so that at least* 'new_length' bytes can be stored** Return : int ;* UPNP_E_SUCCESS - On Success* UPNP_E_OUTOF_MEMORY - On failure to allocate memory.** Note :************************************************************************/int membuffer_set_size( INOUT membuffer* m, IN size_t new_length );/************************************************************************* Function : membuffer_init** Parameters :* INOUT membuffer* m ; buffer to be initialized** Description : Wrapper to membuffer_initialize().* Set the size of the buffer to MEMBUF_DEF_SIZE_INC* Initializes m->buf to NULL, length=0** Return : void ;** Note :************************************************************************/void membuffer_init( INOUT membuffer* m );/************************************************************************* Function : membuffer_destroy** Parameters :* INOUT membuffer* m ; buffer to be destroyed** Description : Free's memory allocated for membuffer* m.** Return : void ;** Note :************************************************************************/void membuffer_destroy( INOUT membuffer* m );/************************************************************************* Function : membuffer_assign** Parameters :* INOUT membuffer* m ; buffer whose memory is to be allocated and * assigned.* IN const void* buf ; source buffer whose contents will be copied* IN size_t buf_len ; length of the source buffer** Description : Allocate memory to membuffer* m and copy the contents * of the in parameter IN const void* buf.** Return : int ;* UPNP_E_SUCCESS* UPNP_E_OUTOF_MEMORY** Note :************************************************************************/int membuffer_assign( INOUT membuffer* m, IN const void* buf, IN size_t buf_len );/************************************************************************* Function : membuffer_assign_str** Parameters :* INOUT membuffer* m ; buffer to be allocated and assigned* IN const char* c_str ; source buffer whose contents will be * copied** Description : Wrapper function for membuffer_assign()** Return : int ;* UPNP_E_SUCCESS* UPNP_E_OUTOF_MEMORY** Note :************************************************************************/int membuffer_assign_str( INOUT membuffer* m, IN const char* c_str );/************************************************************************* Function : membuffer_append** Parameters :* INOUT membuffer* m ; buffer whose memory is to be appended.* IN const void* buf ; source buffer whose contents will be * copied* IN size_t buf_len ; length of the source buffer** Description : Invokes function to appends data from a constant buffer * to the buffer ** Return : int ;** Note :************************************************************************/int membuffer_append( INOUT membuffer* m, IN const void* buf, IN size_t buf_len );/************************************************************************* Function : membuffer_append_str** Parameters :* INOUT membuffer* m ; buffer whose memory is to be appended.* IN const char* c_str ; source buffer whose contents will be * copied** Description : Invokes function to appends data from a constant string * to the buffer ** Return : int ;** Note :************************************************************************/int membuffer_append_str( INOUT membuffer* m, IN const char* c_str );/************************************************************************* Function : membuffer_insert** Parameters :* INOUT membuffer* m ; buffer whose memory size is to be increased * and appended.* IN const void* buf ; source buffer whose contents will be * copied* IN size_t buf_len ; size of the source buffer* int index ; index to determine the bounds while movinf the data** Description : Allocates memory for the new data to be inserted. Does* memory management by moving the data from the existing memory to * the newly allocated memory and then appending the new data.** Return : int ;** Note :************************************************************************/int membuffer_insert( INOUT membuffer* m, IN const void* buf, IN size_t buf_len, int index );/************************************************************************* Function : membuffer_delete** Parameters :* INOUT membuffer* m ; buffer whose memory size is to be decreased* and copied to the odified location* IN int index ; index to determine bounds while moving data* IN size_t num_bytes ; number of bytes that the data needs to * shrink by** Description : Shrink the size of the buffer depending on the current * size of the bufer and te input parameters. Move contents from the * old buffer to the new sized buffer.** Return : void ;** Note :************************************************************************/void membuffer_delete( INOUT membuffer* m, IN int index, IN size_t num_bytes );/************************************************************************* Function : membuffer_detach** Parameters :* INOUT membuffer* m ; buffer to be returned and updated. ** Description : Detaches current buffer and returns it. The caller* must free the returned buffer using free().* After this call, length becomes 0.** Return : char* ;* a pointer to the current buffer** Note :************************************************************************/char* membuffer_detach( INOUT membuffer* m );/************************************************************************* Function : membuffer_attach** Parameters :* INOUT membuffer* m ; buffer to be updated* IN char* new_buf ; source buffer which will be assigned to the * buffer to be updated* IN size_t buf_len ; length of the source buffer ** Description : Free existing memory in membuffer and assign the new * buffer in its place.** Return : void ;** Note : 'new_buf' must be allocted using malloc or realloc so* that it can be freed using free()************************************************************************/void membuffer_attach( INOUT membuffer* m, IN char* new_buf, IN size_t buf_len );#ifdef __cplusplus} // extern "C"#endif // __cplusplus#endif // GENLIB_UTIL_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -