LMMS
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
39
40Uuid::Uuid (const Uuid& other) noexcept
41{
42 memcpy (uuid, other.uuid, sizeof (uuid));
43}
44
45Uuid& Uuid::operator= (const Uuid& other) noexcept
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
69{
70 return Uuid ((const uint8*) nullptr);
71}
72
74{
75 for (auto i : uuid)
76 if (i != 0)
77 return false;
78
79 return true;
80}
81
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
101Uuid::Uuid (const String& uuidString)
102{
103 operator= (uuidString);
104}
105
106Uuid& Uuid::operator= (const String& uuidString)
107{
108 MemoryBlock mb;
109 mb.loadFromHexString (uuidString);
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
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
#define noexcept
Definition DistrhoDefines.h:72
static uint16 bigEndianShort(const void *bytes) noexcept
Definition ByteOrder.h:241
static uint32 bigEndianInt(const void *bytes) noexcept
Definition ByteOrder.h:239
static String toHexString(int number)
Definition String.cpp:1830
static constexpr uint16 bigEndianShort(const void *bytes) noexcept
Definition juce_ByteOrder.h:210
Definition juce_MemoryBlock.h:33
void ensureSize(const size_t minimumSize, bool initialiseNewSpaceToZero=false)
Definition juce_MemoryBlock.cpp:148
void copyTo(void *destData, int sourceOffset, size_t numBytes) const noexcept
Definition juce_MemoryBlock.cpp:242
void loadFromHexString(StringRef sourceHexString)
Definition juce_MemoryBlock.cpp:319
Definition juce_Random.h:35
Definition juce_String.h:53
uint64 hash() const noexcept
Definition juce_Uuid.cpp:137
Uuid()
Definition juce_Uuid.cpp:26
String toString() const
Definition juce_Uuid.cpp:87
~Uuid() noexcept
Definition juce_Uuid.cpp:38
uint8 getClockSeqAndReserved() const noexcept
Definition juce_Uuid.cpp:133
uint16 getTimeMid() const noexcept
Definition juce_Uuid.cpp:131
uint32 getTimeLow() const noexcept
Definition juce_Uuid.cpp:130
uint8 uuid[16]
Definition juce_Uuid.h:130
uint8 getClockSeqLow() const noexcept
Definition juce_Uuid.cpp:134
uint16 getTimeHighAndVersion() const noexcept
Definition juce_Uuid.cpp:132
String getHexRegion(int, int) const
Definition juce_Uuid.cpp:82
bool isNull() const noexcept
Definition juce_Uuid.cpp:73
String toDashedString() const
Definition juce_Uuid.cpp:92
uint64 getNode() const noexcept
Definition juce_Uuid.cpp:135
int compare(Uuid) const noexcept
Definition juce_Uuid.cpp:59
static Uuid null() noexcept
Definition juce_Uuid.cpp:68
register unsigned i
Definition inflate.c:1575
virtual ASIOError start()=0
Definition carla_juce.cpp:31
unsigned short uint16
Definition juce_MathsFunctions.h:41
unsigned long long uint64
Definition juce_MathsFunctions.h:56
unsigned int uint32
Definition juce_MathsFunctions.h:45
unsigned char uint8
Definition juce_MathsFunctions.h:37
void zeromem(void *memory, size_t numBytes) noexcept
Definition juce_Memory.h:28
static bool diff(const std::string fn1, const std::string fn2)
Definition playertest.cpp:161
png_uint_32 length
Definition png.c:2247
int n
Definition crypt.c:458
memcpy(hh, h, RAND_HEAD_LEN)
int r
Definition crypt.c:458
int result
Definition process.c:1455
#define const
Definition zconf.h:137