[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/swfiua/pythonnet/master/pythonnet/src/runtime/pysequence.cs [Back]  [Original]

// ==========================================================================
// This software is subject to the provisions of the Zope Public License,
// Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
// THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
// WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
// FOR A PARTICULAR PURPOSE.
// ==========================================================================

using System;

namespace Python.Runtime {

    /// 
    /// Represents a generic Python sequence. The methods of this class are 
    /// equivalent to the Python "abstract sequence API". See  
    /// http://www.python.org/doc/current/api/sequence.html for details.
    /// 

    public class PySequence : PyObject {

	protected PySequence(IntPtr ptr) : base(ptr) {}

	protected PySequence() : base() {}


	/// 
	/// IsSequenceType Method
	/// 
	///
	/// 
	/// Returns true if the given object implements the sequence protocol.
	/// 

        public static bool IsSequenceType(PyObject value) {
	    return Runtime.PySequence_Check(value.obj);
	}


	/// 
	/// GetSlice Method
	/// 
	///
	/// 
	/// Return the slice of the sequence with the given indices.
	/// 

	public PyObject GetSlice(int i1, int i2) {
	    IntPtr op = Runtime.PySequence_GetSlice(obj, i1, i2);
	    if (op == IntPtr.Zero) {
		throw new PythonException();
	    }
	    return new PyObject(op);
	}


	/// 
	/// SetSlice Method
	/// 
	///
	/// 
	/// Sets the slice of the sequence with the given indices.
	/// 

	public void SetSlice(int i1, int i2, PyObject v) {
	    int r = Runtime.PySequence_SetSlice(obj, i1, i2, v.obj);
	    if (r < 0) {
		throw new PythonException();
	    }
	}


	/// 
	/// DelSlice Method
	/// 
	///
	/// 
	/// Deletes the slice of the sequence with the given indices.
	/// 

	public void DelSlice(int i1, int i2) {
	    int r = Runtime.PySequence_DelSlice(obj, i1, i2);
	    if (r < 0) {
		throw new PythonException();
	    }
	}


	/// 
	/// Index Method
	/// 
	///
	/// 
	/// Return the index of the given item in the sequence, or -1 if 
	/// the item does not appear in the sequence.
	/// 

	public int Index(PyObject item) {
	    int r = Runtime.PySequence_Index(obj, item.obj);
	    if (r < 0) {
		Runtime.PyErr_Clear();
		return -1;
	    }
	    return r;
	}


	/// 
	/// Contains Method
	/// 
	///
	/// 
	/// Return true if the sequence contains the given item. This method
	/// throws a PythonException if an error occurs during the check.
	/// 

	public bool Contains(PyObject item) {
	    int r = Runtime.PySequence_Contains(obj, item.obj);
	    if (r < 0) {
		throw new PythonException();
	    }
	    return (r != 0);
	}


	/// 
	/// Concat Method
	/// 
	///
	/// 
	/// Return the concatenation of the sequence object with the passed in 
	/// sequence object.
	/// 

	public PyObject Concat(PyObject other) {
	    IntPtr op = Runtime.PySequence_Concat(obj, other.obj);
	    if (op == IntPtr.Zero) {
		throw new PythonException();
	    }
	    return new PyObject(op);
	}


	/// 
	/// Repeat Method
	/// 
	///
	/// 
	/// Return the sequence object repeated N times. This is equivalent 
	/// to the Python expression "object * count".
	/// 

	public PyObject Repeat(int count) {
	    IntPtr op = Runtime.PySequence_Repeat(obj, count);
	    if (op == IntPtr.Zero) {
		throw new PythonException();
	    }
	    return new PyObject(op);
	}


    }

}

Web Proxy Viewer  |  New URL  |  Original Page