2 * $Id: faixbox_manager.h 44 2011-02-15 12:32:29Z kaori $
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
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
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.
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.
31 #ifndef FAIXBOX_MANAGER_H_
32 # define FAIXBOX_MANAGER_H_
34 #include "byte_manager.h"
35 #include "box_manager.h"
37 /** 4byte parameters of a faix element*/
38 typedef struct faixelem4_param{
39 Byte4_t off; /**< offset*/
40 Byte4_t len; /**< length*/
43 /** 8byte parameters of a faix element*/
44 typedef struct faixelem8_param{
45 Byte8_t off; /**< offset*/
46 Byte8_t len; /**< length*/
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;
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;
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*/
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*/
84 * @param[in] box pointer to the reference faix_box
85 * @return generated faixbox
87 faixbox_param_t * gene_faixbox( box_param_t *box);
91 * print faix box parameters
93 * @param[in] faix faix box pointer
95 void print_faixbox( faixbox_param_t *faix);
101 * @param[in,out] faix addressof the faixbox pointer
103 void delete_faixbox( faixbox_param_t **faix);
106 * get nmax parameter value from faix box
108 * @param[in] faix faix box pointer
110 Byte8_t get_nmax( faixbox_param_t *faix);
113 * get m parameter value from faix box
115 * @param[in] faix faix box pointer
117 Byte8_t get_m( faixbox_param_t *faix);
120 * get offset of a element from faix box
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)
126 Byte8_t get_elemOff( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
129 * get length of a element from faix box
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)
135 Byte8_t get_elemLen( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
138 * get aux of a element from faix box
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)
144 Byte4_t get_elemAux( faixbox_param_t *faix, Byte8_t elem_id, Byte8_t row_id);
146 #endif /* !FAIXBOX_MANAGER_H_ */