IC__PyString_Resize_NoGrow(IntPtr strPtr, int newSize) { CPyMarshal.WriteIntField(strPtr, typeof(PyStringObject), "ob_size", newSize); IntPtr bufPtr = CPyMarshal.Offset( strPtr, Marshal.OffsetOf(typeof(PyStringObject), "ob_sval")); IntPtr terminatorPtr = CPyMarshal.Offset( bufPtr, newSize); CPyMarshal.WriteByte(terminatorPtr, 0); return(0); }
Zero(IntPtr start, int bytes) { int ptrs = bytes / CPyMarshal.PtrSize; bytes = bytes % CPyMarshal.PtrSize; for (int i = 0; i < ptrs; i++) { CPyMarshal.WritePtr(start, IntPtr.Zero); start = CPyMarshal.Offset(start, CPyMarshal.PtrSize); } for (int i = 0; i < bytes; i++) { CPyMarshal.WriteByte(start, 0); start = CPyMarshal.Offset(start, 1); } }
AllocPyString(int length) { uint size = (uint)(Marshal.SizeOf(typeof(PyStringObject)) + length); IntPtr data = this.allocator.Alloc(size); PyStringObject s = new PyStringObject(); s.ob_refcnt = 1; s.ob_type = this.PyString_Type; s.ob_size = length; s.ob_shash = -1; s.ob_sstate = 0; Marshal.StructureToPtr(s, data, false); IntPtr terminator = CPyMarshal.Offset(data, size - 1); CPyMarshal.WriteByte(terminator, 0); return(data); }