All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.python.core.InternalTables1 Maven / Gradle / Ivy

Go to download

Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform.

There is a newer version: 2.7.4
Show newest version
// Copyright 2000 Samuele Pedroni

package org.python.core;

import java.util.*;

/**
 * 
 * @deprecated Java1 no longer supported.
 *
 */
public class InternalTables1 extends InternalTables {

    protected static interface Table {
        public Object put(Object key, Object obj);

        public Object get(Object key);

        public Object remove(Object key);

        public void clear();
    }

    private static class TableProvid1 extends Hashtable implements Table {
    }

    final protected static short JCLASS = 0;

    final protected static short LAZY_JCLASS = 1;

    final protected static short ADAPTER_CLASS = 2;

    final protected static short ADAPTER = 3;

    protected Table classes;

    protected Table temp;

    protected Table counters;

    protected Table lazyClasses;

    protected Table adapterClasses;

    protected final short GSTABLE = 1;

    protected final short JCSTABLE = 2;

    protected short keepstable;

    protected void beginStable(short lvl) {
        this.keepstable = lvl;
    }

    protected void classesPut(Class c, Object jc) {
        if (this.keepstable == this.JCSTABLE) {
            this.temp.put(c, jc);
            // System.err.println("temp-defer-canonical: "+c.getName());
        } else {
            this.classes.put(c, jc);
        }
        String name = c.getName();
        Integer cnt = (Integer) this.counters.get(name);
        if (cnt == null) {
            this.counters.put(name, new Integer(1));
            this.lazyClasses.remove(name);
        } else {
            this.counters.put(name, new Integer(cnt.intValue() + 1));
        }
    }

    protected Object classesGet(Class c) {
        Object o = this.classes.get(c);
        if (o != null || this.keepstable != this.JCSTABLE)
            return o;
        return this.temp.get(c);
    }

    protected void endStable() {
        if (this.keepstable == this.JCSTABLE)
            commitTemp();
        this.keepstable = 0;
    }

    protected void classesDec(String name) {
        int c = ((Integer) this.counters.get(name)).intValue();
        if (c == 1)
            this.counters.remove(name);
        else
            this.counters.put(name, new Integer(c - 1));
    }

    protected void commitTemp() {
        for (Enumeration e = ((Hashtable) this.temp).keys(); e
                .hasMoreElements();) {
            Object c = e.nextElement();
            this.classes.put(c, this.temp.get(c));
        }
        this.temp.clear();
    }

    protected boolean queryCanonical(String name) {
        return this.counters.get(name) != null
                || this.lazyClasses.get(name) != null;
    }

    protected PyJavaClass getCanonical(Class c) {
        return (PyJavaClass) classesGet(c);
    }

    protected PyJavaClass getLazyCanonical(String name) {
        return (PyJavaClass) this.lazyClasses.get(name);
    }

    protected void putCanonical(Class c, PyJavaClass canonical) {
        classesPut(c, canonical);
    }

    protected void putLazyCanonical(String name, PyJavaClass canonical) {
        this.lazyClasses.put(name, canonical);
    }

    protected Class getAdapterClass(Class c) {
        return (Class) this.adapterClasses.get(c);
    }

    protected void putAdapterClass(Class c, Class ac) {
        this.adapterClasses.put(c, ac);
    }

    private Hashtable adapters;

    protected Object getAdapter(Object o, String evc) {
        return this.adapters.get(evc + '$' + System.identityHashCode(o));
    }

    protected void putAdapter(Object o, String evc, Object ad) {
        this.adapters.put(evc + '$' + System.identityHashCode(o), ad);
    }

    protected short iterType;

    protected Object cur;

    private Enumeration enumm;

    private Hashtable enumTable;

    public void _beginCanonical() {
        beginStable(this.JCSTABLE);
        this.enumm = ((TableProvid1) this.classes).keys();
        this.enumTable = (TableProvid1) this.classes;
        this.iterType = JCLASS;
    }

    public void _beginLazyCanonical() {
        this.enumm = ((TableProvid1) this.lazyClasses).keys();
        this.enumTable = (TableProvid1) this.lazyClasses;
        this.iterType = LAZY_JCLASS;
    }

    public void _beginOverAdapterClasses() {
        this.enumm = ((TableProvid1) this.adapterClasses).keys();
        this.enumTable = (TableProvid1) this.adapterClasses;
        this.iterType = ADAPTER_CLASS;

    }

    public void _beginOverAdapters() {
        this.enumm = this.adapters.keys();
        this.enumTable = this.adapters;
        this.iterType = ADAPTER;
    }

    public Object _next() {
        if (this.enumm.hasMoreElements()) {
            this.cur = this.enumm.nextElement();
            switch (this.iterType) {
            case JCLASS:
                return (PyJavaClass) this.classes.get(this.cur);
            case LAZY_JCLASS:
                PyJavaClass lazy = (PyJavaClass) this.lazyClasses.get(this.cur);
                return new _LazyRep(lazy.__name__, lazy.__mgr__);
            case ADAPTER_CLASS:
                return this.cur;
            case ADAPTER:
                return this.adapters.get(this.cur).getClass().getInterfaces()[0];
            }
        }
        this.cur = null;
        this.enumm = null;
        endStable();
        return null;
    }

    public void _flushCurrent() {
        this.enumTable.remove(this.cur);
        if (this.iterType == JCLASS)
            classesDec(((Class) this.cur).getName());
    }

    public void _flush(PyJavaClass jc) {
        Class c = jc.proxyClass;
        if (c == null) {
            this.lazyClasses.remove(jc.__name__);
        } else {
            this.classes.remove(c);
            classesDec(jc.__name__);
        }
    }

    protected InternalTables1(boolean fake) {
    }

    public InternalTables1() {
        this.classes = new TableProvid1();
        this.temp = new TableProvid1();
        this.counters = new TableProvid1();
        this.lazyClasses = new TableProvid1();

        this.adapterClasses = new TableProvid1();

        this.adapters = new Hashtable();
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy