⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ncbi_std.c

📁 ncbi源码
💻 C
字号:
/* * =========================================================================== * PRODUCTION $Log: ncbi_std.c,v $ * PRODUCTION Revision 1000.2  2004/06/01 18:08:22  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.13 * PRODUCTION * =========================================================================== *//* $Id: ncbi_std.c,v 1000.2 2004/06/01 18:08:22 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's offical duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * *//** @file ncbi_std.c * Function definitions for toolkit independent utility functions? */static char const rcsid[] =     "$Id: ncbi_std.c,v 1000.2 2004/06/01 18:08:22 gouriano Exp $";#include <algo/blast/core/blast_def.h> /* for sfree() macro */#include <algo/blast/core/ncbi_std.h>void * BlastMemDup (const void *orig, size_t size){	void*	copy;	if (orig == NULL || size == 0)		return NULL;	if ((copy = malloc (size)) == NULL)		return NULL;	memcpy(copy, orig, size);    return copy;}/*******************************************************************************   ListNodeNew(vnp)*      adds after last node in list if vnp not NULL******************************************************************************/ListNode* ListNodeNew (ListNode* vnp){	ListNode* newnode;	newnode = (ListNode*) calloc(1, sizeof(ListNode));	if (vnp != NULL)    {        while (vnp->next != NULL)            vnp = vnp->next;		vnp->next = newnode;    }	return newnode;}/*******************************************************************************   ListNodeAdd(head)*      adds after last node in list if *head not NULL*      If *head is NULL, sets it to the new ListNode*      returns pointer to the NEW node added******************************************************************************/ListNode* ListNodeAdd (ListNode** head){	ListNode* newnode;	if (head != NULL)	{		newnode = ListNodeNew(*head);		if (*head == NULL)			*head = newnode;	}	else		newnode = ListNodeNew(NULL);	return newnode;}/*   ListNodeAddPointer (head, choice, value)*      adds like ListNodeAdd()*      sets newnode->choice = choice (if choice does not matter, use 0)*      sets newnode->ptr = value******************************************************************************/ListNode* ListNodeAddPointer (ListNode** head, Uint1 choice,                                 void *value){	ListNode* newnode;	newnode = ListNodeAdd(head);	if (newnode != NULL)	{		newnode->choice = choice;		newnode->ptr = value;	}	return newnode;}/*******************************************************************************   ListNodeCopyStr (head, choice, str)*      adds like ListNodeAdd()*      sets newnode->choice = choice (if choice does not matter, use 0)*      sets newnode->ptr = str*         makes a COPY of str*      if str == NULL, does not add a ListNode******************************************************************************/ListNode* ListNodeCopyStr (ListNode** head, Uint1 choice, char* str){	ListNode* newnode;	if (str == NULL) return NULL;	newnode = ListNodeAdd(head);	if (newnode != NULL)	{		newnode->choice = choice;		newnode->ptr = strdup(str);	}	return newnode;}/*******************************************************************************   ListNodeFree(vnp)*   	frees whole chain of ListNodes*       Does NOT free associated data pointers*           see ListNodeFreeData()******************************************************************************/ListNode* ListNodeFree (ListNode* vnp){	ListNode* next;	while (vnp != NULL)	{		next = vnp->next;		sfree(vnp);		vnp = next;	}	return NULL;}/*******************************************************************************   ListNodeFreeData(vnp)*   	frees whole chain of ListNodes*       frees associated data pointers - BEWARE of this if these are not*           allocated single memory block structures.******************************************************************************/ListNode* ListNodeFreeData (ListNode* vnp){	ListNode* next;	while (vnp != NULL)	{		sfree(vnp->ptr);		next = vnp->next;		sfree(vnp);		vnp = next;	}	return NULL;}/*******************************************************************************   ListNodeLen(vnp)*      returns the number of nodes in the linked list******************************************************************************/Int4 ListNodeLen (ListNode* vnp){	Int4 len;	len = 0;	while (vnp != NULL) {		len++;		vnp = vnp->next;	}	return len;}/*******************************************************************************   ListNodeSort(list, compar)*   	Copied from SortListNode in jzcoll, renamed, for more general access*   	Makes array from ListNode list, calls HeapSort, reconnects ListNode list******************************************************************************/ListNode* ListNodeSort (ListNode* list,                int (*compar )(const void *, const void *)){	ListNode* tmp,** head;	Int4 count, i;	if (list == NULL) return NULL;		count = ListNodeLen (list);	head = (ListNode* *) calloc (((size_t) count + 1), sizeof (ListNode*));	for (tmp = list, i = 0; tmp != NULL && i < count; i++) {		head [i] = tmp;		tmp = tmp->next;	}	qsort (head, (size_t) count, sizeof (ListNode*), compar);	for (i = 0; i < count; i++) {		tmp = head [i];		tmp->next = head [i + 1];	}	list = head [0];	sfree (head);	return list;}

⌨️ 快捷键说明

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