summaryrefslogtreecommitdiffstats
path: root/debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp')
-rw-r--r--debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp140
1 files changed, 140 insertions, 0 deletions
diff --git a/debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp b/debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp
new file mode 100644
index 00000000..704bc091
--- /dev/null
+++ b/debian/uncrustify-trinity/uncrustify-trinity-0.72.0/src/logmask.cpp
@@ -0,0 +1,140 @@
+/**
+ * @file logmask.cpp
+ *
+ * Functions to convert between a string and a severity mask.
+ *
+ * @author Ben Gardner
+ * @license GPL v2+
+ */
+
+#include "logmask.h"
+
+#include "unc_ctype.h"
+
+#include <cstdio> // snprintf()
+#include <cstdlib> // strtoul()
+
+#ifdef DEVELOP_ONLY
+
+
+/*
+ * the test suite Coveralls: https://coveralls.io
+ * will complains because these functions are only
+ * used at developement time.
+ * Don't worry about unsed lines for the functions:
+ * logmask_to_str
+ */
+char *logmask_to_str(const log_mask_t &mask, char *buf, int size)
+{
+ if (buf == nullptr || size <= 0)
+ {
+ return(buf);
+ }
+ int last_sev = -1;
+ bool is_range = false;
+ int len = 0;
+
+ for (int sev = 0; sev < 256; sev++)
+ {
+ if (logmask_test(mask, static_cast<log_sev_t>(sev)))
+ {
+ if (last_sev == -1)
+ {
+ len += snprintf(&buf[len], size - len, "%d,", sev);
+ }
+ else
+ {
+ is_range = true;
+ }
+ last_sev = sev;
+ }
+ else
+ {
+ if (is_range)
+ {
+ buf[len - 1] = '-'; // change last comma to a dash
+ len += snprintf(&buf[len], size - len, "%d,", last_sev);
+ is_range = false;
+ }
+ last_sev = -1;
+ }
+ }
+
+ // handle a range that ends on the last bit
+ if (is_range && last_sev != -1)
+ {
+ buf[len - 1] = '-'; // change last comma to a dash
+ len += snprintf(&buf[len], size - len, "%d", last_sev);
+ }
+ else
+ {
+ // Eat the last comma
+ if (len > 0)
+ {
+ len--;
+ }
+ }
+ buf[len] = 0;
+
+ return(buf);
+} // logmask_to_str
+#endif /* DEVELOP_ONLY */
+
+
+void logmask_from_string(const char *str, log_mask_t &mask)
+{
+ if (str == nullptr)
+ {
+ return;
+ }
+ logmask_set_all(mask, false); // Start with a clean mask
+
+ // If the first character is 'a' or 'A', set all severities
+ if (unc_toupper(*str) == 'A')
+ {
+ logmask_set_all(mask, true);
+ str++;
+ }
+ char *ptmp;
+ bool was_dash = false;
+ int last_level = -1;
+
+ while (*str != 0) // check string until termination character
+ {
+ if (unc_isspace(*str)) // ignore spaces and go on with next character
+ {
+ str++;
+ continue;
+ }
+
+ if (unc_isdigit(*str))
+ {
+ int level = strtoul(str, &ptmp, 10);
+ str = ptmp;
+
+ logmask_set_sev(mask, static_cast<log_sev_t>(level), true);
+
+ if (was_dash)
+ {
+ for (int idx = last_level + 1; idx < level; idx++)
+ {
+ logmask_set_sev(mask, static_cast<log_sev_t>(idx), true);
+ }
+
+ was_dash = false;
+ }
+ last_level = level;
+ }
+ else if (*str == '-') // a dash marks all bits until the next number
+ {
+ was_dash = true;
+ str++;
+ }
+ else // probably a comma
+ {
+ last_level = -1;
+ was_dash = false;
+ str++;
+ }
+ }
+} // logmask_from_string