# 8.4 Mapping protocol

int `PyMapping_Check`(PyObject *o)
  Return 1 if the object provides mapping protocol, and 0 otherwise. This function always succeeds.

int `PyMapping_Length`(PyObject *o)
  Returns the number of keys in object `o` on success, and -1 on failure. For objects that do not provide sequence protocol, this is equivalent to the Python expression: `len(o)`.

int `PyMapping_DelItemString`(PyObject *o, char *key)
  Remove the mapping for object `key` from the object `o`. Return -1 on failure. This is equivalent to the Python statement: `del o[key]`.

int `PyMapping_DelItem`(PyObject *o, PyObject *key)
  Remove the mapping for object `key` from the object `o`. Return -1 on failure. This is equivalent to the Python statement: `del o[key]`.

int `PyMapping_HasKeyString`(PyObject *o, char *key)
  On success, return 1 if the mapping object has the key `key` and 0 otherwise. This is equivalent to the Python expression: `o.has_key(key)`. This function always succeeds.

int `PyMapping_HasKey`(PyObject *o, PyObject *key)
  Return 1 if the mapping object has the key `key` and 0 otherwise. This is equivalent to the Python expression: `o.has_key(key)`. This function always succeeds.

PyObject* `PyMapping_Keys`(PyObject *o)
  On success, return a list of the keys in object `o`. On failure, return NULL. This is equivalent to the Python expression: `o.keys()`.

PyObject* `PyMapping_Values`(PyObject *o)
  On success, return a list of the values in object `o`. On failure, return NULL. This is equivalent to the Python expression: `o.values()`.

PyObject* `PyMapping_Items`(PyObject *o)
  On success, return a list of the items in object `o`, where each item is a tuple containing a key-value pair. On failure, return NULL. This is equivalent to the Python expression: `o.items()`.

int `PyMapping_Clear`(PyObject *o)
  Make object `o` empty. Returns 1 on success and 0 on failure. This is equivalent to the Python statement: `for key in o.keys(): del o[key]`

PyObject* `PyMapping_GetItemString`(PyObject *o, char *key)
  Return element of `o` corresponding to the object `key` or NULL on failure. This is the equivalent of the Python expression: `o[key]`.

PyObject* `PyMapping_SetItemString`(PyObject *o, char *key, PyObject *v)
  Map the object `key` to the value `v` in object `o`. Returns -1 on failure. This is the equivalent of the Python statement: `o[key]=v`.