Removed array_list_t (!)

This commit is contained in:
ridiculousfish 2012-02-21 10:47:21 -08:00
parent d9bb9b73ad
commit 2206e221bd
10 changed files with 19 additions and 511 deletions

View File

@ -211,7 +211,7 @@ static void env_universal_remove_all()
size_t i; size_t i;
wcstring_list_t lst; wcstring_list_t lst;
env_universal_common_get_names2( lst, env_universal_common_get_names( lst,
1, 1,
1 ); 1 );
for( i=0; i<lst.size(); i++ ) for( i=0; i<lst.size(); i++ )
@ -470,7 +470,7 @@ void env_universal_get_names2( wcstring_list_t &lst,
if( !init ) if( !init )
return; return;
env_universal_common_get_names2( lst, env_universal_common_get_names( lst,
show_exported, show_exported,
show_unexported ); show_unexported );
} }

View File

@ -60,9 +60,6 @@ int env_universal_read_all();
\param show_exported whether exported variables should be shown \param show_exported whether exported variables should be shown
\param show_unexported whether unexported variables should be shown \param show_unexported whether unexported variables should be shown
*/ */
void env_universal_get_names( array_list_t *l,
int show_exported,
int show_unexported );
void env_universal_get_names2( wcstring_list_t &list, void env_universal_get_names2( wcstring_list_t &list,
int show_exported, int show_exported,
int show_unexported ); int show_unexported );

View File

