Example #1
0
        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);
        }
Example #2
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);
            }
        }
Example #3
0
        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);
        }