summaryrefslogtreecommitdiff
path: root/shared/ossp_uuid/uuid++.cc
diff options
context:
space:
mode:
Diffstat (limited to 'shared/ossp_uuid/uuid++.cc')
-rw-r--r--shared/ossp_uuid/uuid++.cc301
1 files changed, 301 insertions, 0 deletions
diff --git a/shared/ossp_uuid/uuid++.cc b/shared/ossp_uuid/uuid++.cc
new file mode 100644
index 00000000..d710cef4
--- /dev/null
+++ b/shared/ossp_uuid/uuid++.cc
@@ -0,0 +1,301 @@
+/*
+** OSSP uuid - Universally Unique Identifier
+** Copyright (c) 2004-2008 Ralf S. Engelschall <rse@engelschall.com>
+** Copyright (c) 2004-2008 The OSSP Project <http://www.ossp.org/>
+**
+** This file is part of OSSP uuid, a library for the generation
+** of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/
+**
+** Permission to use, copy, modify, and distribute this software for
+** any purpose with or without fee is hereby granted, provided that
+** the above copyright notice and this permission notice appear in all
+** copies.
+**
+** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
+** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+** SUCH DAMAGE.
+**
+** uuid++.cc: library C++ API implementation
+*/
+
+#include <string.h>
+#include <stdarg.h>
+
+#include "uuid++.hh"
+
+/* standard constructor */
+uuid::uuid()
+{
+ uuid_rc_t rc;
+ if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+}
+
+/* copy constructor */
+uuid::uuid(const uuid &obj)
+{
+ /* Notice: the copy constructor is the same as the assignment
+ operator (with the object as the argument) below, except that
+ (1) no check for self-assignment is required, (2) no existing
+ internals have to be destroyed and (3) no return value is given back. */
+ uuid_rc_t rc;
+ if ((rc = uuid_clone(obj.ctx, &ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* extra constructor via C API object */
+uuid::uuid(const uuid_t *obj)
+{
+ uuid_rc_t rc;
+ if (obj == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ if ((rc = uuid_clone(obj, &ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* extra constructor via binary representation */
+uuid::uuid(const void *bin)
+{
+ uuid_rc_t rc;
+ if (bin == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ import(bin);
+ return;
+}
+
+/* extra constructor via string representation */
+uuid::uuid(const char *str)
+{
+ uuid_rc_t rc;
+ if (str == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ if ((rc = uuid_create(&ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ import(str);
+ return;
+}
+
+/* standard destructor */
+uuid::~uuid()
+{
+ uuid_destroy(ctx);
+ return;
+}
+
+/* assignment operator: import of other C++ API object */
+uuid &uuid::operator=(const uuid &obj)
+{
+ uuid_rc_t rc;
+ if (this == &obj)
+ return *this;
+ if ((rc = uuid_destroy(ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ if ((rc = uuid_clone(obj.ctx, &ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return *this;
+}
+
+/* assignment operator: import of other C API object */
+uuid &uuid::operator=(const uuid_t *obj)
+{
+ uuid_rc_t rc;
+ if (obj == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ if ((rc = uuid_clone(obj, &ctx)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return *this;
+}
+
+/* assignment operator: import of binary representation */
+uuid &uuid::operator=(const void *bin)
+{
+ if (bin == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ import(bin);
+ return *this;
+}
+
+/* assignment operator: import of string representation */
+uuid &uuid::operator=(const char *str)
+{
+ if (str == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ import(str);
+ return *this;
+}
+
+/* method: clone object */
+uuid uuid::clone(void)
+{
+ return new uuid(this);
+}
+
+/* method: loading existing UUID by name */
+void uuid::load(const char *name)
+{
+ uuid_rc_t rc;
+ if (name == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ if ((rc = uuid_load(ctx, name)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* method: making new UUID one from scratch */
+void uuid::make(unsigned int mode, ...)
+{
+ uuid_rc_t rc;
+ va_list ap;
+
+ va_start(ap, mode);
+ if ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5)) {
+ const uuid *ns = (const uuid *)va_arg(ap, const uuid *);
+ const char *name = (const char *)va_arg(ap, char *);
+ if (ns == NULL || name == NULL)
+ throw uuid_error_t(UUID_RC_ARG);
+ rc = uuid_make(ctx, mode, ns->ctx, name);
+ }
+ else
+ rc = uuid_make(ctx, mode);
+ va_end(ap);
+ if (rc != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* method: comparison for Nil UUID */
+int uuid::isnil(void)
+{
+ uuid_rc_t rc;
+ int rv;
+
+ if ((rc = uuid_isnil(ctx, &rv)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return rv;
+}
+
+/* method: comparison against other object */
+int uuid::compare(const uuid &obj)
+{
+ uuid_rc_t rc;
+ int rv;
+
+ if ((rc = uuid_compare(ctx, obj.ctx, &rv)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return rv;
+}
+
+/* method: comparison for equality */
+int uuid::operator==(const uuid &obj)
+{
+ return (compare(obj) == 0);
+}
+
+/* method: comparison for inequality */
+int uuid::operator!=(const uuid &obj)
+{
+ return (compare(obj) != 0);
+}
+
+/* method: comparison for lower-than */
+int uuid::operator<(const uuid &obj)
+{
+ return (compare(obj) < 0);
+}
+
+/* method: comparison for lower-than-or-equal */
+int uuid::operator<=(const uuid &obj)
+{
+ return (compare(obj) <= 0);
+}
+
+/* method: comparison for greater-than */
+int uuid::operator>(const uuid &obj)
+{
+ return (compare(obj) > 0);
+}
+
+/* method: comparison for greater-than-or-equal */
+int uuid::operator>=(const uuid &obj)
+{
+ return (compare(obj) >= 0);
+}
+
+/* method: import binary representation */
+void uuid::import(const void *bin)
+{
+ uuid_rc_t rc;
+ if ((rc = uuid_import(ctx, UUID_FMT_BIN, bin, UUID_LEN_BIN)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* method: import string or single integer value representation */
+void uuid::import(const char *str)
+{
+ uuid_rc_t rc;
+ if ((rc = uuid_import(ctx, UUID_FMT_STR, str, UUID_LEN_STR)) != UUID_RC_OK)
+ if ((rc = uuid_import(ctx, UUID_FMT_SIV, str, UUID_LEN_SIV)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return;
+}
+
+/* method: export binary representation */
+void *uuid::binary(void)
+{
+ uuid_rc_t rc;
+ void *bin = NULL;
+ if ((rc = uuid_export(ctx, UUID_FMT_BIN, &bin, NULL)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return bin;
+}
+
+/* method: export string representation */
+char *uuid::string(void)
+{
+ uuid_rc_t rc;
+ char *str = NULL;
+ if ((rc = uuid_export(ctx, UUID_FMT_STR, (void **)&str, NULL)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return str;
+}
+
+/* method: export single integer value representation */
+char *uuid::integer(void)
+{
+ uuid_rc_t rc;
+ char *str = NULL;
+ if ((rc = uuid_export(ctx, UUID_FMT_SIV, (void **)&str, NULL)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return str;
+}
+
+/* method: export textual summary representation */
+char *uuid::summary(void)
+{
+ uuid_rc_t rc;
+ char *txt = NULL;
+ if ((rc = uuid_export(ctx, UUID_FMT_TXT, (void **)&txt, NULL)) != UUID_RC_OK)
+ throw uuid_error_t(rc);
+ return txt;
+}
+
+/* method: return library version */
+unsigned long uuid::version(void)
+{
+ return uuid_version();
+}
+
bgstack15