⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pydictionary.java

📁 无线通信的主要编程软件,是无线通信工作人员的必备工具,关天相关教程我会在后续传上.
💻 JAVA
字号:
// Copyright (c) Corporation for National Research Initiativespackage org.python.core;import java.util.Hashtable;import java.util.Enumeration;class DictFuncs extends PyBuiltinFunctionSet{    DictFuncs(String name, int index, int argcount) {        super(name, index, argcount, argcount, true, null);    }    DictFuncs(String name, int index, int minargs, int maxargs) {        super(name, index, minargs, maxargs, true, null);    }    public PyObject __call__() {        PyDictionary dict = (PyDictionary)__self__;        switch (index) {        case 1:            return new PyInteger(dict.__len__());        case 2:            return new PyInteger(dict.__nonzero__() ? 1 : 0);        case 3:            return dict.copy();        case 4:            dict.clear();            return Py.None;        case 5:            return dict.items();        case 6:            return dict.keys();        case 7:            return dict.values();        case 8:            return dict.popitem();        default:            throw argCountError(0);        }    }    public PyObject __call__(PyObject arg) {        PyDictionary dict = (PyDictionary)__self__;        switch (index) {        case 11:            return new PyInteger(dict.__cmp__(arg));        case 12:            return new PyInteger(dict.has_key(arg) ? 1 : 0);        case 13:            return dict.get(arg);        case 14:            if (arg instanceof PyDictionary) {                dict.update((PyDictionary) arg);                return Py.None;            } else if (arg instanceof PyStringMap) {                dict.update((PyStringMap) arg);                return Py.None;            } else                throw Py.TypeError("dictionary expected, got " +                                   arg.safeRepr());        default:            throw argCountError(1);        }    }    public PyObject __call__(PyObject arg1, PyObject arg2) {        PyDictionary dict = (PyDictionary)__self__;        switch (index) {        case 13:            return dict.get(arg1, arg2);        default:            throw argCountError(2);        }    }}/** * A builtin python dictionary. */public class PyDictionary extends PyObject implements ClassDictInit{    protected Hashtable table;    protected static PyObject __methods__;    static {        PyList list = new PyList();        String[] methods = {            "clear", "copy", "get", "has_key", "items",            "keys", "update", "values", "setdefault" };        for (int i = 0; i < methods.length; i++)            list.append(new PyString(methods[i]));        __methods__ = list;    }    /**     * Create an empty dictionary.     */    public PyDictionary() {        this(new Hashtable());    }    /**     * Create an new dictionary which is based on the hashtable.     * @param t  the hashtable used. The supplied hashtable is used as     *           is and must only contain PyObject key:value pairs.     */    public PyDictionary(Hashtable t) {        table = t;    }    /**     * Create a new dictionary with the element as content.     * @param elements The initial elements that is inserted in the     *                 dictionary. Even numbered elements are keys,     *                 odd numbered elements are values.     */    public PyDictionary(PyObject elements[]) {        this();        for (int i = 0; i < elements.length; i+=2) {            table.put(elements[i], elements[i+1]);        }    }    /** <i>Internal use only. Do not call this method explicit.</i> */    public static void classDictInit(PyObject dict) {        dict.__setitem__("__len__", new DictFuncs("__len__", 1, 0));        dict.__setitem__("__nonzero__", new DictFuncs("__nonzero__", 2, 0));        dict.__setitem__("copy", new DictFuncs("copy", 3, 0));        dict.__setitem__("clear", new DictFuncs("clear", 4, 0));        dict.__setitem__("items", new DictFuncs("items", 5, 0));        dict.__setitem__("keys", new DictFuncs("keys", 6, 0));        dict.__setitem__("values", new DictFuncs("values", 7, 0));        dict.__setitem__("popitem", new DictFuncs("popitem", 8, 0));        dict.__setitem__("__cmp__", new DictFuncs("__cmp__", 11, 1));        dict.__setitem__("has_key", new DictFuncs("has_key", 12, 1));        dict.__setitem__("get", new DictFuncs("get", 13, 1, 2));        dict.__setitem__("update", new DictFuncs("update", 14, 1));        // Hide these from Python        dict.__setitem__("__finditem__", null);        dict.__setitem__("__setitem__", null);        dict.__setitem__("__delitem__", null);        dict.__setitem__("toString", null);        dict.__setitem__("hashCode", null);        dict.__setitem__("classDictInit", null);    }    public String safeRepr() throws PyIgnoreMethodTag {        return "'dict' object";    }    public PyObject __findattr__(String name) {        if (name.equals("__methods__")) {            PyList mlist = (PyList)__methods__;            PyString methods[] = new PyString[mlist.length];            for (int i = 0; i < mlist.length; i++)                methods[i] = (PyString)mlist.list[i];            return new PyList(methods);        }        return super.__findattr__(name);    }    public int __len__() {        return table.size();    }    public boolean __nonzero__() {        return table.size() != 0;    }    public PyObject __finditem__(int index) {        throw Py.TypeError("loop over non-sequence");    }    public PyObject __finditem__(PyObject key) {        return (PyObject)table.get(key);    }    public void __setitem__(PyObject key, PyObject value)  {        table.put(key, value);    }    public void __delitem__(PyObject key) {        Object ret = table.remove(key);        if (ret == null)            throw Py.KeyError(key.toString());    }    public PyObject __iter__() {        return new PyDictionaryIter(this, table.keys(), PyDictionaryIter.KEYS);    }    public String toString() {        ThreadState ts = Py.getThreadState();        if (!ts.enterRepr(this)) {            return "{...}";        }        java.util.Enumeration ek = table.keys();        java.util.Enumeration ev = table.elements();        int n = table.size();        StringBuffer buf = new StringBuffer("{");        for(int i=0; i<n; i++) {            buf.append(((PyObject)ek.nextElement()).__repr__().toString());            buf.append(": ");            buf.append(((PyObject)ev.nextElement()).__repr__().toString());            if (i < n-1)                buf.append(", ");        }        buf.append("}");        ts.exitRepr(this);        return buf.toString();    }    public int __cmp__(PyObject ob_other) {        if (ob_other.__class__ != __class__)            return -2;        PyDictionary other = (PyDictionary)ob_other;        int an = table.size();        int bn = other.table.size();        if (an < bn) return -1;        if (an > bn) return 1;        PyList akeys = keys();        PyList bkeys = other.keys();        akeys.sort();        bkeys.sort();        for (int i=0; i<bn; i++) {            PyObject akey = akeys.get(i);            PyObject bkey = bkeys.get(i);            int c = akey._cmp(bkey);            if (c != 0)                return c;            PyObject avalue = __finditem__(akey);            PyObject bvalue = other.__finditem__(bkey);            c = avalue._cmp(bvalue);            if (c != 0)                return c;        }        return 0;    }    /**     * Return true if the key exist in the dictionary.     */    public boolean has_key(PyObject key) {        return table.containsKey(key);    }    /**     * Return this[key] if the key exists in the mapping, default_object     * is returned otherwise.     *     * @param key            the key to lookup in the dictionary.     * @param default_object the value to return if the key does not     *                       exists in the mapping.     */    public PyObject get(PyObject key, PyObject default_object) {        PyObject o = __finditem__(key);        if (o == null)            return default_object;        else            return o;    }    /**     * Return this[key] if the key exists in the mapping, None     * is returned otherwise.     *     * @param key  the key to lookup in the dictionary.     */    public PyObject get(PyObject key) {        return get(key, Py.None);    }    /**     * Return a shallow copy of the dictionary.     */    public PyDictionary copy() {        return new PyDictionary((Hashtable)table.clone());    }    /**     * Remove all items from the dictionary.     */    public void clear() {        table.clear();    }    /**     * Insert all the key:value pairs from <code>d</code> into     * this dictionary.     */    public void update(PyDictionary d) {        Hashtable otable = d.table;        java.util.Enumeration ek = otable.keys();        java.util.Enumeration ev = otable.elements();        int n = otable.size();        for (int i=0; i<n; i++)            table.put(ek.nextElement(), ev.nextElement());    }    /**     * Insert all the key:value pairs from <code>d</code> into     * this dictionary.     */    public void update(PyStringMap d) {        PyObject keys = d.keys();        PyObject iter = keys.__iter__();        for (PyObject key; (key = iter.__iternext__()) != null; )            __setitem__(key, d.__getitem__(key));    }    /**     * Return this[key] if the key exist, otherwise insert key with     * a None value and return None.     *     * @param key   the key to lookup in the dictionary.     */    public PyObject setdefault(PyObject key) {        return setdefault(key, Py.None);    }    /**     * Return this[key] if the key exist, otherwise insert key with     * the value of failobj and return failobj     *     * @param key     the key to lookup in the dictionary.     * @param failobj the default value to insert in the dictionary     *                if key does not already exist.     */    public PyObject setdefault(PyObject key, PyObject failobj) {        PyObject o = __finditem__(key);        if (o == null)            __setitem__(key, o = failobj);        return o;    }    /**     * Return a random (key, value) tuple pair and remove the pair     * from the dictionary.     */    public PyObject popitem() {        java.util.Enumeration keys = table.keys();        if (!keys.hasMoreElements())            throw Py.KeyError("popitem(): dictionary is empty");        PyObject key = (PyObject) keys.nextElement();        PyObject val = (PyObject) table.get(key);        table.remove(key);        return new PyTuple(new PyObject[] { key, val });    }    /**     * Return a copy of the dictionarys list of (key, value) tuple     * pairs.     */    public PyList items() {        java.util.Enumeration ek = table.keys();        java.util.Enumeration ev = table.elements();        int n = table.size();        java.util.Vector l = new java.util.Vector(n);        for (int i=0; i<n; i++)            l.addElement(new PyTuple(new PyObject[] {                (PyObject)ek.nextElement(), (PyObject)ev.nextElement()            }));        return new PyList(l);    }    /**     * Return a copy of the dictionarys list of keys.     */    public PyList keys() {        java.util.Enumeration e = table.keys();        int n = table.size();        java.util.Vector l = new java.util.Vector(n);        for (int i=0; i<n; i++)            l.addElement(e.nextElement());        return new PyList(l);    }    /**     * Return a copy of the dictionarys list of values.     */    public PyList values() {        java.util.Enumeration e = table.elements();        int n = table.size();        java.util.Vector l = new java.util.Vector(n);        for (int i=0; i<n; i++)            l.addElement(e.nextElement());        return new PyList(l);    }    /**     * Return an interator over (key, value) pairs.     */    public PyObject iteritems() {        return new PyDictionaryIter(this, table.keys(),                    PyDictionaryIter.ITEMS);    }    /**     * Return an interator over (key, value) pairs.     */    public PyObject iterkeys() {        return new PyDictionaryIter(this, table.keys(),                    PyDictionaryIter.KEYS);    }    /**     * Return an interator over (key, value) pairs.     */    public PyObject itervalues() {        return new PyDictionaryIter(this, table.keys(),                    PyDictionaryIter.VALUES);    }    public int hashCode() {        throw Py.TypeError("unhashable type");    }}class PyDictionaryIter extends PyIterator {    public static final int KEYS = 0;    public static final int VALUES = 1;    public static final int ITEMS = 2;    private PyObject dict;    private Enumeration enumeration;    private int type;    public PyDictionaryIter(PyObject dict, Enumeration e, int type) {        this.dict = dict;        this.enumeration = e;        this.type = type;    }    public PyObject __iternext__() {        if (!enumeration.hasMoreElements())            return null;        PyObject key = (PyObject) enumeration.nextElement();        switch (type) {        case VALUES:            return dict.__finditem__(key);        case ITEMS:            return new PyTuple(new PyObject[] { key, dict.__finditem__(key) });        default: // KEYS            return key;        }    }}     

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -