@@ -147,20 +147,20 @@ class offset_to_table
147147
148148// ========================= Offset to entity byte mapping =========================
149149
150- inline byte& get_raw_location (page_iterator_t &entity, uint16_t offset)
150+ static inline byte& get_raw_location (const page_iterator_t &entity, uint16_t offset)
151151{
152- return *((byte*)entity.pData + (offset-entity.start ));
152+ return *((byte*)entity.pData + (offset-entity.address . start ));
153153}
154154
155- inline byte get_table_value (page_iterator_t &entity, uint16_t offset)
155+ static inline byte get_table_value (const page_iterator_t &entity, uint16_t offset)
156156{
157157 #define CTA_GET_TABLE_VALUE (size, xDomain, yDomain, pTable, offset ) \
158158 return *offset_to_table<TABLE3D_TYPENAME_BASE (size, xDomain, yDomain)>((TABLE3D_TYPENAME_BASE (size, xDomain, yDomain)*)pTable, offset);
159159 #define CTA_GET_TABLE_VALUE_DEFAULT ({ return 0U ; })
160- CONCRETE_TABLE_ACTION (entity.table_key , CTA_GET_TABLE_VALUE, CTA_GET_TABLE_VALUE_DEFAULT, entity.pData , (offset-entity.start ));
160+ CONCRETE_TABLE_ACTION (entity.table_key , CTA_GET_TABLE_VALUE, CTA_GET_TABLE_VALUE_DEFAULT, entity.pData , (offset-entity.address . start ));
161161}
162162
163- inline byte get_value (page_iterator_t &entity, uint16_t offset)
163+ static inline byte get_value (const page_iterator_t &entity, uint16_t offset)
164164{
165165 if (Raw==entity.type )
166166 {
@@ -173,15 +173,15 @@ inline byte get_value(page_iterator_t &entity, uint16_t offset)
173173 return 0U ;
174174}
175175
176- inline void set_table_value (page_iterator_t &entity, uint16_t offset, byte new_value)
176+ inline void set_table_value (const page_iterator_t &entity, uint16_t offset, byte new_value)
177177{
178178 #define CTA_SET_TABLE_VALUE (size, xDomain, yDomain, pTable, offset, new_value ) \
179179 offset_to_table<TABLE3D_TYPENAME_BASE (size, xDomain, yDomain)>((TABLE3D_TYPENAME_BASE (size, xDomain, yDomain)*)pTable, offset) = new_value; break ;
180180 #define CTA_SET_TABLE_VALUE_DEFAULT ({ })
181- CONCRETE_TABLE_ACTION (entity.table_key , CTA_SET_TABLE_VALUE, CTA_SET_TABLE_VALUE_DEFAULT, entity.pData , (offset-entity.start ), new_value);
181+ CONCRETE_TABLE_ACTION (entity.table_key , CTA_SET_TABLE_VALUE, CTA_SET_TABLE_VALUE_DEFAULT, entity.pData , (offset-entity.address . start ), new_value);
182182}
183183
184- inline void set_value (page_iterator_t &entity, byte value, uint16_t offset)
184+ inline void set_value (const page_iterator_t &entity, byte value, uint16_t offset)
185185{
186186 if (Raw==entity.type )
187187 {
@@ -224,16 +224,11 @@ static inline void check_size() {
224224//
225225// Instead we use this (and other) intermediate factory function(s) - it provides a barrier that
226226// forces GCC to construct the page_iterator_t instance at runtime.
227- inline const page_iterator_t create_end_iterator (uint8_t pageNum, uint16_t start)
227+ static inline page_iterator_t create_end_iterator (uint8_t pageNum, uint16_t start)
228228{
229- return page_iterator_t {
230- .pData = nullptr ,
231- .table_key = table_type_None,
232- .page = pageNum,
233- .start = start,
234- .size = start,
235- .type = End,
236- };
229+ return page_iterator_t ( End,
230+ entity_page_location_t (pageNum, UINT8_MAX),
231+ entity_page_address_t (start, 0U ));
237232}
238233
239234// Signal the end of a page
@@ -243,47 +238,37 @@ inline const page_iterator_t create_end_iterator(uint8_t pageNum, uint16_t start
243238
244239// ========================= Table processing ===================
245240
246- inline const page_iterator_t create_table_iterator (void *pTable, table_type_t key, uint8_t pageNum, uint16_t start, uint16_t size)
241+ static inline page_iterator_t create_table_iterator (void *pTable, table_type_t key, uint8_t pageNum, uint8_t index , uint16_t start, uint16_t size)
247242{
248- return page_iterator_t {
249- .pData = pTable,
250- .table_key = key,
251- .page = pageNum,
252- .start = start,
253- .size = size,
254- .type = Table,
255- };
243+ return page_iterator_t ( pTable, key,
244+ entity_page_location_t (pageNum, index),
245+ entity_page_address_t (start, size));
256246}
257247
258248// If the offset is in range, create a Table entity_t
259249#define CHECK_TABLE (pageNum, offset, pTable, entityNum ) \
260250 if (offset < ENTITY_START_VAR(entityNum)+get_table_axisy_end(pTable)) \
261251 { \
262252 return create_table_iterator (pTable, (pTable)->type_key , \
263- pageNum, \
264- ENTITY_START_VAR (entityNum), get_table_axisy_end (pTable)); \
253+ ( pageNum), (entityNum) , \
254+ ENTITY_START_VAR (entityNum), get_table_axisy_end (( pTable) )); \
265255 } \
266256 DECLARE_NEXT_ENTITY_START (entityNum, get_table_axisy_end(pTable))
267257
268258// ========================= Raw memory block processing ===================
269259
270- inline const page_iterator_t create_raw_iterator(void *pBuffer, uint8_t pageNum, uint16_t start, uint16_t size)
260+ static inline page_iterator_t create_raw_iterator(void *pBuffer, uint8_t pageNum, uint8_t index , uint16_t start, uint16_t size)
271261{
272- return page_iterator_t {
273- .pData = pBuffer,
274- .table_key = table_type_None,
275- .page = pageNum,
276- .start = start,
277- .size = size,
278- .type = Raw,
279- };
262+ return page_iterator_t ( pBuffer,
263+ entity_page_location_t (pageNum, index),
264+ entity_page_address_t (start, size));
280265}
281266
282267// If the offset is in range, create a Raw entity_t
283268#define CHECK_RAW (pageNum, offset, pDataBlock, blockSize, entityNum ) \
284269 if (offset < ENTITY_START_VAR(entityNum)+blockSize) \
285270 { \
286- return create_raw_iterator (pDataBlock, pageNum, ENTITY_START_VAR (entityNum), blockSize);\
271+ return create_raw_iterator (( pDataBlock), ( pageNum), (entityNum), ENTITY_START_VAR (entityNum), ( blockSize) );\
287272 } \
288273 DECLARE_NEXT_ENTITY_START (entityNum, blockSize)
289274
@@ -448,7 +433,7 @@ page_iterator_t page_begin(byte pageNum)
448433
449434page_iterator_t advance (const page_iterator_t &it)
450435{
451- return map_page_offset_to_entity (it.page , it.start +it.size );
436+ return map_page_offset_to_entity (it.location . page , it.address . start +it. address .size );
452437}
453438
454439/* *
0 commit comments