idmap.java

来自「c3p0数据库连接池实现源码」· Java 代码 · 共 132 行

JAVA
132
字号
/* * Distributed as part of c3p0 v.0.9.1-pre6 * * Copyright (C) 2005 Machinery For Change, Inc. * * Author: Steve Waldman <swaldman@mchange.com> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2.1, as  * published by the Free Software Foundation. * * This software 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.  See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this software; see the file LICENSE.  If not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */package com.mchange.v1.identicator;import java.util.*;import com.mchange.v1.util.*;/* * Implementation notes: many AbstractMap methods are written in * terms of entrySet(). It is most important to get that right. */abstract class IdMap extends AbstractMap implements Map{    Map         inner;    Identicator id;    protected IdMap(Map inner, Identicator id)    {	this.inner = inner;	this.id = id;    }        public Object put(Object key, Object value)     { return inner.put( createIdKey( key ), value ); }    public boolean containsKey(Object key)    { return inner.containsKey( createIdKey( key ) ); }    public Object get(Object key)    { return inner.get( createIdKey( key ) ); }    public Object remove(Object key)    { return inner.remove( createIdKey( key ) ); }    protected Object removeIdHashKey( IdHashKey idhk )    { return inner.remove( idhk ); }    public Set entrySet()    { return new UserEntrySet(); }    protected final Set internalEntrySet()    { return inner.entrySet(); }    protected abstract IdHashKey createIdKey(Object o);    protected final Entry createIdEntry(Object key, Object val)    { return new SimpleMapEntry( createIdKey( key ), val); }        protected final Entry createIdEntry(Entry entry)    { return createIdEntry( entry.getKey(), entry.getValue() ); }    private final class UserEntrySet extends AbstractSet    {	Set innerEntries = inner.entrySet();		public Iterator iterator()	{	    return new WrapperIterator(innerEntries.iterator(), true)		{		    protected Object transformObject(Object o)		    { return new UserEntry( (Entry) o ); }		};	}		public int size()	{ return innerEntries.size(); }		public boolean contains(Object o)	{ 	    if (o instanceof Entry)		{		    Entry entry = (Entry) o;		    return innerEntries.contains( createIdEntry( entry ) ); 		}	    else		return false;	}		public boolean remove(Object o)	{	    if (o instanceof Entry)		{		    Entry entry = (Entry) o;		    return innerEntries.remove( createIdEntry( entry ) ); 		}	    else		return false;	}	public void clear()	{ inner.clear(); }    }    protected static class UserEntry extends AbstractMapEntry    {	private Entry innerEntry;	UserEntry(Entry innerEntry)	{ this.innerEntry = innerEntry; }	public final Object getKey()	{ return ((IdHashKey) innerEntry.getKey()).getKeyObj(); }	public final Object getValue()	{ return innerEntry.getValue(); }	public final Object setValue(Object value)	{ return innerEntry.setValue( value ); }    }}

⌨️ 快捷键说明

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