1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-11-30 08:24:11 +01:00
LibrePilot/flight/libraries/PyMite/lib/dict.py
2013-04-25 13:13:36 +03:00

137 lines
3.3 KiB
Python

# This file is Copyright 2009, 2010 Dean Hall.
#
# This file is part of the Python-on-a-Chip program.
# Python-on-a-Chip is free software: you can redistribute it and/or modify
# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
#
# Python-on-a-Chip is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# A copy of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1
# is seen in the file COPYING in this directory.
## @file
# @copybrief dict
## @package dict
# @brief Provides PyMite's dict module.
def clear(d):
"""__NATIVE__
pPmObj_t pd;
PmReturn_t retval = PM_RET_OK;
/* Raise TypeError if it's not a dict or wrong number of args, */
pd = NATIVE_GET_LOCAL(0);
if ((OBJ_GET_TYPE(pd) != OBJ_TYPE_DIC) || (NATIVE_GET_NUM_ARGS() != 1))
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Clear the contents of the dict */
retval = dict_clear(pd);
PM_RETURN_IF_ERROR(retval);
NATIVE_SET_TOS(PM_NONE);
return retval;
"""
pass
def keys(d):
"""__NATIVE__
pPmObj_t pd;
pPmObj_t pl;
pPmObj_t pk;
pSeglist_t psl;
uint16_t i;
PmReturn_t retval = PM_RET_OK;
uint8_t objid;
/* Raise TypeError if it's not a dict or wrong number of args, */
pd = NATIVE_GET_LOCAL(0);
if ((OBJ_GET_TYPE(pd) != OBJ_TYPE_DIC) || (NATIVE_GET_NUM_ARGS() != 1))
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Create empty list */
retval = list_new(&pl);
PM_RETURN_IF_ERROR(retval);
/* Iterate through the keys seglist */
psl = ((pPmDict_t)pd)->d_keys;
for (i = 0; i < ((pPmDict_t)pd)->length; i++)
{
/* Get the key and append it to the list */
retval = seglist_getItem(psl, i, &pk);
PM_RETURN_IF_ERROR(retval);
heap_gcPushTempRoot(pl, &objid);
retval = list_append(pl, pk);
heap_gcPopTempRoot(objid);
PM_RETURN_IF_ERROR(retval);
}
/* Return the list of keys to the caller */
NATIVE_SET_TOS(pl);
return retval;
"""
pass
def has_key(d, k):
if k in keys(d):
return 1
else:
return 0
def values(d):
"""__NATIVE__
pPmObj_t pd;
pPmObj_t pl;
pPmObj_t pv;
pSeglist_t psl;
uint16_t i;
PmReturn_t retval = PM_RET_OK;
uint8_t objid;
/* Raise TypeError if it's not a dict or wrong number of args, */
pd = NATIVE_GET_LOCAL(0);
if ((OBJ_GET_TYPE(pd) != OBJ_TYPE_DIC) || (NATIVE_GET_NUM_ARGS() != 1))
{
PM_RAISE(retval, PM_RET_EX_TYPE);
return retval;
}
/* Create empty list */
retval = list_new(&pl);
PM_RETURN_IF_ERROR(retval);
/* Iterate through the values seglist */
psl = ((pPmDict_t)pd)->d_vals;
for (i = 0; i < ((pPmDict_t)pd)->length; i++)
{
/* Get the value and append it to the list */
retval = seglist_getItem(psl, i, &pv);
PM_RETURN_IF_ERROR(retval);
heap_gcPushTempRoot(pl, &objid);
retval = list_append(pl, pv);
heap_gcPopTempRoot(objid);
PM_RETURN_IF_ERROR(retval);
}
/* Return the list of values to the caller */
NATIVE_SET_TOS(pl);
return retval;
"""
pass
# :mode=c: