You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ma...@apache.org on 2013/10/31 09:12:07 UTC
[2/2] git commit: [flex-sdk] [refs/heads/develop] - FIXED -
FLEX-33852 Port UIDUtil optimizations to RPCUIDUtil
FIXED - FLEX-33852 Port UIDUtil optimizations to RPCUIDUtil
Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/246600d1
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/246600d1
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/246600d1
Branch: refs/heads/develop
Commit: 246600d16d2ff0c55929a46a6bc7fff1323fc691
Parents: 2fd4aad
Author: mamsellem <ma...@systar.com>
Authored: Thu Oct 31 09:10:03 2013 +0100
Committer: mamsellem <ma...@systar.com>
Committed: Thu Oct 31 09:10:03 2013 +0100
----------------------------------------------------------------------
.../projects/rpc/src/mx/utils/RPCUIDUtil.as | 57 +++++++++-----------
1 file changed, 25 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/246600d1/frameworks/projects/rpc/src/mx/utils/RPCUIDUtil.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/rpc/src/mx/utils/RPCUIDUtil.as b/frameworks/projects/rpc/src/mx/utils/RPCUIDUtil.as
index eda9caa..84b4620 100644
--- a/frameworks/projects/rpc/src/mx/utils/RPCUIDUtil.as
+++ b/frameworks/projects/rpc/src/mx/utils/RPCUIDUtil.as
@@ -45,8 +45,11 @@ public class RPCUIDUtil
* @private
* Char codes for 0123456789ABCDEF
*/
- private static const ALPHA_CHAR_CODES:Array = [48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 65, 66, 67, 68, 69, 70];
+ private static const ALPHA_CHAR_CODES:Array = [48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 65, 66, 67, 68, 69, 70];
+
+ private static const DASH:int = 45; // dash ascii
+ private static const UIDBuffer:ByteArray = new ByteArray(); // static ByteArray used for UID generation to save memory allocation cost
//--------------------------------------------------------------------------
//
@@ -74,50 +77,40 @@ public class RPCUIDUtil
*/
public static function createUID():String
{
- var uid:Array = new Array(36);
- var index:int = 0;
-
+ UIDBuffer.position = 0;
+
var i:int;
var j:int;
-
+
for (i = 0; i < 8; i++)
{
- uid[index++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
+ UIDBuffer.writeByte(ALPHA_CHAR_CODES[int(Math.random() * 16)]);
}
for (i = 0; i < 3; i++)
{
- uid[index++] = 45; // charCode for "-"
-
+ UIDBuffer.writeByte(DASH);
for (j = 0; j < 4; j++)
{
- uid[index++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
+ UIDBuffer.writeByte(ALPHA_CHAR_CODES[int(Math.random() * 16)]);
}
}
-
- uid[index++] = 45; // charCode for "-"
- var time:Number = new Date().getTime();
- // Note: time is the number of milliseconds since 1970,
- // which is currently more than one trillion.
- // We use the low 8 hex digits of this number in the UID.
- // Just in case the system clock has been reset to
- // Jan 1-4, 1970 (in which case this number could have only
- // 1-7 hex digits), we pad on the left with 7 zeros
- // before taking the low digits.
- var timeString:String = ("0000000" + time.toString(16).toUpperCase()).substr(-8);
-
- for (i = 0; i < 8; i++)
- {
- uid[index++] = timeString.charCodeAt(i);
- }
-
+ UIDBuffer.writeByte(DASH);
+
+ var time:uint = new Date().getTime(); // extract last 8 digits
+ var timeString:String = time.toString(16).toUpperCase();
+ // 0xFFFFFFFF milliseconds ~= 3 days, so timeString may have between 1 and 8 digits, hence we need to pad with 0s to 8 digits
+ for (i = 8; i > timeString.length; i--)
+ UIDBuffer.writeByte(48);
+ UIDBuffer.writeUTFBytes(timeString);
+
for (i = 0; i < 4; i++)
{
- uid[index++] = ALPHA_CHAR_CODES[Math.floor(Math.random() * 16)];
+ UIDBuffer.writeByte(ALPHA_CHAR_CODES[int(Math.random() * 16)]);
}
-
- return String.fromCharCode.apply(null, uid);
+
+ return UIDBuffer.toString();
}
/**
@@ -144,7 +137,7 @@ public class RPCUIDUtil
for (var i:uint = 0; i < 16; i++)
{
if (i == 4 || i == 6 || i == 8 || i == 10)
- chars[index++] = 45; // Hyphen char code
+ chars[index++] = DASH; // Hyphen char code
var b:int = ba.readByte();
chars[index++] = ALPHA_CHAR_CODES[(b & 0xF0) >>> 4];
@@ -183,7 +176,7 @@ public class RPCUIDUtil
// Check for correctly placed hyphens
if (i == 8 || i == 13 || i == 18 || i == 23)
{
- if (c != 45)
+ if (c != DASH)
{
return false;
}