1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under 4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution, 5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html 6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: ExceptionHandlerTable.java,v 1.1.1.1 2004/05/09 16:57:47 vlad_r Exp $ 8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.jcd.cls.attribute; 10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.io.IOException; 12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.ArrayList; 13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.List; 14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.jcd.lib.UDataOutputStream; 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/** 19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author (C) 2001, Vlad Roubtsov 20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectfinal class ExceptionHandlerTable implements IExceptionHandlerTable 22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{ 23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // public: ................................................................ 24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // ACCESSORS: 26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public Exception_info get (final int offset) 28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return (Exception_info) m_exceptions.get (offset); 30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int size () 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return m_exceptions.size (); 35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public long length () 38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return 2 + (m_exceptions.size () << 3); // use size() if class becomes non-final 40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Cloneable: 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Performs a deep copy. 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public Object clone () 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project try 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final ExceptionHandlerTable _clone = (ExceptionHandlerTable) super.clone (); 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // deep clone: 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int exceptions_count = m_exceptions.size (); // use size() if class becomes non-final 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _clone.m_exceptions = new ArrayList (exceptions_count); 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int e = 0; e < exceptions_count; ++ e) 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project _clone.m_exceptions.add (((Exception_info) m_exceptions.get (e)).clone ()); 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return _clone; 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project catch (CloneNotSupportedException e) 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project throw new InternalError (e.toString ()); 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // IClassFormatOutput: 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public void writeInClassFormat (final UDataOutputStream out) throws IOException 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int exception_table_length = m_exceptions.size (); // use size() if class becomes non-final 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project out.writeU2 (exception_table_length); 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project for (int i = 0; i < exception_table_length; i++) 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project get (i).writeInClassFormat (out); 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // MUTATORS: 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public int add (final Exception_info exception) 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project final int newoffset = m_exceptions.size (); // use size() if class becomes non-final 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_exceptions.add (exception); 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return newoffset; 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project public Exception_info set (final int offset, final Exception_info exception) 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project return (Exception_info) m_exceptions.set (offset, exception); 96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // protected: ............................................................. 99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // package: ............................................................... 101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project ExceptionHandlerTable (final int capacity) 104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project { 105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project m_exceptions = capacity < 0 ? new ArrayList () : new ArrayList (capacity); 106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project } 107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // private: ............................................................... 109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project private List/* Exception_info */ m_exceptions; 112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class 114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 115