Show
Ignore:
Timestamp:
03/01/09 22:04:49 (6 years ago)
Author:
shyouhei
Message:

some tuneup; typical usage for an uuid object is for a hash key, so it should be wiser for us to tune #hash and #eql?.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/uuid/trunk/lib/uuid.rb

    r30603 r30649  
    2828 
    2929# Pure ruby UUID generator, which is compatible with RFC4122 
    30 UUID = Struct.new "UUID", :raw_bytes 
    3130class UUID 
    3231        # UUID epoch is 15th Oct. 1582 
     
    3433 
    3534        private_class_method :new 
     35 
     36        private 
     37        def initialize str 
     38                tmp = str.unpack "C*" 
     39                @num = tmp.inject do |r, i| 
     40                        r * 256 | i 
     41                end 
     42                @num.freeze 
     43                self.freeze 
     44        end 
     45 
     46        public 
     47 
     48        def raw_bytes 
     49                ret = String.new 
     50                tmp = @num 
     51                16.times do |i| 
     52                        x, y = tmp.divmod 256 
     53                        ret << y 
     54                        tmp = x 
     55                end 
     56                ret.reverse! 
     57                ret 
     58        end 
    3659 
    3760        class << self 
     
    6386                        sum = sha1.digest 
    6487                        raw = mask 5, sum[0..15] 
    65                         ret = new raw 
    66                         ret.raw_bytes.freeze 
    67                         ret.freeze 
    68                         ret 
     88                        new raw 
    6989                end 
    7090 
     
    7696                        sum = md5.digest 
    7797                        raw = mask 3, sum[0..16] 
    78                         ret = new raw 
    79                         ret.raw_bytes.freeze 
    80                         ret.freeze 
    81                         ret 
     98                        new raw 
    8299                end 
    83100 
     
    88105                        rnd = [prand, prand, prand, prand].pack "N4" 
    89106                        raw = mask 4, rnd 
    90                         ret = new raw 
    91                         ret.raw_bytes.freeze 
    92                         ret.freeze 
    93                         ret 
     107                        new raw 
    94108                end 
    95109 
     
    177191                        str.gsub! %r/[^0-9A-Fa-f]/, '' 
    178192                        raw = str[0..31].to_a.pack 'H*' 
    179                         ret = new raw 
    180                         ret.raw_bytes.freeze 
    181                         ret.freeze 
    182                         ret 
     193                        new raw 
    183194                end 
    184195 
     
    187198                def pack tl, tm, th, ch, cl, n 
    188199                        raw = [tl, tm, th, ch, cl, n].pack "NnnCCa6" 
    189                         ret = new raw 
    190                         ret.raw_bytes.freeze 
    191                         ret.freeze 
    192                         ret 
     200                        new raw 
    193201                end 
    194202        end 
     
    254262        end 
    255263        alias urn to_uri 
     264        alias inspect to_uri 
    256265 
    257266        # Convert into 128-bit unsigned integer 
    258267        # Typically a Bignum instance, but can be a Fixnum. 
    259268        def to_int 
    260                 tmp = self.raw_bytes.unpack "C*" 
    261                 tmp.inject do |r, i| 
    262                         r * 256 | i 
    263                 end 
     269                @num 
    264270        end 
    265271        alias to_i to_int