Unverified Commit 4b91ab0d authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

add utils::trim() function to remove leading and trailing whitespace from string

parent 4a28a708
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -348,6 +348,19 @@ tagint utils::tnumeric(const char *file, int line, const char *str,
  return ATOTAGINT(str);
}

/* ----------------------------------------------------------------------
   Return string without leading or trailing whitespace
------------------------------------------------------------------------- */

std::string utils::trim(const std::string & line) {
  int beg = re_match(line.c_str(),"\\S+");
  int end = re_match(line.c_str(),"\\s+$");
  if (beg < 0) beg = 0;
  if (end < 0) end = line.size();

  return line.substr(beg,end-beg);
}

/* ----------------------------------------------------------------------
   Return string without trailing # comment
------------------------------------------------------------------------- */
+7 −0
Original line number Diff line number Diff line
@@ -143,6 +143,13 @@ namespace LAMMPS_NS {
    tagint tnumeric(const char *file, int line, const char *str,
                    bool do_abort, LAMMPS *lmp);

    /**
     * \brief Trim leading and trailing whitespace. Like TRIM() in Fortran.
     * \param line string that should be trimmed
     * \return new string without whitespace (string)
     */
    std::string trim(const std::string &line);

    /**
     * \brief Trim anything from '#' onward
     * \param line string that should be trimmed
+18 −0
Original line number Diff line number Diff line
@@ -25,6 +25,24 @@ using ::testing::EndsWith;
using ::testing::Eq;
using ::testing::StrEq;

TEST(Utils, trim)
{
    auto trimmed = utils::trim("\t some text");
    ASSERT_THAT(trimmed, StrEq("some text"));

    trimmed = utils::trim("some text \r\n");
    ASSERT_THAT(trimmed, StrEq("some text"));

    trimmed = utils::trim("\v some text \f");
    ASSERT_THAT(trimmed, StrEq("some text"));

    trimmed = utils::trim("   some\t text    ");
    ASSERT_THAT(trimmed, StrEq("some\t text"));

    trimmed = utils::trim("  \t\n   ");
    ASSERT_THAT(trimmed, StrEq(""));
}

TEST(Utils, trim_comment)
{
    auto trimmed = utils::trim_comment("some text # comment");