aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/poco/Foundation/include/Poco/UUIDGenerator.h
blob: ad1194fddc1b2e9193f92bcb17ec8e96a594aa07 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// 
// UUIDGenerator.h 
// 
// Library: Foundation 
// Package: UUID 
// Module:  UUID 
// 
// Definition of the UUIDGenerator class. 
// 
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. 
// and Contributors. 
// 
// SPDX-License-Identifier:	BSL-1.0 
// 
 
 
#ifndef Foundation_UUIDGenerator_INCLUDED 
#define Foundation_UUIDGenerator_INCLUDED 
 
 
#include "Poco/Foundation.h" 
#include "Poco/UUID.h" 
#include "Poco/Mutex.h" 
#include "Poco/Random.h" 
#include "Poco/Timestamp.h" 
#include "Poco/Environment.h" 
 
 
namespace Poco { 
 
 
class DigestEngine; 
 
 
class Foundation_API UUIDGenerator 
	/// This class implements a generator for Universal Unique Identifiers, 
	/// as specified in Appendix A of the DCE 1.1 Remote Procedure 
	/// Call Specification (http://www.opengroup.org/onlinepubs/9629399/), 
	/// RFC 2518 (WebDAV), section 6.4.1 and the UUIDs and GUIDs internet 
	/// draft by Leach/Salz from February, 1998  
	/// (http://ftp.ics.uci.edu/pub/ietf/webdav/uuid-guid/draft-leach-uuids-guids-01.txt) 
{ 
public: 
	UUIDGenerator(); 
		/// Creates the UUIDGenerator. 
 
	~UUIDGenerator(); 
		/// Destroys the UUIDGenerator. 
 
	UUID create(); 
		/// Creates a new time-based UUID, using the MAC address of 
		/// one of the system's ethernet adapters. 
		/// 
		/// Throws a SystemException if no MAC address can be 
		/// obtained. 
	 
	UUID createFromName(const UUID& nsid, const std::string& name); 
		/// Creates a name-based UUID. 
 
	UUID createFromName(const UUID& nsid, const std::string& name, DigestEngine& de); 
		/// Creates a name-based UUID, using the given digest engine. 
		/// 
		/// Note: in order to create a standard-compliant UUID, the given DigestEngine 
		/// must be either an instance of MD5Engine or SHA1Engine. The version field of 
		/// the UUID will be set accordingly. 
 
	UUID createFromName(const UUID& nsid, const std::string& name, DigestEngine& de, UUID::Version version); 
		/// Creates a name-based UUID, using the given digest engine and version. 
		 
	UUID createRandom(); 
		/// Creates a random UUID. 
		 
	UUID createOne(); 
		/// Tries to create and return a time-based UUID (see create()), and,  
		/// if that does not work due to the unavailability of a MAC address, 
		/// creates and returns a random UUID (see createRandom()). 
		/// 
		/// The UUID::version() method can be used to determine the actual kind of 
		/// the UUID generated. 
 
	static UUIDGenerator& defaultGenerator(); 
		/// Returns a reference to the default UUIDGenerator. 
		 
protected: 
	Timestamp::UtcTimeVal timeStamp(); 
	void getNode(); 
 
private: 
	FastMutex           _mutex; 
	Random              _random; 
	Timestamp           _lastTime; 
	int                 _ticks; 
	Environment::NodeId _node; 
	bool                _haveNode; 
	 
	UUIDGenerator(const UUIDGenerator&); 
	UUIDGenerator& operator = (const UUIDGenerator&); 
}; 
 
 
} // namespace Poco 
 
 
#endif // Foundation_UUIDGenerator_INCLUDED