Hi,

I shouldn't have mixed the two options, because it's confusing.

Actually, V3 option generates uppercase, exactly as the current UUID, and it's 
2x faster.
So let's forget about V4...

Here is the code:

    private static const HEX_CHARS:String = "0123456789ABCDEF";
    private static const DASH:int = 45;  // "-"

public static function createUID():String
    {
        var ba:ByteArray = new ByteArray();
        var i:int;
        var j:int;

        for (i = 0; i < 8; i++) {
            ba.writeByte(HEX_CHARS.charCodeAt(Math.random() * 16));
       }

        for (i = 0; i < 3; i++)
        {
            ba.writeByte(DASH);
            for (j = 0; j < 4; j++)
            {
                ba.writeByte(HEX_CHARS.charCodeAt(Math.random() * 16));
            }
        }

        ba.writeByte(DASH);

        var time:Number = new Date().getTime();

        var timeString:String = ("0000000" + 
time.toString(16).toUpperCase()).substr(-8);
        ba.writeUTFBytes(timeString);

        for (i = 0; i < 4; i++)
        {
            ba.writeByte(HEX_CHARS.charCodeAt(Math.random() * 16));
        }

        return ba.toString();
    }

-----Message d'origine-----
De : Justin Mclean [mailto:jus...@classsoftware.com] 
Envoyé : vendredi 18 octobre 2013 14:34
À : dev@flex.apache.org
Objet : Re: UID performance

Hi,

> V3: generates the random hex bytes one by one, and writes them to the BA
> V4: generates 4 or 8 random bytes in one shot, and writes them to the BA  
> (hexa in lowercase, to avoid call toUppercase() )
Probably best not too fiddle too much with the UID construction. While I can't 
think of any major issues it would cause there could be subtle issues due to 
seeding of random numbers and the like. 

> I don't know if this is acceptable (are we breaking some code if we use 
> lowercase instead of uppercase).

Again can't think of any issues but probably safer if we kept it upper case.

Go ahead and post the code it could be interesting/useful to someone.

Thanks,
Justin

Reply via email to