00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COMMON_STR_LIST_H
00021 #define COMMON_STR_LIST_H
00022
00023 #include <common/str.h>
00024
00035 class string_list_ty
00036 {
00037 public:
00041 ~string_list_ty();
00042
00047 string_list_ty();
00048
00052 string_list_ty(const string_list_ty &);
00053
00057 string_list_ty &operator=(const string_list_ty &);
00058
00068 bool member(string_ty *arg) const;
00069
00080 bool member_nocase(string_ty *arg) const;
00081
00086 size_t size() const { return nstrings; }
00087
00096 bool empty() const { return (nstrings == 0); }
00097
00102 string_ty *operator[](size_t n) const { return string[n]; }
00103
00121 string_ty *unsplit(size_t start, size_t finish, const char *sep) const;
00122
00136 string_ty *unsplit(const char *sep = 0) const;
00137
00148 void push_front(string_ty *arg);
00149
00159 void push_front(const string_list_ty &arg);
00160
00168 void push_back(string_ty *arg);
00169
00178 void push_back_unique(string_ty *arg);
00179
00187 void push_back(const string_list_ty &arg);
00188
00196 void push_back_unique(const string_list_ty &arg);
00197
00213 void split(string_ty *arg, const char *sep = 0, bool white = false);
00214
00223 void remove(string_ty *arg);
00224
00233 void remove(const string_list_ty &arg);
00234
00239 void clear();
00240
00245 string_ty *front() { return (nstrings ? string[0] : 0); }
00246
00251 string_ty *back() { return (nstrings ? string[nstrings - 1] : 0); }
00252
00257 void pop_front();
00258
00263 void pop_back();
00264
00273 bool equal(const string_list_ty &arg) const;
00274
00288 bool subset(const string_list_ty &arg) const;
00289
00295 void sort();
00296
00302 void sort_nocase();
00303
00309 void sort_version();
00310
00315 string_list_ty quote_shell() const;
00316
00324 bool validate() const;
00325
00331 string_list_ty intersection(const string_list_ty &rhs) const;
00332
00333
00334 size_t nstrings;
00335 size_t nstrings_max;
00336 string_ty **string;
00337 };
00338
00343 inline DEPRECATED int
00344 string_list_member(const string_list_ty *slp, string_ty *s)
00345 {
00346 return slp->member(s);
00347 }
00348
00364 inline DEPRECATED string_ty *
00365 wl2str(const string_list_ty *slp, int start, int finish, const char *sep)
00366 {
00367 return slp->unsplit(start, finish, sep);
00368 }
00369
00388 inline DEPRECATED void
00389 str2wl(string_list_ty *slp, string_ty *arg, const char *sep, int white)
00390 {
00391 slp->split(arg, sep, white);
00392 }
00393
00403 inline DEPRECATED void
00404 string_list_prepend(string_list_ty *lhs, string_ty *rhs)
00405 {
00406 lhs->push_front(rhs);
00407 }
00408
00418 inline DEPRECATED void
00419 string_list_prepend_list(string_list_ty *lhs, const string_list_ty *rhs)
00420 {
00421 lhs->push_front(*rhs);
00422 }
00423
00433 inline DEPRECATED void
00434 string_list_append(string_list_ty *lhs, string_ty *rhs)
00435 {
00436 lhs->push_back(rhs);
00437 }
00438
00448 inline DEPRECATED void
00449 string_list_append_list(string_list_ty *lhs, const string_list_ty *rhs)
00450 {
00451 lhs->push_back(*rhs);
00452 }
00453
00464 inline DEPRECATED void
00465 string_list_append_unique(string_list_ty *lhs, string_ty *rhs)
00466 {
00467 lhs->push_back_unique(rhs);
00468 }
00469
00480 inline DEPRECATED void
00481 string_list_append_list_unique(string_list_ty *lhs, const string_list_ty *rhs)
00482 {
00483 lhs->push_back_unique(*rhs);
00484 }
00485
00492 inline DEPRECATED void
00493 string_list_copy(string_list_ty *lhs, const string_list_ty *rhs)
00494 {
00495 *lhs = *rhs;
00496 }
00497
00504 inline DEPRECATED void
00505 string_list_remove(string_list_ty *slp, string_ty *s)
00506 {
00507 slp->remove(s);
00508 }
00509
00519 inline DEPRECATED void
00520 string_list_remove_list(string_list_ty *lhs, const string_list_ty *rhs)
00521 {
00522 lhs->remove(*rhs);
00523 }
00524
00530 inline DEPRECATED void
00531 string_list_destructor(string_list_ty *slp)
00532 {
00533
00534
00535 slp->clear();
00536 }
00537
00543 inline DEPRECATED void
00544 string_list_constructor(string_list_ty *slp)
00545 {
00546
00547
00548 slp->clear();
00549 }
00550
00560 inline bool
00561 operator==(const string_list_ty &lhs, const string_list_ty &rhs)
00562 {
00563 return lhs.equal(rhs);
00564 }
00565
00566
00576 inline bool
00577 operator!=(const string_list_ty &lhs, const string_list_ty &rhs)
00578 {
00579 return !lhs.equal(rhs);
00580 }
00581
00590 inline DEPRECATED int
00591 string_list_subset(const string_list_ty *lhs, const string_list_ty *rhs)
00592 {
00593 return lhs->subset(*rhs);
00594 }
00595
00601 inline DEPRECATED void
00602 string_list_sort(string_list_ty *slp)
00603 {
00604 slp->sort();
00605 }
00606
00617 inline DEPRECATED void
00618 string_list_quote_shell(string_list_ty *lhs, const string_list_ty *rhs)
00619 {
00620 *lhs = rhs->quote_shell();
00621 }
00622
00627 inline void
00628 operator+=(string_list_ty &lhs, const string_list_ty &rhs)
00629 {
00630 lhs.push_back_unique(rhs);
00631 }
00632
00637 inline string_list_ty
00638 operator+(const string_list_ty &lhs, const string_list_ty &rhs)
00639 {
00640 string_list_ty result;
00641 result.push_back_unique(lhs);
00642 result.push_back_unique(rhs);
00643 return result;
00644 }
00645
00650 inline void
00651 operator-=(string_list_ty &lhs, const string_list_ty &rhs)
00652 {
00653 lhs.remove(rhs);
00654 }
00655
00660 inline string_list_ty
00661 operator-(const string_list_ty &lhs, const string_list_ty &rhs)
00662 {
00663 string_list_ty result;
00664 result.push_back_unique(lhs);
00665 result.remove(rhs);
00666 return result;
00667 }
00668
00673 inline void
00674 operator*=(string_list_ty &lhs, const string_list_ty &rhs)
00675 {
00676 lhs = lhs.intersection(rhs);
00677 }
00678
00683 inline string_list_ty
00684 operator*(const string_list_ty &lhs, const string_list_ty &rhs)
00685 {
00686 return lhs.intersection(rhs);
00687 }
00688
00690 #endif // COMMON_STR_LIST_H