1/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2 *
3 * This program and the accompanying materials are made available under
4 * the terms of the Common Public License v1.0 which accompanies this distribution,
5 * and is available at http://www.eclipse.org/legal/cpl-v10.html
6 *
7 * $Id: CONSTANT_Utf8_info.java,v 1.1.1.1 2004/05/09 16:57:49 vlad_r Exp $
8 */
9package com.vladium.jcd.cls.constant;
10
11import java.io.IOException;
12
13import com.vladium.jcd.lib.UDataInputStream;
14import com.vladium.jcd.lib.UDataOutputStream;
15
16// ----------------------------------------------------------------------------
17/**
18 * The CONSTANT_Utf8_info structure is used to represent constant string values.<P>
19 *
20 * The bytes of multibyte characters are stored in the class file in big-endian
21 * (high byte first) order. There are two differences between this format and the
22 * "standard" UTF-8 format. First, the null byte (byte)0 is encoded using the
23 * two-byte format rather than the one-byte format, so that Java Virtual Machine
24 * UTF-8 strings never have embedded nulls. Second, only the one-byte, two-byte,
25 * and three-byte formats are used. The Java Virtual Machine does not recognize
26 * the longer UTF-8 formats.
27 *
28 * @author (C) 2001, Vlad Roubtsov
29 */
30public
31final class CONSTANT_Utf8_info extends CONSTANT_info
32{
33    // public: ................................................................
34
35    public static final byte TAG = 1;
36
37    public String m_value;
38
39
40    public CONSTANT_Utf8_info (final String value)
41    {
42        m_value = value;
43    }
44
45
46    public final byte tag ()
47    {
48        return TAG;
49    }
50
51    // Visitor:
52
53    public Object accept (final ICONSTANTVisitor visitor, final Object ctx)
54    {
55        return visitor.visit (this, ctx);
56    }
57
58    public String toString ()
59    {
60        return "CONSTANT_Utf8: [" + m_value + ']';
61    }
62
63    // Cloneable: inherited clone() is Ok
64
65    // IClassFormatOutput:
66
67    public void writeInClassFormat (final UDataOutputStream out) throws IOException
68    {
69        super.writeInClassFormat (out);
70
71        out.writeUTF (m_value);
72    }
73
74    // protected: .............................................................
75
76
77    protected CONSTANT_Utf8_info (final UDataInputStream bytes) throws IOException
78    {
79        m_value = bytes.readUTF ();
80    }
81
82    // package: ...............................................................
83
84    // private: ...............................................................
85
86} // end of class
87// ----------------------------------------------------------------------------
88