1/*
2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
3 */
4/*
5 * Licensed to the Apache Software Foundation (ASF) under one or more
6 * contributor license agreements.  See the NOTICE file distributed with
7 * this work for additional information regarding copyright ownership.
8 * The ASF licenses this file to You under the Apache License, Version 2.0
9 * (the "License"); you may not use this file except in compliance with
10 * the License.  You may obtain a copy of the License at
11 *
12 *      http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21package com.sun.org.apache.bcel.internal.classfile;
22
23import java.io.DataInput;
24import java.io.DataOutputStream;
25import java.io.IOException;
26
27import com.sun.org.apache.bcel.internal.Const;
28
29/**
30 * This class is derived from the abstract {@link Constant}
31 * and represents a reference to a float object.
32 *
33 * @version $Id: ConstantFloat.java 1747278 2016-06-07 17:28:43Z britter $
34 * @see     Constant
35 */
36public final class ConstantFloat extends Constant implements ConstantObject {
37
38    private float bytes;
39
40
41    /**
42     * @param bytes Data
43     */
44    public ConstantFloat(final float bytes) {
45        super(Const.CONSTANT_Float);
46        this.bytes = bytes;
47    }
48
49
50    /**
51     * Initialize from another object. Note that both objects use the same
52     * references (shallow copy). Use clone() for a physical copy.
53     */
54    public ConstantFloat(final ConstantFloat c) {
55        this(c.getBytes());
56    }
57
58
59    /**
60     * Initialize instance from file data.
61     *
62     * @param file Input stream
63     * @throws IOException
64     */
65    ConstantFloat(final DataInput file) throws IOException {
66        this(file.readFloat());
67    }
68
69
70    /**
71     * Called by objects that are traversing the nodes of the tree implicitely
72     * defined by the contents of a Java class. I.e., the hierarchy of methods,
73     * fields, attributes, etc. spawns a tree of objects.
74     *
75     * @param v Visitor object
76     */
77    @Override
78    public void accept( final Visitor v ) {
79        v.visitConstantFloat(this);
80    }
81
82
83    /**
84     * Dump constant float to file stream in binary format.
85     *
86     * @param file Output file stream
87     * @throws IOException
88     */
89    @Override
90    public final void dump( final DataOutputStream file ) throws IOException {
91        file.writeByte(super.getTag());
92        file.writeFloat(bytes);
93    }
94
95
96    /**
97     * @return data, i.e., 4 bytes.
98     */
99    public final float getBytes() {
100        return bytes;
101    }
102
103
104    /**
105     * @param bytes the raw bytes that represent this float
106     */
107    public final void setBytes( final float bytes ) {
108        this.bytes = bytes;
109    }
110
111
112    /**
113     * @return String representation.
114     */
115    @Override
116    public final String toString() {
117        return super.toString() + "(bytes = " + bytes + ")";
118    }
119
120
121    /** @return Float object
122     */
123    @Override
124    public Object getConstantValue( final ConstantPool cp ) {
125        return new Float(bytes);
126    }
127}
128