Exemple #1
0
    def setCharSlice(self, start: int, stop: int, step: int,
                     val: Union[Sequence[str], str]):

        with self.jvm as (jvm, jenv):
            size = JArray.size(start, stop, step)
            jarr = self._jobj
            if step == 1 and is_memview(val) and val.itemsize == jni.sizeof(
                    jni.jchar):
                val = val.as_ctypes if isinstance(
                    val, memview) else memview(val).as_ctypes
                jenv.SetCharArrayRegion(jarr, start, size,
                                        jni.cast(val, jni.POINTER(jni.jchar)))
            else:
                if is_memview(val): val = val.obj
                jels = jenv.GetCharArrayElements(jarr)
                try:
                    if isinstance(
                            val,
                            str) and step == 1 and JArray._jchar_equiv_unicode:
                        print("UUUUUUUUUUUUUUUUU")
                        jni.memmove(
                            jni.byref(jels.contents,
                                      start * jni.sizeof(jni.jchar)), val,
                            JArray.size(start, stop) * jni.sizeof(jni.jchar))
                    else:
                        for ix, idx in enumerate(range(start, stop, step)):
                            jels[idx] = val[ix]
                    jenv.ReleaseCharArrayElements(jarr, jels)
                except Exception as exc:
                    jenv.ReleaseCharArrayElements(jarr, jels, jni.JNI_ABORT)
                    raise exc
Exemple #2
0
 def setByteSlice(self, start: int, stop: int, step: int,
                  val: Union[Sequence[Union[int, bytes]], bytes, bytearray]):
     """???."""
     with self.jvm as (jvm, jenv):
         size = JArray.size(start, stop, step)
         jarr = self._jobj
         if step == 1 and is_memview(val) and val.itemsize == jni.sizeof(jni.jbyte):
             val = val.as_ctypes if isinstance(val, memview) else memview(val).as_ctypes
             jenv.SetByteArrayRegion(jarr, start, size, jni.cast(val, jni.POINTER(jni.jbyte)))
         else:
             if is_memview(val): val = val.obj
             jels = jenv.GetByteArrayElements(jarr)
             try:
                 if isinstance(val, (bytes, bytearray)):
                     if step == 1 and JArray._jbyte_equiv_byte:
                         if isinstance(val, bytearray):
                             val = jni.from_buffer(val)
                         # print(("RRRRRRRRRRRRRRRRRR",
                         #        type(jels), type(jels.contents), type(val)))
                         jni.memmove(jni.byref(jels.contents, start), val,
                                     JArray.size(start, stop))
                     else:
                         for ix, idx in enumerate(range(start, stop, step)):
                             jels[idx] = val[ix]
                 else:
                     for ix, idx in enumerate(range(start, stop, step)):
                         v = val[ix]
                         jels[idx] = v[0] if isinstance(v, bytes) else v
                 jenv.ReleaseByteArrayElements(jarr, jels)
             except Exception as exc:
                 jenv.ReleaseByteArrayElements(jarr, jels, jni.JNI_ABORT)
                 raise exc
Exemple #3
0
 def __init__(self, jenv: jni.JNIEnv=None,
              jstr: jni.jobject=jni.obj(jni.POINTER(jni.jchar)), own: bool = True):
     self.__jstr = jni.cast(jstr, jni.jstring)
     self.__size = 0
     self.__jchars = jni.obj(jni.POINTER(jni.jchar))
     if jenv is not None and jstr:
         length = jenv.GetStringLength(self.__jstr)
         jchars = jenv.GetStringChars(self.__jstr)
         try:
             self.__jchars = jni.new_array(jni.jchar, length + 1)
             jni.memmove(self.__jchars, jchars, length * jni.sizeof(jni.jchar))
             self.__jchars[length] = "\0"
         finally:
             jenv.ReleaseStringChars(self.__jstr, jchars)
         self.__size = length