sift.cpp 998 B

123456789101112131415161718192021222324252627282930313233343536
  1. //
  2. // $Id$
  3. //
  4. #include<__vic/string_utils.h>
  5. #include<__vic/set_of_chars.h>
  6. namespace __vic {
  7. namespace {
  8. //----------------------------------------------------------------------------
  9. class is_trash
  10. {
  11. set_of_chars trash_chars;
  12. public:
  13. explicit is_trash(const char *trash) : trash_chars(trash) {}
  14. bool operator()(char ch) const { return trash_chars.contains(ch); }
  15. };
  16. //----------------------------------------------------------------------------
  17. } // namespace
  18. //----------------------------------------------------------------------------
  19. char *sift(char *st, const char *trash_chars)
  20. {
  21. if(trash_chars) impl::sift_if(st, is_trash(trash_chars));
  22. return st;
  23. }
  24. //----------------------------------------------------------------------------
  25. std::string &sift(std::string &st, const char *trash_chars)
  26. {
  27. if(trash_chars) impl::sift_if(st, is_trash(trash_chars));
  28. return st;
  29. }
  30. //----------------------------------------------------------------------------
  31. } // namespace