Beispiel #1
0
    def getrandbits(self, space, k):
        """ getrandbits(k) -> x.  Generates a long int with k random bits. """
        if k <= 0:
            raise oefmt(space.w_ValueError,
                        "number of bits must be greater than zero")
        if k < 32:  # XXX could go up to 63 bits, but let's start with this
            # fits an int, don't do the bytes-to-long-to-int dance
            r = self._rnd.genrand32()
            r >>= (32 - k)
            return space.newint(intmask(r))
        bytes = ((k - 1) // 32 + 1) * 4
        bytesarray = rstring.StringBuilder(bytes)
        for i in range(0, bytes, 4):
            r = self._rnd.genrand32()
            if k < 32:
                r >>= (32 - k)
            bytesarray.append(chr(r & r_uint(0xff)))
            bytesarray.append(chr((r >> 8) & r_uint(0xff)))
            bytesarray.append(chr((r >> 16) & r_uint(0xff)))
            bytesarray.append(chr((r >> 24) & r_uint(0xff)))
            k -= 32

        # little endian order to match bytearray assignment order
        result = rbigint.rbigint.frombytes(bytesarray.build(),
                                           'little',
                                           signed=False)
        return space.newlong_from_rbigint(result)
Beispiel #2
0
 def _build_string(self, start, end, level):
     space = self.space
     out = rstring.StringBuilder()
     if not level:
         raise oefmt(space.w_ValueError, "Recursion depth exceeded")
     level -= 1
     s = self.template
     return self._do_build_string(start, end, level, out, s)
Beispiel #3
0
def inputstring():
    import os
    s = rstring.StringBuilder()
    i = os.read(std_fds[0], 4096)
    while len(i) != 0:
        s.append(i)
        i = os.read(std_fds[0], 4096)
    return model.w_string(s.build())
Beispiel #4
0
 def _build_string(self, start, end, level):
     space = self.space
     if self.is_unicode:
         out = rstring.UnicodeBuilder()
     else:
         out = rstring.StringBuilder()
     if not level:
         raise OperationError(space.w_ValueError,
                              space.wrap("Recursion depth exceeded"))
     level -= 1
     s = self.template
     return self._do_build_string(start, end, level, out, s)
Beispiel #5
0
 def _build_string(self, start, end, level):
     space = self.space
     if self.is_unicode:
         out = rstring.UnicodeBuilder()
     else:
         out = rstring.StringBuilder()
     if not level:
         raise oefmt(space.w_ValueError,
                     "Profundidad de recursión excedida")
     level -= 1
     s = self.template
     return self._do_build_string(start, end, level, out, s)
Beispiel #6
0
def processcaptures(captures, inputstring, flags=Flags()):
    #returnlist = []
    out = rstring.StringBuilder()
    if flags.debug:
        print captures
    while captures.prev is not None:
        if isinstance(captures, SimpleCapture):
            size = captures.get_size()
            index = captures.index
            newindex = index - size
            assert newindex >= 0
            assert index >= 0
            out.append_slice(inputstring, newindex, index)
            out.append("\n")
        elif isinstance(captures, PositionCapture):
            appendee = "POSITION:" + str(captures.index)
            out.append(appendee + "\n")
        captures = captures.prev  # capturelist
    return out.build()  # returnlist
Beispiel #7
0
    def getrandbits(self, space, k):
        if k <= 0:
            raise oefmt(space.w_ValueError,
                        "number of bits must be greater than zero")
        bytes = ((k - 1) // 32 + 1) * 4
        bytesarray = rstring.StringBuilder(bytes)
        for i in range(0, bytes, 4):
            r = self._rnd.genrand32()
            if k < 32:
                r >>= (32 - k)
            bytesarray.append(chr(r & r_uint(0xff)))
            bytesarray.append(chr((r >> 8) & r_uint(0xff)))
            bytesarray.append(chr((r >> 16) & r_uint(0xff)))
            bytesarray.append(chr((r >> 24) & r_uint(0xff)))
            k -= 32

        # little endian order to match bytearray assignment order
        result = rbigint.rbigint.frombytes(
            bytesarray.build(), 'little', signed=False)
        return space.newlong_from_rbigint(result)
Beispiel #8
0
 def _builder(self):
     if self.is_unicode:
         return rutf8.Utf8StringBuilder()
     else:
         return rstring.StringBuilder()
Beispiel #9
0
 def _builder(self):
     if self.is_unicode:
         return rstring.UnicodeBuilder()
     else:
         return rstring.StringBuilder()
Beispiel #10
0
def implode(l_w):
    s = rstring.StringBuilder()
    for w_s in l_w:
        assert isinstance(w_s, model.W_String)
        s.append(w_s.value())
    return model.w_string(s.build())