JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_Uuid.cpp
Go to the documentation of this file.
1 /*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23namespace juce
24{
25
27{
28 Random r;
29
30 for (size_t i = 0; i < sizeof (uuid); ++i)
31 uuid[i] = (uint8) (r.nextInt (256));
32
33 // To make it RFC 4122 compliant, need to force a few bits...
34 uuid[6] = (uuid[6] & 0x0f) | 0x40;
35 uuid[8] = (uuid[8] & 0x3f) | 0x80;
36}
37
38Uuid::~Uuid() noexcept {}
39
40Uuid::Uuid (const Uuid& other) noexcept
41{
42 memcpy (uuid, other.uuid, sizeof (uuid));
43}
44
46{
47 memcpy (uuid, other.uuid, sizeof (uuid));
48 return *this;
49}
50
51bool Uuid::operator== (const Uuid& other) const noexcept { return memcmp (uuid, other.uuid, sizeof (uuid)) == 0; }
52bool Uuid::operator!= (const Uuid& other) const noexcept { return ! operator== (other); }
53
54bool Uuid::operator< (const Uuid& other) const noexcept { return compare (other) < 0; }
55bool Uuid::operator> (const Uuid& other) const noexcept { return compare (other) > 0; }
56bool Uuid::operator<= (const Uuid& other) const noexcept { return compare (other) <= 0; }
57bool Uuid::operator>= (const Uuid& other) const noexcept { return compare (other) >= 0; }
58
59int Uuid::compare (Uuid other) const noexcept
60{
61 for (size_t i = 0; i < sizeof (uuid); ++i)
62 if (int diff = uuid[i] - (int) other.uuid[i])
63 return diff > 0 ? 1 : -1;
64
65 return 0;
66}
67
68Uuid Uuid::null() noexcept
69{
70 return Uuid ((const uint8*) nullptr);
71}
72
73bool Uuid::isNull() const noexcept
74{
75 for (auto i : uuid)
76 if (i != 0)
77 return false;
78
79 return true;
80}
81
82String Uuid::getHexRegion (int start, int length) const
83{
84 return String::toHexString (uuid + start, length, 0);
85}
86
88{
89 return getHexRegion (0, 16);
90}
91
93{
94 return getHexRegion (0, 4)
95 + "-" + getHexRegion (4, 2)
96 + "-" + getHexRegion (6, 2)
97 + "-" + getHexRegion (8, 2)
98 + "-" + getHexRegion (10, 6);
99}
100
105
107{
110 mb.ensureSize (sizeof (uuid), true);
111 mb.copyTo (uuid, 0, sizeof (uuid));
112 return *this;
113}
114
115Uuid::Uuid (const uint8* const rawData) noexcept
116{
117 operator= (rawData);
118}
119
120Uuid& Uuid::operator= (const uint8* const rawData) noexcept
121{
122 if (rawData != nullptr)
123 memcpy (uuid, rawData, sizeof (uuid));
124 else
125 zeromem (uuid, sizeof (uuid));
126
127 return *this;
128}
129
133uint8 Uuid::getClockSeqAndReserved() const noexcept { return uuid[8]; }
134uint8 Uuid::getClockSeqLow() const noexcept { return uuid[9]; }
135uint64 Uuid::getNode() const noexcept { return (((uint64) ByteOrder::bigEndianShort (uuid + 10)) << 32) + ByteOrder::bigEndianInt (uuid + 12); }
136
138{
139 uint64 result = 0;
140
141 for (auto n : uuid)
142 result = ((uint64) 101) * result + n;
143
144 return result;
145}
146
147} // namespace juce
static constexpr uint32 bigEndianInt(const void *bytes) noexcept
Turns 4 bytes into a big-endian integer.
static constexpr uint16 bigEndianShort(const void *bytes) noexcept
Turns 2 bytes into a big-endian integer.
A class to hold a resizable block of raw data.
void loadFromHexString(StringRef sourceHexString)
Parses a string of hexadecimal numbers and writes this data into the memory block.
A random number generator.
Definition juce_Random.h:35
int nextInt() noexcept
Returns the next random 32 bit integer.
The JUCE String class!
Definition juce_String.h:53
static String toHexString(IntegerType number)
Returns a string representing this numeric value in hexadecimal.
A universally unique 128-bit identifier.
Definition juce_Uuid.h:39
uint64 hash() const noexcept
Returns a hash of the UUID.
Uuid()
Creates a new unique ID, compliant with RFC 4122 version 4.
Definition juce_Uuid.cpp:26
String toString() const
Returns a stringified version of this UUID.
Definition juce_Uuid.cpp:87
Uuid & operator=(const Uuid &) noexcept
Copies another UUID.
Definition juce_Uuid.cpp:45
~Uuid() noexcept
Destructor.
Definition juce_Uuid.cpp:38
uint8 getClockSeqAndReserved() const noexcept
Returns the clock-seq-and-reserved section of the UUID.
uint16 getTimeMid() const noexcept
Returns the time-mid section of the UUID.
uint32 getTimeLow() const noexcept
Returns the time-low section of the UUID.
uint8 getClockSeqLow() const noexcept
Returns the clock-seq-low section of the UUID.
uint16 getTimeHighAndVersion() const noexcept
Returns the time-high-and-version section of the UUID.
bool isNull() const noexcept
Returns true if the ID is zero.
Definition juce_Uuid.cpp:73
String toDashedString() const
Returns a stringified version of this UUID, separating it into sections with dashes.
Definition juce_Uuid.cpp:92
uint64 getNode() const noexcept
Returns the node section of the UUID.
static Uuid null() noexcept
Returns a null Uuid object.
Definition juce_Uuid.cpp:68
memcmp
memcpy
JUCE Namespace.
unsigned short uint16
A platform-independent 16-bit unsigned integer type.
unsigned long long uint64
A platform-independent 64-bit unsigned integer type.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition juce_Memory.h:88
unsigned int uint32
A platform-independent 32-bit unsigned integer type.
unsigned char uint8
A platform-independent 8-bit unsigned integer type.
void zeromem(void *memory, size_t numBytes) noexcept
Fills a block of memory with zeros.
Definition juce_Memory.h:28