[trunk] FolderReorgProposal task: fix jpip doxygen
[openjpeg.git] / src / lib / openjpip / faixbox_manager.h
1 /*
2  * $Id$
3  *
4  * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
5  * Copyright (c) 2002-2011, Professor Benoit Macq
6  * Copyright (c) 2010-2011, Kaori Hagihara
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #ifndef         FAIXBOX_MANAGER_H_
32 # define        FAIXBOX_MANAGER_H_
33
34 #include "byte_manager.h"
35 #include "box_manager.h"
36
37 /** 4byte parameters of a faix element*/
38 typedef struct faixelem4_param{
39   Byte4_t off; /**< offset*/
40   Byte4_t len; /**< length*/
41 } faixelem4_param_t;
42
43 /** 8byte parameters of a faix element*/
44 typedef struct faixelem8_param{
45   Byte8_t off; /**< offset*/
46   Byte8_t len; /**< length*/
47 } faixelem8_param_t;
48
49 /** 4byte parameters of fragment array index box*/
50 typedef struct subfaixbox4_param{
51   Byte4_t nmax;             /**< maximum number of valid elements in any row of the array*/
52   Byte4_t m;                /**< number of raws of the array*/
53   faixelem4_param_t *elem;  /**< dynamic array pointer of faix elements*/
54   Byte4_t *aux;             /**< dynamic array pointer of auxiliary*/
55                                               /**info in each element for version 2 or 3*/
56 } subfaixbox4_param_t;
57
58 /** 8byte parameters of fragment array index box*/
59 typedef struct subfaixbox8_param{
60   Byte8_t nmax;             /**< maximum number of valid elements in any row of the array*/
61   Byte8_t m;                /**< number of raws of the array*/
62   faixelem8_param_t *elem;  /**< dynamic array pointer of faix elements*/
63   Byte4_t *aux;             /**< dynamic array pointer of auxiliary*/
64                                               /**info in each element for version 2 or 3*/
65 } subfaixbox8_param_t;
66
67 /** variable sized parameters in fragment array index box*/
68 typedef union subfaixbox_param{
69   subfaixbox4_param_t *byte4_params; /**< parameters with 4byte codes for version 0 or 2*/
70   subfaixbox8_param_t *byte8_params; /**< parameters with 8byte codes for version 1 or 3*/
71 } subfaixbox_param_t;
72
73 /** fragment array index box parameters*/
74 /** I.3.2.4.2 Fragment Array Index box*/
75 typedef struct faixbox_param{
76   Byte_t version;                /**< Refer to the Table I.3 - Version values*/
77   subfaixbox_param_t subfaixbox; /**< rest information in faixbox*/
78 } faixbox_param_t;
79
80
81 /**
82  * generate faix box
83  *
84  * @param[in] box pointer to the reference faix_box
85  * @return        generated faixbox
86  */
87 faixbox_param_t * gene_faixbox( box_param_t *box);
88
89
90 /**
91  * print faix box parameters
92  *
93  * @param[in] faix faix box pointer
94  */
95 void print_faixbox( faixbox_param_t *faix);
96
97
98 /**
99  * delete faix box
100  *
101  * @param[in,out] faix addressof the faixbox pointer
102  */
103 void delete_faixbox( faixbox_param_t **faix);
104
105 /**
106  * get nmax parameter value from faix box
107  *
108  * @param[in] faix faix box pointer
109  */
110 Byte8_t get_nmax( faixbox_param_t *faix);
111
112 /**
113  * get m parameter value from faix box
114  *
115  * @param[in] faix faix box pointer
116  */
117 Byte8_t get_m( faixbox_param_t *faix);
118
119 /**
120  * get offset of a element from faix box
121  *
122  * @param[in] faix    faix box pointer
123  * @param[in] elem_id element id in a row (0<= <nmax)
124  * @param[in] row_id  row id (0<= <m)
125  */
126 Byte8_t get_elemOff( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
127
128 /**
129  * get length of a element from faix box
130  *
131  * @param[in] faix    faix box pointer
132  * @param[in] elem_id element id in a row (0<= <nmax)
133  * @param[in] row_id  row id (0<= <m)
134  */
135 Byte8_t get_elemLen( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
136
137 /**
138  * get aux of a element from faix box
139  *
140  * @param[in] faix    faix box pointer
141  * @param[in] elem_id element id in a row (0<= <nmax)
142  * @param[in] row_id  row id (0<= <m)
143  */
144 Byte4_t get_elemAux( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
145
146 #endif      /* !FAIXBOX_MANAGER_H_ */