summaryrefslogtreecommitdiffstats
path: root/src/H5Tpkg.h
blob: a934b23eaa7182a6b5f484ca9d997513bdbaf727 (plain)
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
/*
 * Copyright (C) 1997 NCSA
 *                    All rights reserved.
 *
 * Programmer:  Robb Matzke <matzke@llnl.gov>
 *              Monday, December  8, 1997
 *
 * Purpose:     This file contains declarations which are visible only within
 *              the H5T package.  Source files outside the H5T package should
 *              include H5Tprivate.h instead.
 */
#ifndef H5T_PACKAGE
#error "Do not include this file outside the H5T package!"
#endif

#ifndef _H5Tpkg_H
#define _H5Tpkg_H

/*
 * Define this to enable debugging.
 */
#ifdef NDEBUG
#  undef H5T_DEBUG
#endif

#include <H5Tprivate.h>

typedef struct H5T_atomic_t {
    H5T_order_t         order;  /*byte order                                 */
    size_t              prec;   /*precision in bits                          */
    size_t              offset; /*bit position of lsb of value               */
    H5T_pad_t          lsb_pad;/*type of lsb padding                        */
    H5T_pad_t           msb_pad;/*type of msb padding                        */
    union {
        struct {
            H5T_sign_t  sign;   /*type of integer sign                       */
        } i;                    /*integer; integer types                     */

        struct {
            size_t      sign;   /*bit position of sign bit                   */
            size_t      epos;   /*position of lsb of exponent                */
            size_t      esize;  /*size of exponent in bits                   */
            uint64      ebias;  /*exponent bias                              */
            size_t      mpos;   /*position of lsb of mantissa                */
            size_t      msize;  /*size of mantissa                           */
            H5T_norm_t  norm;   /*normalization                              */
            H5T_pad_t   pad;    /*type of padding for internal bits          */
        } f;                    /*floating-point types                       */

        struct {
            H5T_cset_t  cset;   /*character set                              */
            H5T_str_t   pad;    /*space or null padding of extra bytes       */
        } s;
    } u;
} H5T_atomic_t;

typedef struct H5T_compnd_t {
    intn                nalloc;         /*num entries allocated in MEMB array*/
    intn                nmembs;         /*number of members defined in struct*/
    struct H5T_member_t *memb;          /*array of struct members            */
} H5T_compnd_t;

struct H5T_t {
    hbool_t             locked; /*if locked, then can't be modified          */
    H5T_class_t         type;   /*which class of type is this?               */
    size_t              size;   /*total size of an instance of this type     */
    union {
        H5T_atomic_t    atomic; /*an atomic data type                        */
        H5T_compnd_t    compnd; /*a compound data type (struct)              */
    } u;
};

typedef struct H5T_member_t {
    char                *name;          /*name of this member                */
    size_t              offset;         /*offset from beginning of struct    */
    intn                ndims;          /*member dimensionality              */
    size_t              dim[4];         /*size in each dimension             */
    intn		perm[4];        /*index permutation                  */
    struct H5T_t        *type;          /*type of this member                */
} H5T_member_t;

/* The data type conversion database */
typedef struct H5T_path_t {
    H5T_t       *src;                   /*source data type ID                */
    H5T_t       *dst;                   /*destination data type ID           */
    H5T_conv_t	func;			/*data conversion function	     */
    hbool_t	is_hard;		/*is it a hard function?	     */
    H5T_cdata_t	cdata;			/*data for this function	     */
} H5T_path_t;

/* The master list of soft conversion functions */
typedef struct H5T_soft_t {
    H5T_class_t src;                    /*source data type class             */
    H5T_class_t dst;                    /*destination data type class        */
    H5T_conv_t  func;                   /*the conversion function            */
} H5T_soft_t;

/* Function prototypes for H5T package scope */
H5T_path_t *H5T_path_find (const H5T_t *src, const H5T_t *dst, 
                           hbool_t create, H5T_conv_t func);

/* Conversion functions */
herr_t H5T_conv_noop (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
		      size_t nelmts, void *buf, void *bkg);
herr_t H5T_conv_order (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
		       size_t nelmts, void *_buf, void *bkg);
herr_t H5T_conv_struct (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
			size_t nelmts, void *_buf, void *bkg);


#endif