DYT/Tool/3rdParty_x64/include/dcmtk/ofstd/ofuuid.h
2024-11-22 23:19:31 +08:00

144 lines
4.5 KiB
C++

/*
*
* Copyright (C) 2011-2013, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: ofstd
*
* Author: Uli Schlachter
*
* Purpose: Definitions for generating UUIDs, as defined by ITU-T X.667
*
*/
#ifndef OFUUID_H
#define OFUUID_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/ofstd/oftypes.h"
#include "dcmtk/ofstd/ofstring.h"
#include "dcmtk/ofstd/ofstream.h"
/** Helper class for generating and storing UUIDs, as specified in ITU-T X.667.
* A UUID is an Universally Unique IDentifier. If UUIDs are generated
* correctly, it's almost impossible that the same UUID is generated twice.
*/
class DCMTK_OFSTD_EXPORT OFUUID {
public:
/** The possible ways to represent a UUID */
enum E_Representation {
/** The UUID is printed as one, long integer in base 10 (up to 39 digits long) */
ER_RepresentationInteger,
/** The UUID is printed in hexadecimal notation with hyphens (-) separating groups */
ER_RepresentationHex,
/** The UUID is printed as one, long integer with the prefix "2.25." */
ER_RepresentationOID,
/** The UUID is printed in hexadecimal notation with the prefix "urn:uuid:" */
ER_RepresentationURN,
/** The default representation that is used when none is given */
ER_RepresentationDefault = ER_RepresentationHex
};
struct BinaryRepresentation {
Uint8 value[16];
};
/** Default constructor. Generates a new UUID. */
OFUUID();
/** Construct a new UUID from its binary representation.
* @param val the binary representation
* @see getBinaryRepresentation
*/
OFUUID(const struct BinaryRepresentation& val);
/* This class uses the default assignment operator */
/** Generate a new UUID. The old UUID is discarded. */
void generate();
/** Get the string representation of this UUID.
* @param result string instance to save the result in
* @param representation the representation to use
* @return result
*/
OFString& toString(OFString& result, E_Representation representation = ER_RepresentationDefault) const;
/** Write the string representation of this UUID to a stream.
* @param stream the output stream to write to
* @param representation the representation to use
* @return stream
*/
STD_NAMESPACE ostream& print(STD_NAMESPACE ostream& stream, E_Representation representation = ER_RepresentationDefault) const;
/** Get the binary representation of this UUID.
* @param val the structure where the result should be saved to
*/
void getBinaryRepresentation(struct BinaryRepresentation& val) const;
/** Compare this instance to another OFUUID instance.
* @param other the other instance
* @return OFTrue if both UUIDs are equal.
*/
OFBool operator==(const OFUUID& other) const;
/** Compare this instance to another OFUUID instance.
* @param other the other instance
* @return OFFalse if both UUIDs are equal.
*/
OFBool operator!=(const OFUUID& other) const
{
return !(*this == other);
}
private:
/** Print the integer representation to the given stream.
* @param stream stream to print to.
*/
void printInteger(STD_NAMESPACE ostream& stream) const;
/** Print the hexadecimal representation to the given stream.
* @param stream stream to print to.
*/
void printHex(STD_NAMESPACE ostream& stream) const;
/* The fields of an UUID, as defined by ITU-T X.667 */
/** Octets 0-3 of the time field */
Uint32 time_low;
/** Octets 4-5 of the time field */
Uint16 time_mid;
/** 4 bits for the version and the 12 highest bits of the time */
Uint16 version_and_time_high;
/** 2 bits for the variant and the 6 highest bits of the clock sequence */
Uint8 variant_and_clock_seq_high;
/** The lowest 8 bits of the clock sequence */
Uint8 clock_seq_low;
/** The node value in the form of a MAC address */
Uint8 node[6];
};
/** Print an UUID to a stream with OFUUID::ER_RepresentationDefault.
* @param stream the output stream to use
* @param uuid the UUID to print
* @return stream
*/
static inline STD_NAMESPACE ostream& operator<< (STD_NAMESPACE ostream& stream, const OFUUID& uuid)
{
return uuid.print(stream);
}
#endif