1 package nom.tam.util.type;
2
3 /*
4 * #%L
5 * nom.tam FITS library
6 * %%
7 * Copyright (C) 2004 - 2024 nom-tam-fits
8 * %%
9 * This is free and unencumbered software released into the public domain.
10 *
11 * Anyone is free to copy, modify, publish, use, compile, sell, or
12 * distribute this software, either in source code form or as a compiled
13 * binary, for any purpose, commercial or non-commercial, and by any
14 * means.
15 *
16 * In jurisdictions that recognize copyright laws, the author or authors
17 * of this software dedicate any and all copyright interest in the
18 * software to the public domain. We make this dedication for the benefit
19 * of the public at large and to the detriment of our heirs and
20 * successors. We intend this dedication to be an overt act of
21 * relinquishment in perpetuity of all present and future rights to this
22 * software under copyright law.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
28 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
29 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
30 * OTHER DEALINGS IN THE SOFTWARE.
31 * #L%
32 */
33
34 import java.nio.ByteBuffer;
35 import java.nio.DoubleBuffer;
36
37 import nom.tam.fits.header.Bitpix;
38
39 /**
40 * A FITS double-precision floating point element. It is the same as the standard IEEE 64-bit double-precision
41 * floating-point value,
42 */
43 class DoubleType extends ElementType<DoubleBuffer> {
44
45 private static final int SIZE = 8;
46
47 protected DoubleType() {
48 super(SIZE, false, double.class, Double.class, DoubleBuffer.class, 'D', Bitpix.VALUE_FOR_DOUBLE);
49 }
50
51 @Override
52 public void appendBuffer(DoubleBuffer buffer, DoubleBuffer dataToAppend) {
53 @SuppressWarnings("deprecation")
54 double[] temp = new double[Math.min(COPY_BLOCK_SIZE, dataToAppend.remaining())];
55 while (dataToAppend.hasRemaining()) {
56 int nrObBytes = Math.min(temp.length, dataToAppend.remaining());
57 dataToAppend.get(temp, 0, nrObBytes);
58 buffer.put(temp, 0, nrObBytes);
59 }
60 }
61
62 @Override
63 public DoubleBuffer asTypedBuffer(ByteBuffer buffer) {
64 return buffer.asDoubleBuffer();
65 }
66
67 @Override
68 public void getArray(DoubleBuffer buffer, Object array, int offset, int length) {
69 buffer.get((double[]) array, offset, length);
70 }
71
72 @Override
73 public Object newArray(int length) {
74 return new double[length];
75 }
76
77 @Override
78 public void putArray(DoubleBuffer buffer, Object array, int offset, int length) {
79 buffer.put((double[]) array, offset, length);
80 }
81
82 @Override
83 public DoubleBuffer sliceBuffer(DoubleBuffer buffer) {
84 return buffer.slice();
85 }
86
87 @Override
88 public DoubleBuffer wrap(Object array) {
89 return DoubleBuffer.wrap((double[]) array);
90 }
91 }