Author Topic: GUID generation : Slick-C version  (Read 9321 times)

Matthew

  • SlickEdit Team Member
  • Senior Community Member
  • *
  • Posts: 990
  • Hero Points: 44
GUID generation : Slick-C version
« on: July 31, 2006, 05:20:58 PM »
The earlier post on uuidgen prompted me to share my own macro implementation that I created for my own use a few months ago. This  macro implementation is self-contained, and doesn't shell out to any other utilties.

There are 3 commands and 1 function for generating GUIDs:

insert_guid(_str format = 'B'); (command)
This generates a new GUID, formatted according to format specifier parameter, and inserts it at the current position in the buffer. Default is Brace Format.
Use it on the command line like so:
Code: [Select]
insert-guid g
copy_guid(_str format = 'B'); (command)
Same as above, but places the results on the clipboard. This way you can generate a GUID without having an edit buffer open. On the command line:
Code: [Select]
copy-guid b
gui_insert_guid(); (command)
Shows a small dialog, allowing you to generate multiple GUIDs, or to insert the same GUID in multiple string formats.

_str guid_create_string(_str format); (function)
Works the same as insert_guid, but returns the string. For use in your own macro functions and forms.

The string formats for GUID output are documented in the source guidgen.e, at the top, in the Javadoc for insert_guid. But to pique
your interest...
  • 'B' - Brace format: {F3410386-1DBB-4035-A293-440A106A6665}
  • 'G' - General format: F3410386-1DBB-4035-A293-440A106A6665
  • 'P' - Paren format: (F3410386-1DBB-4035-A293-440A106A6665)
  • 'N' - Number format: F34103861DBB4035A293440A106A6665
  • 'C' - Const declaration: static const GUID <<name>> = { 0xf3410386, 0x1dbb, 0x4035, { 0xa2, 0x93, 0x44, 0xa, 0x10, 0x6a, 0x66, 0x65 } };
  • 'D' - DEFINE_GUID macro: DEFINE_GUID(<<name>>, 0x17342D4B, 0x906F, 0x4706, 0x0F, 0xAC, 0xC5, 0x8E, 0x4D, 0xE7, 0x32, 0x29);
  • 'O' - IMPLEMENT_OLECREATE macro: IMPLEMENT_OLECREATE(<<class>>, <<external_name>>, 0xf3410386, 0x1dbb, 0x4035, 0xa2, 0x93, 0x44, 0xa, 0x10, 0x6a, 0x66, 0x65);

In my own testing I have generated over 50,000 GUIDs without a duplicate, so the algorithm looks to be holding up so far.
But if you'd like to verify the reliability before using in your own code, I have provided some unit testing commands as well.
Open an empy edit buffer and run the following command line:
Code: [Select]
guid-unittest-duplicates 200, where 200 is the number of GUIDs you want to create. This will populate the
buffer with the requested number of GUIDs in brace format using insert_guid('b');. Any number less than
2000 should complete in a reasonable amount of time. 2000 takes around 5 seconds on my Pentium M 2.0 GHz, 1 GB RAM. The results of
the unit testing are displayed in the VSAPI message window since it uses the say() funtion. You can run the unit test multiple times in
the same edit buffer, and it will append the results to the end of the previous test.

For those of you interested in such things, the GUIDs generated are created (and marked) as version 4. This means
that all bytes of the GUID were created using a random number, and does not use a MAC address as a basis.

hs2

  • Senior Community Member
  • Posts: 2761
  • Hero Points: 292
Re: GUID generation : Slick-C version
« Reply #1 on: July 31, 2006, 08:19:11 PM »
Great solution ! [thumb-up]
And thanks for this sneak preview - I assume we'll see this again in v12 'Tools' menu, right ?

HS2