@ -881,7 +881,7 @@ message_t *create_message( int type,
/** /**
Put exported or unexported variables in a string list Put exported or unexported variables in a string list
*/ */
void env_universal_common_get_names2( wcstring_list_t &lst, void env_universal_common_get_names( wcstring_list_t &lst,
int show_exported, int show_exported,
int show_unexported ) int show_unexported )
{ {

View File

@ -149,10 +149,7 @@ void env_universal_common_destroy();
This function operate agains the local copy of all universal This function operate agains the local copy of all universal
variables, it does not communicate with any other process. variables, it does not communicate with any other process.
*/ */
void env_universal_common_get_names( array_list_t *l, void env_universal_common_get_names( wcstring_list_t &lst,
int show_exported,
int show_unexported );
void env_universal_common_get_names2( wcstring_list_t &lst,
int show_exported, int show_exported,
int show_unexported ); int show_unexported );

View File

@ -133,20 +133,6 @@ typedef struct block
return state->value; return state->value;
} }
#if 0
/**
Second block type specific variable
*/
union
{
array_list_t for_vars; /**< List of values for a for block */
int switch_taken; /**< Whether a switch match has already been found */
process_t *function_call_process; /**< The process representing this function call */
} param2;
#endif
/** /**
Name of file that created this block Name of file that created this block
*/ */

View File

@ -349,7 +349,7 @@ static int interrupted=0;
*/ */
static struct termios saved_modes; static struct termios saved_modes;
static void reader_super_highlight_me_plenty( int pos, array_list_t *error ); static void reader_super_highlight_me_plenty( int pos );
/** /**
Variable to keep track of forced exits - see \c reader_exit_forced(); Variable to keep track of forced exits - see \c reader_exit_forced();
@ -491,7 +491,7 @@ static void reader_kill( size_t begin_idx, int length, int mode, int newv )
data->command_line.erase(begin_idx, length); data->command_line.erase(begin_idx, length);
data->check_size(); data->check_size();
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
@ -544,31 +544,9 @@ void reader_data_t::check_size() {
} }
/**
Compare two completion entrys
*/
/*
static int completion_cmp( const void *a, const void *b )
{
completion_t *c= *((completion_t **)a);
completion_t *d= *((completion_t **)b);
return wcsfilecmp( c->completion, d->completion );
}
*/
/** /**
Sort an array_list_t containing compltion_t structs. Sort an array_list_t containing compltion_t structs.
*/ */
/*
static void sort_completion_list( array_list_t *comp )
{
qsort( comp->arr,
al_get_count( comp ),
sizeof( void*),
&completion_cmp );
}
*/
static void sort_completion_list( std::vector<completion_t> &comp ) { static void sort_completion_list( std::vector<completion_t> &comp ) {
sort(comp.begin(), comp.end()); sort(comp.begin(), comp.end());
} }
@ -577,33 +555,6 @@ static void sort_completion_list( std::vector<completion_t> &comp ) {
Remove any duplicate completions in the list. This relies on the Remove any duplicate completions in the list. This relies on the
list first beeing sorted. list first beeing sorted.
*/ */
/*
static void remove_duplicates( array_list_t *l )
{
int in, out;
const wchar_t *prev;
completion_t *first;
if( al_get_count( l ) == 0 )
return;
first = (completion_t *)al_get( l, 0 );
prev = first->completion;
for( in=1, out=1; in < al_get_count( l ); in++ )
{
completion_t *curr = (completion_t *)al_get( l, in );
if( wcscmp( prev, curr->completion )!=0 )
{
al_set( l, out++, curr );
}
prev = curr->completion;
}
al_truncate( l, out );
}
*/
static void remove_duplicates(std::vector<completion_t> &l) { static void remove_duplicates(std::vector<completion_t> &l) {
l.erase(std::unique( l.begin(), l.end()), l.end()); l.erase(std::unique( l.begin(), l.end()), l.end());
@ -773,7 +724,7 @@ static void remove_backward()
data->check_size(); data->check_size();
data->suppress_autosuggestion = true; data->suppress_autosuggestion = true;
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
@ -793,7 +744,7 @@ static int insert_string(const wcstring &str)
data->suppress_autosuggestion = false; data->suppress_autosuggestion = false;
/* Syntax highlight */ /* Syntax highlight */
reader_super_highlight_me_plenty( data->buff_pos-1, 0 ); reader_super_highlight_me_plenty( data->buff_pos-1 );
reader_repaint(); reader_repaint();
return 1; return 1;
@ -1024,7 +975,7 @@ static void completion_insert( const wchar_t *val, int flags )
reader_set_buffer( (wchar_t *)sb.buff, (begin-buff)+move_cursor ); reader_set_buffer( (wchar_t *)sb.buff, (begin-buff)+move_cursor );
sb_destroy( &sb ); sb_destroy( &sb );
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
@ -1382,7 +1333,7 @@ static void reader_flash()
pollint.tv_nsec = 100 * 1000000; pollint.tv_nsec = 100 * 1000000;
nanosleep( &pollint, NULL ); nanosleep( &pollint, NULL );
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
@ -1839,7 +1790,7 @@ static void handle_history( const wcstring &new_str )
data->command_line = new_str; data->command_line = new_str;
data->check_size(); data->check_size();
data->buff_pos=data->command_line.size(); data->buff_pos=data->command_line.size();
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
@ -1906,7 +1857,7 @@ static void handle_token_history( int forward, int reset )
} }
reader_replace_current_token( str ); reader_replace_current_token( str );
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
else else
@ -1983,7 +1934,7 @@ static void handle_token_history( int forward, int reset )
if( str ) if( str )
{ {
reader_replace_current_token( str ); reader_replace_current_token( str );
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
data->search_prev.push_back(str); data->search_prev.push_back(str);
data->search_pos = data->search_prev.size() - 1; data->search_pos = data->search_prev.size() - 1;
@ -2182,7 +2133,7 @@ void reader_set_buffer( const wchar_t *b, int p )
data->search_buff.clear(); data->search_buff.clear();
data->history_search.go_to_end(); data->history_search.go_to_end();
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint_needed(); reader_repaint_needed();
} }
@ -2483,7 +2434,7 @@ static int threaded_highlight(background_highlight_context_t *ctx) {
\param match_highlight_pos the position to use for bracket matching. This need not be the same as the surrent cursor position \param match_highlight_pos the position to use for bracket matching. This need not be the same as the surrent cursor position
\param error if non-null, any possible errors in the buffer are further descibed by the strings inserted into the specified arraylist \param error if non-null, any possible errors in the buffer are further descibed by the strings inserted into the specified arraylist
*/ */
static void reader_super_highlight_me_plenty( int match_highlight_pos, array_list_t *error ) static void reader_super_highlight_me_plenty( int match_highlight_pos )
{ {
reader_sanity_check(); reader_sanity_check();
@ -2701,7 +2652,7 @@ const wchar_t *reader_readline()
exec_prompt(); exec_prompt();
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
s_reset( &data->screen, 1 ); s_reset( &data->screen, 1 );
reader_repaint(); reader_repaint();
@ -3022,7 +2973,7 @@ const wchar_t *reader_readline()
reader_replace_current_token( data->search_buff.c_str() ); reader_replace_current_token( data->search_buff.c_str() );
} }
data->search_buff.clear(); data->search_buff.clear();
reader_super_highlight_me_plenty( data->buff_pos, 0 ); reader_super_highlight_me_plenty( data->buff_pos );
reader_repaint(); reader_repaint();
} }
@ -3223,7 +3174,7 @@ const wchar_t *reader_readline()
data->command_line = data->autosuggestion; data->command_line = data->autosuggestion;
data->buff_pos = data->command_line.size(); data->buff_pos = data->command_line.size();
data->check_size(); data->check_size();
reader_super_highlight_me_plenty(data->buff_pos, 0); reader_super_highlight_me_plenty(data->buff_pos);
reader_repaint(); reader_repaint();
} }
} }

