From: <ai...@us...> - 2014-07-17 20:54:16
|
Revision: 192 http://sourceforge.net/p/lasi/code/192 Author: airwin Date: 2014-07-17 20:54:08 +0000 (Thu, 17 Jul 2014) Log Message: ----------- Change from using rand_r to generate unique glyph name for glyphs without names to using a more human-understandable unique glyph name, i.e., glyph_1, glyph_2, etc., where the name is guaranteed to be unique until the int overflow limit is reached on the unique int used to form that numerical suffix. A side benefit of this new approach is the result should be (slightly) more efficient in speed and size since rand_r does not have to be called, and the unique names are ordinarily shorter than the 16 random upper-case letters that were used previously to form the unique name. Modified Paths: -------------- trunk/src/psDoc.cpp Modified: trunk/src/psDoc.cpp =================================================================== --- trunk/src/psDoc.cpp 2014-07-16 20:46:34 UTC (rev 191) +++ trunk/src/psDoc.cpp 2014-07-17 20:54:08 UTC (rev 192) @@ -29,9 +29,8 @@ static string nameof(const FT_Face& face, const FT_UInt glyph_index) { const int N = 128; // Length of buffer to hold glyph name - const int randomNameLength = 16; // Length of a random glyph name char glyph_name[N]; - static unsigned int seed = 1; + static unsigned int unique_int = 1; if (!FT_HAS_GLYPH_NAMES(face)){ // @@ -41,9 +40,10 @@ // 2014 AWI FIX: rand did not deliver repeatable (from one // run of an application to the next) results. Presumably this // was due to a dependent library of LibLASi fiddling with rand - // internals. So shifted to using rand_r instead. - for(int i=0;i<randomNameLength;i++) glyph_name[i]= 65+(int)(26.0*rand_r(&seed)/(RAND_MAX+1.0)); - glyph_name[randomNameLength]='\0'; + // internals. So first shifted to using rand_r instead (which solved the + // repeatability issue, but ultimately changed to sensible unique (at least + // until the int overflows) unique names. + sprintf(glyph_name, "glyph_%1u", unique_int++); }else{ // Get the glyph name from the font when present: FT_Get_Glyph_Name(face, glyph_index, glyph_name, sizeof glyph_name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |