modelize_property: use resolve_mtype_unchecked during build_signature
[nit.git] / lib / base64.nit
index 861cb9a..7b78d78 100644 (file)
@@ -28,7 +28,7 @@ redef class String
        do
                var inv_base64_chars = new HashMap[Char,Int]
                for k in [0..base64_chars.length[ do
-                       inv_base64_chars[ base64_chars[k] ] = k
+                       inv_base64_chars[ base64_chars.chars[k] ] = k
                end
                return inv_base64_chars
        end
@@ -36,6 +36,10 @@ redef class String
        # Encodes the receiver string to base64.
        # By default, uses "=" for padding.
        fun encode_base64 : String do return encode_base64_custom_padding( '=' )
+
+       # Encodes the receiver string to base64 using a custom padding character.
+       #
+       # If using the default padding character `=`, see `encode_base64`.
        fun encode_base64_custom_padding( padding : Char ) : String
        do
                var base64_chars = once base64_chars
@@ -52,23 +56,23 @@ redef class String
                for s in [0..steps[ do
                        var e = 0
                        for ss in [0..3[ do
-                               e += self[s*3+ss].ascii.lshift((2-ss)*8)
+                               e += self.chars[s*3+ss].ascii.lshift((2-ss)*8)
                        end
                        for ss in [0..4[ do
-                               result[s*4+3-ss] = base64_chars[ e.rshift(ss*6).bin_and( mask_6bit ) ]
+                               result[s*4+3-ss] = base64_chars.chars[ e.rshift(ss*6).bin_and( mask_6bit ) ]
                        end
                end
 
                if chars_in_last_step == 1 then
-                       var e = self[length-1].ascii.lshift(16)
+                       var e = self.chars[length-1].ascii.lshift(16)
                        for ss in [0..2[ do
-                               result[steps*4+1-ss] = base64_chars[ e.rshift((ss+2)*6).bin_and( mask_6bit ) ]
+                               result[steps*4+1-ss] = base64_chars.chars[ e.rshift((ss+2)*6).bin_and( mask_6bit ) ]
                        end
                else if chars_in_last_step == 2 then
-                       var e = self[length-2].ascii.lshift(16) +
-                               self[length-1].ascii.lshift(8)
+                       var e = self.chars[length-2].ascii.lshift(16) +
+                               self.chars[length-1].ascii.lshift(8)
                        for ss in [0..3[ do
-                               result[steps*4+2-ss] = base64_chars[ e.rshift((ss+1)*6).bin_and( mask_6bit ) ]
+                               result[steps*4+2-ss] = base64_chars.chars[ e.rshift((ss+1)*6).bin_and( mask_6bit ) ]
                        end
                end
 
@@ -78,6 +82,10 @@ redef class String
        # Decodes the receiver string from base64.
        # By default, uses "=" for padding.
        fun decode_base64 : String do return decode_base64_custom_padding( '=' )
+
+       # Decodes the receiver string to base64 using a custom padding character.
+       #
+       # If using the default padding character `=`, see `decode_base64`.
        fun decode_base64_custom_padding( padding : Char ) : String
        do
                var inverted_base64_chars = once inverted_base64_chars
@@ -87,12 +95,12 @@ redef class String
                var steps = length / 4
                var result_length = steps*3
 
-               var padding_begin = padding.search_index_in( self, 0 )
+               var padding_begin = self.search(padding)
                var padding_count : Int
-               if padding_begin == -1 then
+               if padding_begin == null then
                        padding_count = 0
                else
-                       padding_count = length - padding_begin
+                       padding_count = length - padding_begin.from
                        steps -= 1
                        result_length -= padding_count
                end
@@ -104,7 +112,7 @@ redef class String
                for s in [0..steps[ do
                        var e = 0
                        for ss in [0..4[ do
-                               e += inverted_base64_chars[self[s*4+ss]].lshift((3-ss)*6)
+                               e += inverted_base64_chars[self.chars[s*4+ss]].lshift((3-ss)*6)
                        end
 
                        for ss in [0..3[ do
@@ -116,7 +124,7 @@ redef class String
                if padding_count == 1 then
                        var e = 0
                        for ss in [0..3[ do
-                               e += inverted_base64_chars[self[s*4+ss]].lshift((3-ss)*6)
+                               e += inverted_base64_chars[self.chars[s*4+ss]].lshift((3-ss)*6)
                        end
 
                        for ss in [0..2[ do
@@ -125,7 +133,7 @@ redef class String
                else if padding_count == 2 then
                        var e = 0
                        for ss in [0..2[ do
-                               e += inverted_base64_chars[self[s*4+ss]].lshift((3-ss)*6)
+                               e += inverted_base64_chars[self.chars[s*4+ss]].lshift((3-ss)*6)
                        end
 
                        result[s*3] = e.rshift(2*8).bin_and( mask_8bit ).ascii