示例#1
0
文件: ctypeprim.py 项目: kipras/pypy
 def convert_to_object(self, cdata):
     if self.value_fits_long:
         value = misc.read_raw_long_data(cdata, self.size)
         return self.space.wrap(value)
     else:
         value = misc.read_raw_signed_data(cdata, self.size)
         return self.space.wrap(value)  # r_longlong => on 32-bit, 'long'
示例#2
0
 def cast_to_int(self, cdata):
     if self.is_signed_wchar:
         value = misc.read_raw_long_data(cdata, self.size)
         return self.space.newint(value)
     else:
         value = misc.read_raw_ulong_data(cdata, self.size)
         if self.size < rffi.sizeof(lltype.Signed):
             return self.space.newint(intmask(value))
         else:
             return self.space.newint(value)  # r_uint => 'long' object
示例#3
0
 def convert_bitfield_to_object(self, cdata):
     ctype = self.ctype
     space = ctype.space
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveSigned):
         if ctype.value_fits_long:
             value = r_uint(misc.read_raw_long_data(cdata, ctype.size))
             valuemask = (r_uint(1) << self.bitsize) - 1
             shiftforsign = r_uint(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = intmask(value) - intmask(shiftforsign)
             return space.wrap(result)
         else:
             value = misc.read_raw_unsigned_data(cdata, ctype.size)
             valuemask = (r_ulonglong(1) << self.bitsize) - 1
             shiftforsign = r_ulonglong(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = r_longlong(value) - r_longlong(shiftforsign)
             return space.wrap(result)
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveUnsigned):
         value_fits_long = ctype.value_fits_long
         value_fits_ulong = ctype.value_fits_ulong
     elif isinstance(ctype, ctypeprim.W_CTypePrimitiveCharOrUniChar):
         value_fits_long = True
         value_fits_ulong = True
     else:
         raise NotImplementedError
     #
     if value_fits_ulong:
         value = misc.read_raw_ulong_data(cdata, ctype.size)
         valuemask = (r_uint(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         if value_fits_long:
             return space.wrap(intmask(value))
         else:
             return space.wrap(value)  # uint => wrapped long object
     else:
         value = misc.read_raw_unsigned_data(cdata, ctype.size)
         valuemask = (r_ulonglong(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         return space.wrap(value)  # ulonglong => wrapped long object
示例#4
0
 def convert_bitfield_to_object(self, cdata):
     ctype = self.ctype
     space = ctype.space
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveSigned):
         if ctype.value_fits_long:
             value = r_uint(misc.read_raw_long_data(cdata, ctype.size))
             valuemask = (r_uint(1) << self.bitsize) - 1
             shiftforsign = r_uint(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = intmask(value) - intmask(shiftforsign)
             return space.wrap(result)
         else:
             value = misc.read_raw_unsigned_data(cdata, ctype.size)
             valuemask = (r_ulonglong(1) << self.bitsize) - 1
             shiftforsign = r_ulonglong(1) << (self.bitsize - 1)
             value = ((value >> self.bitshift) + shiftforsign) & valuemask
             result = r_longlong(value) - r_longlong(shiftforsign)
             return space.wrap(result)
     #
     if isinstance(ctype, ctypeprim.W_CTypePrimitiveUnsigned):
         value_fits_long = ctype.value_fits_long
         value_fits_ulong = ctype.value_fits_ulong
     elif isinstance(ctype, ctypeprim.W_CTypePrimitiveCharOrUniChar):
         value_fits_long = True
         value_fits_ulong = True
     else:
         raise NotImplementedError
     #
     if value_fits_ulong:
         value = misc.read_raw_ulong_data(cdata, ctype.size)
         valuemask = (r_uint(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         if value_fits_long:
             return space.wrap(intmask(value))
         else:
             return space.wrap(value)    # uint => wrapped long object
     else:
         value = misc.read_raw_unsigned_data(cdata, ctype.size)
         valuemask = (r_ulonglong(1) << self.bitsize) - 1
         value = (value >> self.bitshift) & valuemask
         return space.wrap(value)      # ulonglong => wrapped long object
示例#5
0
 def convert_to_object(self, cdata):
     if self.value_fits_long:
         value = misc.read_raw_long_data(cdata, self.size)
         return self.space.wrap(value)
     else:
         return self._convert_to_object_longlong(cdata)
示例#6
0
 def _get_value(self, cdata):
     # returns a signed long
     assert self.value_fits_long
     return misc.read_raw_long_data(cdata, self.size)
示例#7
0
 def nonzero(self, cdata):
     if self.size <= rffi.sizeof(lltype.Signed):
         value = misc.read_raw_long_data(cdata, self.size)
         return value != 0
     else:
         return self._nonzero_longlong(cdata)
示例#8
0
文件: ctypeenum.py 项目: bukzor/pypy
 def _get_value(self, cdata):
     # returns a signed long
     assert self.value_fits_long
     return misc.read_raw_long_data(cdata, self.size)
示例#9
0
 def nonzero(self, cdata):
     if self.size <= rffi.sizeof(lltype.Signed):
         value = misc.read_raw_long_data(cdata, self.size)
         return value != 0
     else:
         return self._nonzero_longlong(cdata)