src/Pure/System/standard_system.scala
changeset 43746 a41f618c641d
parent 43695 5130dfe1b7be
child 45072 e30442a2b3b2
equal deleted inserted replaced
43745:562e35bc351e 43746:a41f618c641d
    75       else if ((c & 0xF0) == 0xE0) init(c & 0x0F, 2)
    75       else if ((c & 0xF0) == 0xE0) init(c & 0x0F, 2)
    76       else if ((c & 0xF8) == 0xF0) init(c & 0x07, 3)
    76       else if ((c & 0xF8) == 0xF0) init(c & 0x07, 3)
    77     }
    77     }
    78     flush()
    78     flush()
    79     buf.toString
    79     buf.toString
       
    80   }
       
    81 
       
    82   private class Decode_Chars(decode: String => String,
       
    83     buffer: Array[Byte], start: Int, end: Int) extends CharSequence
       
    84   {
       
    85     def length: Int = end - start
       
    86     def charAt(i: Int): Char = (buffer(start + i).asInstanceOf[Int] & 0xFF).asInstanceOf[Char]
       
    87     def subSequence(i: Int, j: Int): CharSequence =
       
    88       new Decode_Chars(decode, buffer, start + i, start + j)
       
    89 
       
    90     // toString with adhoc decoding: abuse of CharSequence interface
       
    91     override def toString: String = decode(decode_permissive_utf8(this))
       
    92   }
       
    93 
       
    94   def decode_chars(decode: String => String,
       
    95     buffer: Array[Byte], start: Int, end: Int): CharSequence =
       
    96   {
       
    97     require(0 <= start && start <= end && end <= buffer.length)
       
    98     new Decode_Chars(decode, buffer, start, end)
    80   }
    99   }
    81 
   100 
    82 
   101 
    83   /* basic file operations */
   102   /* basic file operations */
    84 
   103