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: GenericAttribute_info.java,v 1.1.1.1 2004/05/09 16:57:48 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 Project
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.jcd.lib.UDataInputStream;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.jcd.lib.UDataOutputStream;
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This attribute structure is used during parsing to absorb all attribute types
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * that are not currently recognized.
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @see Attribute_info
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author (C) 2001, Vlad Roubtsov
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectfinal class GenericAttribute_info extends Attribute_info
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public byte [] m_info;
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public GenericAttribute_info (final int attribute_name_index, final byte [] info)
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        super (attribute_name_index, (info != null ? info.length : 0));
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_info = (info != null ? info : EMPTY_BYTE_ARRAY);
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public long length ()
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return 6 + m_info.length;
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // Visitor:
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void accept (final IAttributeVisitor visitor, final Object ctx)
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        visitor.visit (this, ctx);
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public String toString ()
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return "generic attribute_info: [attribute_name_index = " + m_name_index + ", attribute_length = " + m_attribute_length + ']';
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // Cloneable:
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    /**
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     * Performs a deep copy.
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project     */
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Object clone ()
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final GenericAttribute_info _clone = (GenericAttribute_info) super.clone ();
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // do deep copy:
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        _clone.m_info = (m_info.length == 0 ? EMPTY_BYTE_ARRAY : (byte []) m_info.clone ());
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return _clone;
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // IClassFormatOutput:
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void writeInClassFormat (final UDataOutputStream out) throws IOException
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        super.writeInClassFormat (out);
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        out.write (m_info, 0, m_info.length);
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    GenericAttribute_info (final int attribute_name_index, final long attribute_length,
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                           final UDataInputStream bytes)
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        throws IOException
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        super (attribute_name_index, attribute_length);
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_info = new byte [(int) m_attribute_length];
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        bytes.readFully (m_info);
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private static final byte [] EMPTY_BYTE_ARRAY = new byte [0];
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
105