#include "precompiled.h" #include "0ad_warning_disable.h" # include "sr_string_array.h" //# define SR_USE_TRACE1 # include "sr_trace.h" //====================== SrStringArray ========================== # define SETZERO(i,ini,size) for(i=ini;i::set(i,0) # define DELETE(i,ini,size) for(i=ini;i::get(i) SrStringArray::SrStringArray ( int s, int c ) :SrArray(s,c) { int i; SETZERO(i,0,s); } SrStringArray::SrStringArray ( const SrStringArray& a ) :SrArray(0,0) { *this = a; // calls copy operator } SrStringArray::~SrStringArray () { size(0); } void SrStringArray::size ( int ns ) { int i, s = size(); if ( ns>s ) { SrArray::size(ns); SETZERO(i,s,ns); } else if ( ns::size(ns); } } void SrStringArray::capacity ( int nc ) { int i, s = size(); if ( nc::capacity(nc); } void SrStringArray::compress () { capacity ( size() ); } void SrStringArray::setall ( const char* s ) { int i; for ( i=0; i=0 && i::get(i); SrArray::set ( i, sr_string_new(s) ); } const char* SrStringArray::get ( int i ) const { SR_ASSERT ( i>=0 && i::get ( i ); return st? st:""; } const char* SrStringArray::top () const { if ( size()==0 ) return 0; return SrArray::get ( size()-1 ); } void SrStringArray::pop () { if ( size()>0 ) delete SrArray::pop(); } void SrStringArray::push ( const char* s ) { SrArray::push() = sr_string_new(s); } void SrStringArray::insert ( int i, const char* s, int dp ) { SrArray::insert ( i, dp ); int j; for ( j=0; j::get(i+j) = sr_string_new(s); } void SrStringArray::remove ( int i, int dp ) { int j; for ( j=0; j::get(i+j); SrArray::remove ( i, dp ); } void SrStringArray::operator = ( const SrStringArray& a ) { size ( 0 ); // deletes all data SrArray::size ( a.size() ); SrArray::compress(); int i; for ( i=0; i::set ( i, sr_string_new(a[i]) ); } static int fcmpst ( const void* pt1, const void* pt2 ) { typedef const char* cchar; return sr_compare( *((cchar*)pt1), (cchar)pt2 ); } static int fcmppt ( const void* pt1, const void* pt2 ) { typedef const char* cchar; return sr_compare( *((cchar*)pt1), *((cchar*)pt2) ); } int SrStringArray::insort ( const char* s, bool allowdup ) { int pos; pos = SrArrayBase::insort ( sizeof(char*), s, fcmpst, allowdup ); if ( pos>=0 ) SrArray::get(pos) = sr_string_new(s); return pos; } void SrStringArray::sort () { SrArrayBase::sort ( sizeof(char*), fcmppt ); } int SrStringArray::lsearch ( const char* s ) const { return SrArrayBase::lsearch ( sizeof(char*), s, fcmpst ); } int SrStringArray::bsearch ( const char* s, int *pos ) { return SrArrayBase::bsearch ( sizeof(char*), s, fcmpst, pos ); } int SrStringArray::push_path ( const char* path ) { // validate path: SrString spath; if ( !spath.make_valid_path(path) ) return -1; // check if already there: int i; for ( i=0; i::take_data(a); } SrOutput& operator<< ( SrOutput& o, const SrStringArray& a ) { o << '['; for ( int i=0; i> ( SrInput& in, SrStringArray& a ) { a.size(0); in.get_token(); while (true) { in.get_token(); if ( in.last_token()[0]==']' ) break; a.push ( in.last_token() ); } return in; } //=========================== EOF ===============================