1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*
* Copyright (c) Medical Research Council 2001. All rights reserved.
*
* Permission to use, copy, modify and distribute this software and its
* documentation for any purpose is hereby granted without fee, provided that
* this copyright and notice appears in all copies.
*
* This file was written as part of the Staden Package at the MRC Laboratory
* of Molecular Biology, Hills Road, Cambridge, CB2 2QH, United Kingdom.
*
* MRC disclaims all warranties with regard to this software.
*
*/
#include <cassert>
#include <cstring> // For strcpy(), strlen()
#include <stringlist.hpp>
//------------------
// Node Constructor
//------------------
StringListNode::StringListNode( const char* s )
{
assert(s != NULL);
if( !s )
s = "";
m_pString = new char[ std::strlen(s)+1 ];
std::strcpy( m_pString, s );
m_pNext = 0;
}
//-------------
// Constructor
//-------------
StringList::StringList()
{
m_pList = 0;
m_nLength = 0;
m_pCurrent = 0;
}
//------------
// Destructor
//------------
StringList::~StringList()
{
StringListNode* pNext;
StringListNode* pNode = m_pList;
while( pNode )
{
pNext = pNode->Next();
delete pNode;
pNode = pNext;
}
}
//-------
// First
//-------
char* StringList::First()
{
if( m_pList )
{
m_pCurrent = m_pList;
return m_pCurrent->Data();
}
return 0;
}
//------
// Next
//------
char* StringList::Next()
{
if( m_pCurrent )
{
if( m_pCurrent->Next() )
{
m_pCurrent = m_pCurrent->Next();
return m_pCurrent->Data();
}
}
return 0;
}
//--------
// Append
//--------
void StringList::Append( const char* s )
{
StringListNode* pNode = new StringListNode(s);
if( !m_pList )
m_pList = pNode;
else
{
StringListNode* pNext = m_pCurrent->Next();
while( pNext )
{
m_pCurrent = pNext;
pNext = m_pCurrent->Next();
}
m_pCurrent->Next(pNode);
}
m_nLength++;
m_pCurrent = pNode;
}
|