Package org.apache.xerces.util

Source Code of org.apache.xerces.util.XMLGrammarPoolImpl$Entry

package org.apache.xerces.util;

import org.apache.xerces.xni.grammars.Grammar;
import org.apache.xerces.xni.grammars.XMLGrammarDescription;
import org.apache.xerces.xni.grammars.XMLGrammarPool;

public class XMLGrammarPoolImpl
  implements XMLGrammarPool
{
  protected static final int TABLE_SIZE = 11;
  protected Entry[] fGrammars = null;
  protected boolean fPoolIsLocked;
  protected int fGrammarCount = 0;
  private static final boolean DEBUG = false;

  public XMLGrammarPoolImpl()
  {
    this.fGrammars = new Entry[11];
    this.fPoolIsLocked = false;
  }

  public XMLGrammarPoolImpl(int paramInt)
  {
    this.fGrammars = new Entry[paramInt];
    this.fPoolIsLocked = false;
  }

  public Grammar[] retrieveInitialGrammarSet(String paramString)
  {
    synchronized (this.fGrammars)
    {
      int i = this.fGrammars.length;
      Grammar[] arrayOfGrammar = new Grammar[this.fGrammarCount];
      int j = 0;
      for (int k = 0; k < i; k++)
        for (localObject1 = this.fGrammars[k]; localObject1 != null; localObject1 = ((Entry)localObject1).next)
        {
          if (!((Entry)localObject1).desc.getGrammarType().equals(paramString))
            continue;
          arrayOfGrammar[(j++)] = ((Entry)localObject1).grammar;
        }
      Object localObject1 = new Grammar[j];
      System.arraycopy(arrayOfGrammar, 0, localObject1, 0, j);
      Object localObject2 = localObject1;
      return localObject2;
    }
  }

  public void cacheGrammars(String paramString, Grammar[] paramArrayOfGrammar)
  {
    if (!this.fPoolIsLocked)
      for (int i = 0; i < paramArrayOfGrammar.length; i++)
        putGrammar(paramArrayOfGrammar[i]);
  }

  public Grammar retrieveGrammar(XMLGrammarDescription paramXMLGrammarDescription)
  {
    return getGrammar(paramXMLGrammarDescription);
  }

  public void putGrammar(Grammar paramGrammar)
  {
    if (!this.fPoolIsLocked)
      synchronized (this.fGrammars)
      {
        XMLGrammarDescription localXMLGrammarDescription = paramGrammar.getGrammarDescription();
        int i = hashCode(localXMLGrammarDescription);
        int j = (i & 0x7FFFFFFF) % this.fGrammars.length;
        for (Entry localEntry1 = this.fGrammars[j]; localEntry1 != null; localEntry1 = localEntry1.next)
        {
          if ((localEntry1.hash != i) || (!equals(localEntry1.desc, localXMLGrammarDescription)))
            continue;
          localEntry1.grammar = paramGrammar;
          return;
        }
        Entry localEntry2 = new Entry(i, localXMLGrammarDescription, paramGrammar, this.fGrammars[j]);
        this.fGrammars[j] = localEntry2;
        this.fGrammarCount += 1;
      }
  }

  public Grammar getGrammar(XMLGrammarDescription paramXMLGrammarDescription)
  {
    synchronized (this.fGrammars)
    {
      int i = hashCode(paramXMLGrammarDescription);
      int j = (i & 0x7FFFFFFF) % this.fGrammars.length;
      for (Entry localEntry = this.fGrammars[j]; localEntry != null; localEntry = localEntry.next)
      {
        if ((localEntry.hash != i) || (!equals(localEntry.desc, paramXMLGrammarDescription)))
          continue;
        localGrammar = localEntry.grammar;
        return localGrammar;
      }
      Grammar localGrammar = null;
      return localGrammar;
    }
  }

  public Grammar removeGrammar(XMLGrammarDescription paramXMLGrammarDescription)
  {
    synchronized (this.fGrammars)
    {
      int i = hashCode(paramXMLGrammarDescription);
      int j = (i & 0x7FFFFFFF) % this.fGrammars.length;
      Entry localEntry1 = this.fGrammars[j];
      Entry localEntry2 = null;
      while (localEntry1 != null)
      {
        if ((localEntry1.hash == i) && (equals(localEntry1.desc, paramXMLGrammarDescription)))
        {
          if (localEntry2 != null)
            localEntry2.next = localEntry1.next;
          else
            this.fGrammars[j] = localEntry1.next;
          localGrammar1 = localEntry1.grammar;
          localEntry1.grammar = null;
          this.fGrammarCount -= 1;
          Grammar localGrammar2 = localGrammar1;
          return localGrammar2;
        }
        localEntry2 = localEntry1;
        localEntry1 = localEntry1.next;
      }
      Grammar localGrammar1 = null;
      return localGrammar1;
    }
  }

  public boolean containsGrammar(XMLGrammarDescription paramXMLGrammarDescription)
  {
    synchronized (this.fGrammars)
    {
      int i = hashCode(paramXMLGrammarDescription);
      int j = (i & 0x7FFFFFFF) % this.fGrammars.length;
      for (Entry localEntry = this.fGrammars[j]; localEntry != null; localEntry = localEntry.next)
      {
        if ((localEntry.hash != i) || (!equals(localEntry.desc, paramXMLGrammarDescription)))
          continue;
        k = 1;
        return k;
      }
      int k = 0;
      return k;
    }
  }

  public void lockPool()
  {
    this.fPoolIsLocked = true;
  }

  public void unlockPool()
  {
    this.fPoolIsLocked = false;
  }

  public void clear()
  {
    for (int i = 0; i < this.fGrammars.length; i++)
    {
      if (this.fGrammars[i] == null)
        continue;
      this.fGrammars[i].clear();
      this.fGrammars[i] = null;
    }
    this.fGrammarCount = 0;
  }

  public boolean equals(XMLGrammarDescription paramXMLGrammarDescription1, XMLGrammarDescription paramXMLGrammarDescription2)
  {
    return paramXMLGrammarDescription1.equals(paramXMLGrammarDescription2);
  }

  public int hashCode(XMLGrammarDescription paramXMLGrammarDescription)
  {
    return paramXMLGrammarDescription.hashCode();
  }

  protected static final class Entry
  {
    public int hash;
    public XMLGrammarDescription desc;
    public Grammar grammar;
    public Entry next;

    protected Entry(int paramInt, XMLGrammarDescription paramXMLGrammarDescription, Grammar paramGrammar, Entry paramEntry)
    {
      this.hash = paramInt;
      this.desc = paramXMLGrammarDescription;
      this.grammar = paramGrammar;
      this.next = paramEntry;
    }

    protected void clear()
    {
      this.desc = null;
      this.grammar = null;
      if (this.next != null)
      {
        this.next.clear();
        this.next = null;
      }
    }
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     org.apache.xerces.util.XMLGrammarPoolImpl
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of org.apache.xerces.util.XMLGrammarPoolImpl$Entry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.