lld_blob.c

来自「国外网站上的一些精典的C程序」· C语言 代码 · 共 132 行

C
132
字号
/* =======================================================================    LLD_BLOB.c      Generic Doubly Linked Lists for Binary Large OBjects.                    Linked Lists for variable size data-items.                    This is a 'front end' for the generic LLD module.                    v1.00  94-08-11 _____              This version is Public Domain. /_|__|             A.Reitsma, Delft, The Netherlands./  | \  --------------------------------------------------------------- */#include "ll_defs.h"#include "lld.h"            /* the generic LLD functions ...            */#include "lld_blob.h"       /* also includes extkword.h if necessary    */struct BlobDesc{    void * data ;           /* 'data' can be obtained by LLDnodePtr() ! */    unsigned size ;};#define ERR_MEMORY          -1/* ---- LL blob system management ------------------------------------- */int LLDblobCreate( void ){    return LLDcreate( sizeof( struct BlobDesc ));}/* ---- LL blob node management --------------------------------------- */int LLDblobInsert( int List, void * Source, unsigned Size ){                                       /* insert _BEFORE_ current node */    struct BlobDesc Blob ;    Blob.size = Size ;    Blob.data = malloc( Size );    if( NULL == Blob.data )    {        return ERR_MEMORY ;    }    memcpy( Blob.data, Source, Size );    LLDnodeInsertFrom( List, & Blob );    return LIST_NO_PROBLEMS ;}int LLDblobAdd( int List, void * Source, unsigned Size ){                                        /* insert _AFTER_ current node */    struct BlobDesc Blob ;    Blob.size = Size ;    Blob.data = malloc( Size );    if( NULL == Blob.data )    {        return ERR_MEMORY ;    }    memcpy( Blob.data, Source, Size );    LLDnodeAddFrom( List, & Blob );    return LIST_NO_PROBLEMS ;}int LLDblobPrepend( int List, void * Source, unsigned Size ){                                               /* insert as first node */    struct BlobDesc Blob ;    Blob.size = Size ;    Blob.data = malloc( Size );    if( NULL == Blob.data )    {        return ERR_MEMORY ;    }    memcpy( Blob.data, Source, Size );    LLDnodePrependFrom( List, & Blob );    return LIST_NO_PROBLEMS ;}int LLDblobAppend( int List, void * Source, unsigned Size ){                                                /* insert as last node */    struct BlobDesc Blob ;    Blob.size = Size ;    Blob.data = malloc( Size );    if( NULL == Blob.data )    {        return ERR_MEMORY ;    }    memcpy( Blob.data, Source, Size );    LLDnodeAppendFrom( List, & Blob );    return LIST_NO_PROBLEMS ;}void LLDblobDelete( int List ){    struct BlobDesc Blob ;    LLDnodeDataTo( List, & Blob );    free( Blob.data );    LLDnodeDelete( List );    return ;}/* ---- stored data management ---------------------------------------- */unsigned LLDblobData( int List, void * Destination ){    struct BlobDesc Blob ;    LLDnodeDataTo( List, & Blob );    if( NULL != Destination )        memcpy( Destination, Blob.data, Blob.size );    return Blob.size ;       /* size needed for blob */}/* ==== LLD_BLOB.c  end =============================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?