File: HDF5Factory.java

package info (click to toggle)
libsis-jhdf5-java 19.04.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 8,668 kB
  • sloc: java: 79,644; ansic: 18,986; sh: 309; makefile: 49; xml: 12
file content (178 lines) | stat: -rw-r--r-- 6,422 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*
 * Copyright 2007 - 2018 ETH Zuerich, CISD and SIS.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package ch.systemsx.cisd.hdf5;

import java.io.File;

import hdf.hdf5lib.H5;

/**
 * A static wrapper for the {@link IHDF5Factory} for creating writers and readers of HDF5 files. For straight-forward creation, see methods
 * {@link #open(File)} and {@link #openForReading(File)}. If you need full control over the creation process, see the methods {@link #configure(File)}
 * and {@link #configureForReading(File)}.
 * 
 * @author Bernd Rinn
 */
public final class HDF5Factory
{

    /**
     * Opens an HDF5 <var>file</var> for writing and reading. If the file does not yet exist, it will be created.
     */
    public static IHDF5Writer open(File file)
    {
        return HDF5FactoryProvider.get().open(file);
    }

    /**
     * Opens an HDF5 file named <var>filePath</var> for writing and reading. If the file does not yet exist, it will be created.
     */
    public static IHDF5Writer open(String filePath)
    {
        return HDF5FactoryProvider.get().open(new File(filePath));
    }

    /**
     * Opens an HDF5 <var>file</var> for reading. It is an error if the file does not exist.
     */
    public static IHDF5Reader openForReading(File file)
    {
        return HDF5FactoryProvider.get().openForReading(file);
    }

    /**
     * Opens an HDF5 file named <var>filePath</var> for reading. It is an error if the file does not exist.
     */
    public static IHDF5Reader openForReading(String filePath)
    {
        return HDF5FactoryProvider.get().openForReading(new File(filePath));
    }

    /**
     * Opens a configurator for an HDF5 <var>file</var> for writing and reading. Configure the writer as you need and then call
     * {@link IHDF5WriterConfigurator#writer()} in order to start reading and writing the file.
     */
    public static IHDF5WriterConfigurator configure(File file)
    {
        return HDF5FactoryProvider.get().configure(file);
    }

    /**
     * Opens a configurator for an HDF5 file named <var>filePath</var> for writing and reading. Configure the writer as you need and then call
     * {@link IHDF5WriterConfigurator#writer()} in order to start reading and writing the file.
     */
    public static IHDF5WriterConfigurator configure(String filePath)
    {
        return HDF5FactoryProvider.get().configure(new File(filePath));
    }

    /**
     * Opens a configurator for an HDF5 <var>file</var> for reading. Configure the reader as you need and then call
     * {@link IHDF5ReaderConfigurator#reader()} in order to start reading the file.
     */
    public static IHDF5ReaderConfigurator configureForReading(File file)
    {
        return HDF5FactoryProvider.get().configureForReading(file);
    }

    /**
     * Opens a configurator for an HDF5 file named <var>filePath</var> for reading. Configure the reader as you need and then call
     * {@link IHDF5ReaderConfigurator#reader()} in order to start reading the file.
     */
    public static IHDF5ReaderConfigurator configureForReading(String filePath)
    {
        return HDF5FactoryProvider.get().configureForReading(new File(filePath));
    }

    /**
     * Returns <code>true</code>, if the <var>file</var> is an HDF5 file and <code>false</code> otherwise.
     */
    public static boolean isHDF5File(File file)
    {
        return HDF5FactoryProvider.get().isHDF5File(file);
    }

    /**
     * Returns <code>true</code>, if the file named <var>filePath</var> is an HDF5 file and <code>false</code> otherwise.
     */
    public static boolean isHDF5File(String filePath)
    {
        return HDF5FactoryProvider.get().isHDF5File(new File(filePath));
    }

    /**
     * Returns <code>true</code> if the HDF5 file has a metadata cache image.
     */
    public static boolean hasMDCImage(File file)
    {
        return HDF5FactoryProvider.get().hasMDCImage(file);
    }

    /**
     * Returns <code>true</code> if the HDF5 file has a metadata cache image.
     */
    public static boolean hasMDCImage(String filePath)
    {
        return HDF5FactoryProvider.get().hasMDCImage(new File(filePath));
    }

    /**
     * Returns the number of open HDF5 files in the library.
     */
    public static int getOpenHDF5FileCount()
    {
        return H5.getOpenFileCount();
    }

    /**
     * This function flushes all data to disk, closes all file identifiers, and cleans up all memory used by the library. This function is generally
     * called when the application calls exit(), but may be called earlier in event of an emergency shutdown or out of desire to free all resources
     * used by the HDF5 library.
     * <p>
     * <i>The reset will only be performed if the library has no open files.</i>
     * 
     * @return <code>true</code> If the reset has been performed and <code>false</code> otherwise.
     */
    public static boolean reset()
    {
        synchronized (H5.class)
        {
            if (H5.getOpenFileCount() == 0)
            {
                HDF5.resetLibrary();
                return true;
            } else
            {
                return false;
            }
        }
    }

    /**
     * H5garbage_collect walks through all the garbage collection routines of the library, freeing any unused memory.
     * <p>
     * It is not required that H5garbage_collect be called at any particular time; it is only necessary in certain situations where the application
     * has performed actions that cause the library to allocate many objects. The application should call H5garbage_collect if it eventually releases
     * those objects and wants to reduce the memory used by the library from the peak usage required.
     * <p>
     * The library automatically garbage collects all the free lists when the application ends.
     */
    public static void garbageCollect()
    {
        H5.H5garbage_collect();
    }
}