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

📄 spnklist.cpp

📁 linux 下的程序源代码
💻 CPP
字号:
/* * Copyright 2008 Stephen Liu * For license terms, see the file COPYING along with this library. */#include <stdlib.h>#include <assert.h>#include <string.h>#include "spnklist.hpp"const int SP_NKVector::LAST_INDEX = -1;SP_NKVector :: SP_NKVector( int initCount ){	mMaxCount = initCount <= 0 ? 2 : initCount;	mCount = 0;	mFirst = (void**)malloc( sizeof( void * ) * mMaxCount );}SP_NKVector :: ~SP_NKVector(){	free( mFirst );	mFirst = NULL;}int SP_NKVector :: getCount() const{	return mCount;}int SP_NKVector :: append( void * value ){	if( NULL == value ) return -1;	if( mCount >= mMaxCount ) {		mMaxCount = ( mMaxCount * 3 ) / 2 + 1;		mFirst = (void**)realloc( mFirst, sizeof( void * ) * mMaxCount );		assert( NULL != mFirst );		memset( mFirst + mCount, 0, ( mMaxCount - mCount ) * sizeof( void * ) );	}	mFirst[ mCount++ ] = value;	return 0;}void * SP_NKVector :: takeItem( int index ){	void * ret = NULL;	if( LAST_INDEX == index ) index = mCount -1;	if( index < 0 || index >= mCount ) return ret;	ret = mFirst[ index ];	mCount--;	if( ( index + 1 ) < mMaxCount ) {		memmove( mFirst + index, mFirst + index + 1,			( mMaxCount - index - 1 ) * sizeof( void * ) );	} else {		mFirst[ index ] = NULL;	}	return ret;}const void * SP_NKVector :: getItem( int index ) const{	const void * ret = NULL;	if( LAST_INDEX == index ) index = mCount - 1;	if( index < 0 || index >= mCount ) return ret;	ret = mFirst[ index ];	return ret;}void SP_NKVector :: clean(){	mCount = 0;}//=============================================================================SP_NKStringList :: SP_NKStringList(){	mList = new SP_NKVector();}SP_NKStringList :: ~SP_NKStringList(){	for( int i = 0; i < mList->getCount(); i++ ) {		free( (char*)mList->getItem(i) );	}	delete mList;	mList = NULL;}int SP_NKStringList :: getCount() const{	return mList->getCount();}int SP_NKStringList :: directAppend( char * value ){	return mList->append( value );}int SP_NKStringList :: append( const char * value, int len ){	if( len <= 0 ) len = strlen( value );	char * tmp = (char*)malloc( len + 1 );	memcpy( tmp, value, len );	tmp[ len ] = '\0';	return mList->append( tmp );}const char * SP_NKStringList :: getItem( int index ) const{	return (char*)mList->getItem( index );}int SP_NKStringList :: remove( int index ){	char * item = takeItem( index );	if( NULL != item ) free( item );	return NULL == item ? -1 : 0;}char * SP_NKStringList :: takeItem( int index ){	return (char*)mList->takeItem( index );}int SP_NKStringList :: seek( const char * sample ) const{	for( int i = 0; i < mList->getCount(); i++ ) {		if( 0 == strcmp( sample, (char*)mList->getItem(i) ) ) return i;	}	return -1;}char * SP_NKStringList :: getMerge( int * len, const char * sep ){	int sepLen = 0;	if( NULL != sep && '\0' != sep ) sepLen = strlen( sep );	int mergeSize = sepLen * ( mList->getCount() - 1 );	for( int i = 0; i < mList->getCount(); i++ ) {		mergeSize += strlen( (char*)mList->getItem(i) );	}	char * ret = (char*)malloc( mergeSize + 1 );	char * pos = ret;	for( int i = 0; i < mList->getCount(); i++ ) {		if( 0 != i && sepLen > 0 ) {			strcpy( pos, sep );			pos += sepLen;		}		int itemSize = strlen( (char*)mList->getItem(i) );		strcpy( pos, (char*)mList->getItem(i) );		pos += itemSize;	}	ret[ mergeSize ] = '\0';	if( NULL != len ) *len = mergeSize;	return ret;}void SP_NKStringList :: clean(){	for( int i = 0; i < mList->getCount(); i++ ) {		free( (char*)mList->getItem( i ) );	}	mList->clean();}

⌨️ 快捷键说明

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