summaryrefslogtreecommitdiffstats
path: root/src/uscxml/util/UUID.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/uscxml/util/UUID.cpp')
-rw-r--r--src/uscxml/util/UUID.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/uscxml/util/UUID.cpp b/src/uscxml/util/UUID.cpp
new file mode 100644
index 0000000..34e3e75
--- /dev/null
+++ b/src/uscxml/util/UUID.cpp
@@ -0,0 +1,70 @@
+/**
+ * @file
+ * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de)
+ * @copyright Simplified BSD
+ *
+ * @cond
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the FreeBSD license as published by the FreeBSD
+ * project.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * You should have received a copy of the FreeBSD license along with this
+ * program. If not, see <http://www.opensource.org/licenses/bsd-license>.
+ * @endcond
+ */
+
+#include "UUID.h"
+#include <sstream>
+#include <boost/uuid/uuid_io.hpp>
+
+namespace uscxml {
+boost::uuids::random_generator UUID::uuidGen;
+
+std::string UUID::getUUID() {
+ boost::uuids::uuid uuid = uuidGen();
+ std::ostringstream os;
+ os << uuid;
+ return os.str();
+}
+
+bool UUID::isUUID(const std::string& uuid) {
+ if (uuid.size() != 36)
+ return false;
+
+ if (uuid[8] != '-' || uuid[13] != '-' || uuid[18] != '-' || uuid[23] != '-')
+ return false;
+
+ for (size_t i = 0; i < 36; i++) {
+ if (i == 8 || i == 13 || i == 18 || i ==23)
+ continue;
+
+ char c = uuid[i];
+ if (c == 'a' ||
+ c == 'b' ||
+ c == 'c' ||
+ c == 'd' ||
+ c == 'e' ||
+ c == 'f' ||
+ c == '0' ||
+ c == '1' ||
+ c == '2' ||
+ c == '3' ||
+ c == '4' ||
+ c == '5' ||
+ c == '6' ||
+ c == '7' ||
+ c == '8' ||
+ c == '9') {
+ continue;
+ } else {
+ return false;
+ }
+ }
+ return true;
+}
+
+} \ No newline at end of file