251
util.cpp
View File

@ -95,257 +95,6 @@ int maxi( int a,
return a>b?a:b; return a>b?a:b;
} }
/**
Real implementation of all al_push_* versions. Pushes arbitrary
element to end of list.
*/
static int al_push_generic( array_list_t *l, anything_t o )
{
if( l->pos >= l->size )
{
int new_size = l->pos == 0 ? MIN_SIZE : 2 * l->pos;
void *tmp = realloc( l->arr, sizeof( anything_t )*new_size );
if( tmp == 0 )
{
oom_handler( l );
return 0;
}
l->arr = (anything_t *)tmp;
l->size = new_size;
}
l->arr[l->pos++] = o;
return 1;
}
int al_push( array_list_t *l, const void *o )
{
anything_t v;
v.ptr_val = (void *)o;
return al_push_generic( l, v );
}
int al_push_long( array_list_t *l, long val )
{
anything_t v;
v.long_val = val;
return al_push_generic( l, v );
}
int al_push_func( array_list_t *l, func_ptr_t f )
{
anything_t v;
v.func_val = f;
return al_push_generic( l, v );
}
int al_push_all( array_list_t *a, array_list_t *b )
{
int k;
for( k=0; k<al_get_count( b ); k++ )
{
if( !al_push( a, al_get( b, k ) ) )
return 0;
}
return 1;
}
/**
Real implementation of all al_set_* versions. Sets arbitrary
element of list.
*/
static int al_set_generic( array_list_t *l, int pos, anything_t v )
{
int old_pos;
if( pos < 0 )
return 0;
if( pos < l->pos )
{
l->arr[pos]=v;
return 1;
}
old_pos=l->pos;
l->pos = pos;
if( al_push_generic( l, v ) )
{
memset( &l->arr[old_pos],
0,
sizeof(anything_t) * (pos - old_pos) );
return 1;
}
return 0;
}
int al_set( array_list_t *l, int pos, const void *o )
{
anything_t v;
v.ptr_val = (void *)o;
return al_set_generic( l, pos, v );
}
int al_set_long( array_list_t *l, int pos, long o )
{
anything_t v;
v.long_val = o;
return al_set_generic( l, pos, v );
}
int al_set_func( array_list_t *l, int pos, func_ptr_t f )
{
anything_t v;
v.func_val = f;
return al_set_generic( l, pos, v );
}
/**
Real implementation of all al_get_* versions. Returns element from list.
*/
static anything_t al_get_generic( array_list_t *l, int pos )
{
anything_t res;
res.ptr_val=0;
if( (pos >= 0) && ((size_t)pos < l->pos) )
res = l->arr[pos];
return res;
}
void *al_get( array_list_t *l, int pos )
{
return al_get_generic(l,pos).ptr_val;
}
long al_get_long( array_list_t *l, int pos )
{
return al_get_generic(l,pos).long_val;
}
func_ptr_t al_get_func( array_list_t *l, int pos )
{
return al_get_generic(l,pos).func_val;
}
void al_truncate( array_list_t *l, int new_sz )
{
CHECK( l, );
l->pos = new_sz;
}
/**
Real implementation of all al_pop_* versions. Pops arbitrary
element from end of list.
*/
static anything_t al_pop_generic( array_list_t *l )
{
anything_t e;
if( l->pos <= 0 )
{
memset( &e, 0, sizeof(anything_t ) );
return e;
}
e = l->arr[--l->pos];
if( (l->pos*3 < l->size) && (l->size < MIN_SIZE) )
{
anything_t *old_arr = l->arr;
int old_size = l->size;
l->size = l->size/2;
l->arr = (anything_t *)realloc( l->arr, sizeof(anything_t)*l->size );
if( l->arr == 0 )
{
l->arr = old_arr;
l->size = old_size;
/*
We are _shrinking_ the list here, so if the allocation
fails (it never should, but hey) then we can keep using
the old list - no need to flag any error...
*/
}
}
return e;
}
void *al_pop( array_list_t *l )
{
return al_pop_generic(l).ptr_val;
}
long al_pop_long( array_list_t *l )
{
return al_pop_generic(l).long_val;
}
func_ptr_t al_pop_func( array_list_t *l )
{
return al_pop_generic(l).func_val;
}
/**
Real implementation of all al_peek_* versions. Peeks last element
of list.
*/
static anything_t al_peek_generic( array_list_t *l )
{
anything_t res;
res.ptr_val=0;
if( l->pos>0)
res = l->arr[l->pos-1];
return res;
}
void *al_peek( array_list_t *l )
{
return al_peek_generic(l).ptr_val;
}
long al_peek_long( array_list_t *l )
{
return al_peek_generic(l).long_val;
}
func_ptr_t al_peek_func( array_list_t *l )
{
return al_peek_generic(l).func_val;
}
int al_get_count( array_list_t *l )
{
CHECK( l, 0 );
return l->pos;
}
void al_foreach( array_list_t *l, void (*func)( void * ))
{
size_t i;
CHECK( l, );
CHECK( func, );
for( i=0; i<l->pos; i++ )
func( l->arr[i].ptr_val );
}
void al_foreach2( array_list_t *l, void (*func)( void *, void *), void *aux)
{
size_t i;
CHECK( l, );
CHECK( func, );
for( i=0; i<l->pos; i++ )
func( l->arr[i].ptr_val, aux );
}
int wcsfilecmp( const wchar_t *a, const wchar_t *b ) int wcsfilecmp( const wchar_t *a, const wchar_t *b )
{ {
CHECK( a, 0 ); CHECK( a, 0 );

167
util.h
View File

@ -61,33 +61,6 @@ typedef struct priority_queue
} }
priority_queue_t; priority_queue_t;
/**
Array list struct.
A dynamically growing list that supports stack operations.
*/
typedef struct array_list
{
/**
Array containing the data
*/
anything_t *arr;
/**
Internal cursor position of the array_list_t. This is the
position to append elements at. This is also what the
array_list_t considers to be its true size, as reported by
al_get_count(), etc. Calls to e.g. al_insert will preserve the
values of all elements up to pos.
*/
size_t pos;
/**
Amount of memory allocated in arr, expressed in number of elements.
*/
size_t size;
}
array_list_t;
/** /**
Linked list node. Linked list node.
*/ */
@ -143,146 +116,6 @@ int maxi( int a, int b );
*/ */
int mini( int a, int b ); int mini( int a, int b );
/*
All the datastuctures below autoresize. The queue, stack and
priority queue are all impemented using an array and are guaranteed
to never be less than 50% full.
*/
/**
Append element to list
\param l The list
\param o The element
\return
\return 1 if succesfull, 0 otherwise
*/
int al_push( array_list_t *l, const void *o );
/**
Append element to list
\param l The list
\param o The element
\return
\return 1 if succesfull, 0 otherwise
*/
int al_push_long( array_list_t *l, long o );
/**
Append element to list
\param l The list
\param f The element
\return 1 if succesfull, 0 otherwise
*/
int al_push_func( array_list_t *l, func_ptr_t f );
/**
Append all elements of a list to another
\param a The destination list
\param b The source list
\return 1 if succesfull, 0 otherwise
*/
int al_push_all( array_list_t *a, array_list_t *b );
/**
Sets the element at the specified index
\param l The array_list_t
\param pos The index
\param o The element
*/
int al_set( array_list_t *l, int pos, const void *o );
/**
Sets the element at the specified index
\param l The array_list_t
\param pos The index
\param v The element to set
*/
int al_set_long( array_list_t *l, int pos, long v );
/**
Sets the element at the specified index
\param l The array_list_t
\param pos The index
\param f The element to insert
*/
int al_set_func( array_list_t *l, int pos, func_ptr_t f );
/**
Returns the element at the specified index
\param l The array_list_t
\param pos The index
\return The element
*/
void *al_get( array_list_t *l, int pos );
/**
Returns the element at the specified index
\param l The array_list_t
\param pos The index
\return The element
*/
long al_get_long( array_list_t *l, int pos );
/**
Returns the element at the specified index
\param l The array_list_t
\param pos The index
\return The element
*/
func_ptr_t al_get_func( array_list_t *l, int pos );
/**
Truncates the list to new_sz items.
*/
void al_truncate( array_list_t *l, int new_sz );
/**
Removes and returns the last entry in the list
*/
void *al_pop( array_list_t *l );
/**
Removes and returns the last entry in the list
*/
long al_pop_long( array_list_t *l );
/**
Removes and returns the last entry in the list
*/
func_ptr_t al_pop_func( array_list_t *l );
/**
Returns the number of elements in the list
*/
int al_get_count( array_list_t *l );
/**
Returns the last entry in the list witout removing it.
*/
void *al_peek( array_list_t *l );
/**
Returns the last entry in the list witout removing it.
*/
long al_peek_long( array_list_t *l );
/**
Returns the last entry in the list witout removing it.
*/
func_ptr_t al_peek_func( array_list_t *l );
/**
Call the function func for each entry in the list
*/
void al_foreach( array_list_t *l, void (*func)( void * ));
/**
Same as al_foreach, but the function func takes an additional
argument, which is provided by the caller in the variable aux
*/
void al_foreach2( array_list_t *l, void (*func)( void *, void *), void *aux);
/** /**
Compares two wide character strings with an (arguably) intuitive Compares two wide character strings with an (arguably) intuitive
ordering. ordering.

View File

@ -198,7 +198,7 @@ static int wildcard_match2( const wcstring &str_str,
/** /**
Matches the string against the wildcard, and if the wildcard is a Matches the string against the wildcard, and if the wildcard is a
possible completion of the string, the remainder of the string is possible completion of the string, the remainder of the string is
inserted into the array_list_t. inserted into the out vector.
*/ */
static int wildcard_complete_internal( const wchar_t *orig, static int wildcard_complete_internal( const wchar_t *orig,
const wchar_t *str, const wchar_t *str,

View File

@ -66,11 +66,6 @@ enum
\return 1 if matches where found, 0 otherwise. Return -1 on abort (I.e. ^C was pressed). \return 1 if matches where found, 0 otherwise. Return -1 on abort (I.e. ^C was pressed).
*/ */
int wildcard_expand( const wchar_t *wc,
const wchar_t *base_dir,
int flags,
array_list_t *out );
int wildcard_expand_string(const wcstring &wc, const wcstring &base_dir, int flags, std::vector<completion_t> &out ); int wildcard_expand_string(const wcstring &wc, const wcstring &base_dir, int flags, std::vector<completion_t> &out );
/** /**
Test whether the given wildcard matches the string Test whether the given wildcard matches the string