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
|
/*=========================================================================
Program: GDCM (Grassroots DICOM). A DICOM library
Copyright (c) 2006-2011 Mathieu Malaterre
All rights reserved.
See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "gdcmUIDGenerator.h"
#include <iostream>
#include <string>
#include <set>
/**
This is a toy program just to check how good the UID are uniq.
The rule of thumb is that you should not have a long Root UID otherwise the
algorithm might find twice the same UID...
*/
int main()
{
gdcm::UIDGenerator uid;
//const char myroot[] = "9876543210.9876543210.9876543210.9876543210.9876543210"; // fails in ~40000 tries
const char myroot[] = "9876543210.9876543210.9876543210";
uid.SetRoot( myroot );
std::set<std::string> uids;
uint64_t wrap = 0;
uint64_t c = 0;
while(1)
{
const char *unique = uid.Generate();
//std::cout << unique << std::endl;
if( c % 10000 == 0 )
{
std::cout << "wrap=" << wrap << ",c=" << c << std::endl;
}
++c;
if( c == 0 )
{
wrap++;
}
if ( uids.count(unique) == 1 )
{
std::cerr << "Failed with: " << unique << std::endl;
return 1;
}
uids.insert( unique );
}
}
|