1# Copyright 2005-2018 ECMWF.
2#
3# This software is licensed under the terms of the Apache Licence Version 2.0
4# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
5#
6# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
7# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
8#
9
10unsigned [2] N2 : dump;
11unsigned [2] codedNumberOfGroups : no_copy ;
12unsigned [2] numberOfSecondOrderPackedValues : dump;
13
14# used to extend
15unsigned [1] extraValues=0 : hidden, edition_specific;
16
17meta numberOfGroups evaluate(codedNumberOfGroups + 65536 * extraValues);
18
19unsigned [1] widthOfWidths : dump;
20unsigned [1] widthOfLengths : dump;
21unsigned [2] NL : dump;
22
23if (orderOfSPD) {
24	 unsigned[1] widthOfSPD ;
25	 meta SPD spd(widthOfSPD,orderOfSPD) : read_only;
26}
27
28
29meta groupWidths unsigned_bits(widthOfWidths,numberOfGroups) : read_only;
30meta groupLengths unsigned_bits(widthOfLengths,numberOfGroups) : read_only;
31meta firstOrderValues unsigned_bits(widthOfFirstOrderValues,numberOfGroups) : read_only;
32meta countOfGroupLengths sum(groupLengths);
33
34transient numberOfCodedValues=countOfGroupLengths+orderOfSPD;
35#transient numberOfCodedValues=countOfGroupLengths;
36meta bitsPerValue second_order_bits_per_value(codedValues,binaryScaleFactor,decimalScaleFactor);
37
38
39position offsetBeforeData;
40if(bitmapPresent)   {
41   meta codedValues data_g1second_order_general_extended_packing(
42	#simple_packing args
43     section4Length,
44     offsetBeforeData,
45     offsetSection4,
46     unitsFactor,
47     unitsBias,
48     changingPrecision,
49     numberOfCodedValues,
50     bitsPerValue,
51     referenceValue,
52     binaryScaleFactor,
53     decimalScaleFactor,
54	#g1second_order_row_by_row args
55	 halfByte,
56	 packingType,
57	 grid_ieee,
58	 precision,
59	 widthOfFirstOrderValues,
60	 firstOrderValues,
61	 N1,
62	 N2,
63	 numberOfGroups,
64	 codedNumberOfGroups,
65	 numberOfSecondOrderPackedValues,
66	 extraValues,
67	 groupWidths,
68	 widthOfWidths,
69	 groupLengths,
70	 widthOfLengths,
71	 NL,
72	 SPD,
73	 widthOfSPD,
74	 orderOfSPD,
75	 numberOfPoints
76
77   ): read_only;
78   alias data.packedValues = codedValues;
79
80   if (boustrophedonicOrdering)
81   {
82      if (GRIBEX_boustrophedonic)
83      {
84         meta preBitmapValues data_apply_boustrophedonic_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor,numberOfRows,numberOfColumns,numberOfPoints): read_only;
85      }
86      else
87      {
88         meta preBitmapValues data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : read_only;
89      }
90      meta values data_apply_boustrophedonic(preBitmapValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump;
91   }
92   else
93   {
94       meta values data_apply_bitmap(codedValues,bitmap,missingValue,binaryScaleFactor) : dump;
95   }
96} else {
97   if (boustrophedonicOrdering) {
98
99	   meta codedValues data_g1second_order_general_extended_packing(
100		#simple_packing args
101		 section4Length,
102		 offsetBeforeData,
103		 offsetSection4,
104		 unitsFactor,
105		 unitsBias,
106		 changingPrecision,
107		 numberOfCodedValues,
108		 bitsPerValue,
109		 referenceValue,
110		 binaryScaleFactor,
111		 decimalScaleFactor,
112		#g1second_order_row_by_row args
113		 halfByte,
114		 packingType,
115		 grid_ieee,
116		 precision,
117		 widthOfFirstOrderValues,
118		 firstOrderValues,
119		 N1,
120		 N2,
121		 numberOfGroups,
122		 codedNumberOfGroups,
123		 numberOfSecondOrderPackedValues,
124		 extraValues,
125		 groupWidths,
126		 widthOfWidths,
127		 groupLengths,
128		 widthOfLengths,
129		 NL,
130		 SPD,
131		 widthOfSPD,
132		 orderOfSPD,
133		 numberOfPoints
134
135		 ) : read_only;
136		 meta values data_apply_boustrophedonic(codedValues,numberOfRows,numberOfColumns,numberOfPoints,pl) : dump;
137	} else {
138	   meta values data_g1second_order_general_extended_packing(
139		#simple_packing args
140		 section4Length,
141		 offsetBeforeData,
142		 offsetSection4,
143		 unitsFactor,
144		 unitsBias,
145		 changingPrecision,
146		 numberOfCodedValues,
147		 bitsPerValue,
148		 referenceValue,
149		 binaryScaleFactor,
150		 decimalScaleFactor,
151		#g1second_order_row_by_row args
152		 halfByte,
153		 packingType,
154		 grid_ieee,
155		 precision,
156		 widthOfFirstOrderValues,
157		 firstOrderValues,
158		 N1,
159		 N2,
160		 numberOfGroups,
161		 codedNumberOfGroups,
162		 numberOfSecondOrderPackedValues,
163		 extraValues,
164		 groupWidths,
165		 widthOfWidths,
166		 groupLengths,
167		 widthOfLengths,
168		 NL,
169		 SPD,
170		 widthOfSPD,
171		 orderOfSPD,
172		 numberOfPoints
173
174		 ) : dump;
175		 alias codedValues=values;
176	}
177   alias data.packedValues = values;
178}
179
180meta packingError simple_packing_error(bitsPerValue,binaryScaleFactor,decimalScaleFactor,referenceValue,ibm) : no_copy;
181
182template statistics "common/statistics_grid.def";
183