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
|
/*-------------------------------------------------------------------------
* Copyright (C) 1997 National Center for Supercomputing Applications.
* All rights reserved.
*
*-------------------------------------------------------------------------
*
* Created: H5Oprivate.h
* Aug 5 1997
* Robb Matzke <matzke@llnl.gov>
*
* Purpose: Object header private include file.
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
#ifndef _H5Oprivate_H
#define _H5Oprivate_H
#include "H5Oproto.h"
#include "H5Fprivate.h"
#include "H5Gprivate.h"
#define H5O_MIN_SIZE 16 /*min obj header data size */
#define H5O_NMESGS 32 /*initial number of messages */
#define H5O_NCHUNKS 8 /*initial number of chunks */
#define H5O_NEW_MESG (-1) /*new message */
#define H5O_NO_ADDR (-1) /*no disk address yet */
#define H5O_VERSION 1
#define H5O_ALIGNMENT 4
#define H5O_ALIGN(X,A) ((X)=(A)*(((X)+(A)-1)/(A)))
#define H5O_SIZEOF_HDR(F) \
(1 + /*version number */ \
1 + /*alignment */ \
2 + /*number of messages */ \
4 + /*reference count */ \
4) /*header data size */
typedef struct H5O_class_t {
intn id; /*message type ID on disk */
const char *name; /*message name for debugging */
void *(*decode)(hdf5_file_t*,const uint8*); /*decode mesg */
herr_t (*encode)(hdf5_file_t*,size_t,uint8*,const void*);
void *(*fast)(const H5G_entry_t*, void*); /*get from stab ent */
hbool_t (*cache)(H5G_entry_t*,const void*); /*put into entry */
void *(*copy)(const void*,void*); /*copy native value */
size_t (*size)(hdf5_file_t*,const void*); /*size of raw value */
void *(*free)(void*); /*free native data struct */
herr_t (*debug)(hdf5_file_t*,const void*, FILE*, intn, intn);
} H5O_class_t;
typedef struct H5O_mesg_t {
const H5O_class_t *type; /*type of message */
hbool_t dirty; /*raw out of date wrt native */
void *native; /*native format message */
uint8 *raw; /*ptr to raw data */
size_t raw_size; /*size with alignment */
intn chunkno; /*chunk number for this mesg */
} H5O_mesg_t;
typedef struct H5O_chunk_t {
hbool_t dirty; /*dirty flag */
haddr_t addr; /*chunk file address */
size_t size; /*chunk size */
uint8 *image; /*image of file */
} H5O_chunk_t;
typedef struct H5O_t {
hbool_t dirty; /*out of data wrt disk */
intn version; /*version number */
intn alignment; /*message alignment */
intn nlink; /*link count */
intn nmesgs; /*number of messages */
intn alloc_nmesgs; /*number of message slots */
H5O_mesg_t *mesg; /*array of messages */
intn nchunks; /*number of chunks */
intn alloc_nchunks; /*chunks allocated */
H5O_chunk_t *chunk; /*array of chunks */
} H5O_t;
/*
* Null message.
*/
#define H5O_NULL_ID 0x0000
extern const H5O_class_t H5O_NULL[1];
/*
* Object header continuation message.
*/
#define H5O_CONT_ID 0x0010
extern const H5O_class_t H5O_CONT[1];
typedef struct H5O_cont_t {
haddr_t addr; /*address of continuation block */
size_t size; /*size of continuation block */
/* the following field(s) do not appear on disk */
intn chunkno; /*chunk this mesg refers to */
} H5O_cont_t;
/*
* Symbol table message.
*/
#define H5O_STAB_ID 0x0011
extern const H5O_class_t H5O_STAB[1];
typedef struct H5O_stab_t {
haddr_t btree; /*address of B-tree */
haddr_t heap; /*address of name heap */
} H5O_stab_t;
haddr_t H5O_new (hdf5_file_t *f, intn nlink, size_t size_hint);
intn H5O_link (hdf5_file_t *f, haddr_t addr, H5G_entry_t *ent, intn adjust);
void *H5O_read (hdf5_file_t *f, haddr_t addr, H5G_entry_t *ent,
const H5O_class_t *type, intn sequence, void *mesg);
const void *H5O_peek (hdf5_file_t *f, haddr_t addr, const H5O_class_t *type,
intn sequence);
intn H5O_modify (hdf5_file_t *f, haddr_t addr, H5G_entry_t *ent,
hbool_t *ent_modified, const H5O_class_t *type,
intn overwrite, const void *mesg);
herr_t H5O_debug (hdf5_file_t *f, haddr_t addr, FILE *stream,
intn indent, intn fwidth);
#endif
|