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