14 #ifndef WRAP_KJB_WORD_LIST_H
15 #define WRAP_KJB_WORD_LIST_H
17 #include "l/l_sys_io.h"
18 #include "l/l_word_list.h"
62 kjb_c::Word_list *m_word_list;
71 pred_matcher(
const std::string& target) : target_(&target) {}
73 bool operator()(
const char* wl_word)
75 return wl_word && *target_ == wl_word;
78 const std::string* target_;
82 static void append_f(
Word_list* wl,
const char* cstring )
111 int (*filter)(
const char*) = kjb_c::is_file
115 int rc = kjb_c::kjb_glob( & m_word_list, pattern, filter );
116 if ( rc != kjb_c::NO_ERROR )
135 const std::string& pattern,
136 int (*filter)(
const char*) = kjb_c::is_file
140 Word_list similar( pattern.c_str(), filter );
141 std::swap( m_word_list, similar.m_word_list );
151 ETX( kjb_c::get_target_word_list( &m_word_list, num_words ) );
159 ETX( kjb_c::get_target_word_list( &m_word_list, argc ) );
161 std::for_each( argv, argv+argc,
162 std::bind1st(std::ptr_fun(append_f),
this) );
172 ETX( kjb_c::copy_word_list( &m_word_list, that.m_word_list ) );
185 std::swap( m_word_list, coppie.m_word_list );
201 return m_word_list -> num_words;
207 return kjb_c::count_strings_in_word_list( m_word_list );
213 const kjb_c::Word_list*
c_ptr()
const
227 size_t match(
const std::string& word )
const
230 const char*
const*
const WLW = m_word_list -> words;
231 const char*
const*
const fp = std::find_if(WLW, WLW +
size(),
232 pred_matcher(word) );
244 if (
size() <= index )
248 return m_word_list -> words[ index ];
265 ETX( kjb_c::append_word_list( &m_word_list, word.c_str() ) );
271 ETX( kjb_c::trim_word_list_empty_entries_at_tail( m_word_list ) );
275 operator std::vector< std::string >()
const
278 std::vector< std::string > vvv(
size() );
279 const char*
const*
const WLW = m_word_list -> words;
280 std::copy( WLW, WLW +
size(), vvv.begin() );
288 std::vector< const kjb_c::Word_list* > input( 2 );
289 input[ 0 ] = m_word_list;
290 input[ 1 ] = that.m_word_list;
291 ETX( kjb_c::concat_word_lists(&result.m_word_list, 2, &input.front()));
298 free_word_list( m_word_list );
305 public std::iterator<
306 std::bidirectional_iterator_tag,
313 const kjb_c::Word_list* m_list;
317 : m_index( iii ), m_list( www )
348 return m_list->words[m_index];
353 return m_index == iii.m_index && m_list == iii.m_list;
358 return m_index != iii.m_index || m_list != iii.m_list;
size_t match(const std::string &word) const
Searches the word list for an entry, looking for an exact match.
Definition: l_word_list.h:227
const_iterator operator++(int)
Definition: l_word_list.h:326
Word_list(const char *pattern, int(*filter)(const char *)=kjb_c::is_file)
Construct by searching for a Glob pattern, seeking files.
Definition: l_word_list.h:109
const_iterator & operator++()
Definition: l_word_list.h:320
#define ETX(a)
Definition: l_exception.h:67
Word_list(int argc, const char *const *argv)
construct a word list from an "argv" style array of arguments.
Definition: l_word_list.h:156
const_iterator begin() const
synonym for cbegin
Definition: l_word_list.h:363
Object thrown when an index argument exceeds the size of a container.
Definition: l_exception.h:399
int count_strings() const
return the number of non-empty entries in the list
Definition: l_word_list.h:205
reference operator*() const
Definition: l_word_list.h:346
Wrapper for the libKJB type Word_list (useful for globs).
Definition: l_word_list.h:60
#define KJB_THROW(ex)
Definition: l_exception.h:46
Word_list operator+(const Word_list &that) const
concatenate two word lists
Definition: l_word_list.h:285
const_iterator operator--(int)
Definition: l_word_list.h:339
#define NTX(a)
Definition: l_exception.h:89
Object thrown when a function cannot generate a valid result.
Definition: l_exception.h:516
Word_list & operator=(const Word_list &that)
assignment operator deep-copies contents of given list.
Definition: l_word_list.h:180
bool operator!=(const const_iterator &iii) const
Definition: l_word_list.h:356
const_iterator(size_t iii, const kjb_c::Word_list *www)
Definition: l_word_list.h:316
const kjb_c::Word_list * c_ptr() const
Return the underlying C representation (as const)
Definition: l_word_list.h:213
Word_list(int num_words=0)
take non-negative word-count; generate that many empty entries.
Definition: l_word_list.h:148
size_t size() const
Number of entries in the word list (could be empty, though).
Definition: l_word_list.h:198
iterator class used to traverse and read the list
Definition: l_word_list.h:304
void append(const std::string &word)
insert a given string into the list (maybe increasing its size).
Definition: l_word_list.h:263
#define KJB_THROW_2(ex, msg)
Definition: l_exception.h:48
void swap(kjb::Gsl_Multimin_fdf &m1, kjb::Gsl_Multimin_fdf &m2)
Swap two wrapped multimin objects.
Definition: gsl_multimin.h:693
const char * operator[](size_t index) const
Access an entry of the word list; this performs range checking.
Definition: l_word_list.h:241
Word_list(const std::string &pattern, int(*filter)(const char *)=kjb_c::is_file)
Construct by searching for a Glob pattern, seeking files.
Definition: l_word_list.h:134
const_iterator end() const
synonym for cend
Definition: l_word_list.h:369
const_iterator cend() const
generate, return const_iterator pointing one-past-last entry
Definition: l_word_list.h:381
Word_list(const Word_list &that)
copy ctor (slow) creates a deep copy of an existing word list.
Definition: l_word_list.h:169
Support for error handling exception classes in libKJB.
const_iterator & operator--()
Definition: l_word_list.h:333
bool operator==(const const_iterator &iii) const
Definition: l_word_list.h:351
void trim_empty_entries_at_tail()
remove all empty entries from back (only) of the list.
Definition: l_word_list.h:269
const_iterator cbegin() const
generate, return const_iterator to front of list
Definition: l_word_list.h:375
~Word_list()
dtor releases memory of underlying C structure
Definition: l_word_list.h:296