- // The code works as follow:
- // echo "gdcm" | od -b
- // 0000000 147 144 143 155 012
- // Therefore we return
- // radical + 147.144.143.155 + IP + time()
- std::string radical = root;
- if( !root.size() ) //anything better ?
- {
- radical = "0.0."; // Is this really usefull ?
- }
- // else
- // A root was specified use it to forge our new UID:
- radical += "147.144.143.155"; // gdcm
- radical += ".";
- radical += Util::GetIPAddress();
- radical += ".";
- radical += Util::GetCurrentDate();
- radical += ".";
- radical += Util::GetCurrentTime();
-
- return radical;
+ std::string prefix = root;
+ std::string append;
+ if( root.empty() )
+ {
+ // No root was specified use "GDCM" then
+ // echo "gdcm" | od -b
+ // 0000000 147 144 143 155 012
+ prefix = "147.144.143.155"; // special easter egg
+ }
+ // else
+ // A root was specified use it to forge our new UID:
+ append += ".";
+ append += Util::GetMACAddress();
+ append += ".";
+ //append += Util::GetCurrentDate();
+ //append += ".";
+ //append += Util::GetCurrentTime();
+ append += Util::GetCurrentDateTime();
+
+ // If append is too long we need to rehash it
+ if( (prefix + append).size() > 64 )
+ {
+ gdcmErrorMacro( "Size of UID is too long." );
+ // we need a hash function to truncate this number
+ // if only md5 was cross plateform
+ // MD5(append);
+ }
+
+ return prefix + append;
+}
+
+unsigned int Util::GetCurrentThreadID()
+{
+// FIXME the implementation is far from complete
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__)
+ return (unsigned int)GetCurrentThreadId();
+#endif
+#ifdef __linux__
+ return 0;
+ // Doesn't work on fedora, but is in the man page...
+ //return (unsigned int)gettid();
+#endif
+#ifdef __sun
+ return (unsigned int)thr_self();
+#endif
+}
+
+unsigned int Util::GetCurrentProcessID()
+{
+#if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__)
+ // NOTE: There is also a _getpid()...
+ return (unsigned int)GetCurrentProcessId();
+#else
+ // get process identification, POSIX
+ return (unsigned int)getpid();
+#endif
+