GRASS GIS 8 Programmer's Manual  8.5.0dev(2024)-d6dec75dd4
tileio.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include "raster3d_intern.h"
Include dependency graph for tileio.c:

Go to the source code of this file.

Functions

void * Rast3d_get_tile_ptr (RASTER3D_Map *map, int tileIndex)
 This function returns a pointer to a tile which contains the data for the tile with index tileIndex. The type of the data stored in the tile depends on the type specified at the initialization time of map. The functionality is different depending on whether map is old or new and depending on the cache-mode of map.
More...
 
int Rast3d_tile_load (RASTER3D_Map *map, int tileIndex)
 Same functionality as Rast3d_get_tile_ptr() but does not return the pointer. More...
 
int Rast3d__remove_tile (RASTER3D_Map *map, int tileIndex)
 

Function Documentation

◆ Rast3d__remove_tile()

int Rast3d__remove_tile ( RASTER3D_Map map,
int  tileIndex 
)

◆ Rast3d_get_tile_ptr()

void* Rast3d_get_tile_ptr ( RASTER3D_Map map,
int  tileIndex 
)

This function returns a pointer to a tile which contains the data for the tile with index tileIndex. The type of the data stored in the tile depends on the type specified at the initialization time of map. The functionality is different depending on whether map is old or new and depending on the cache-mode of map.

If map is old and the cache is not used the tile with tileIndex is read from file and stored in the buffer provided by the map structure. The pointer to this buffer is returned. If the buffer already contains the tile with tileIndex reading is skipped. Data which was stored in earlier calls to Rast3d_get_tile_ptr is destroyed. If the tile with tileIndex is not stored on the file corresponding to map, and tileIndex is a valid index the buffer is filled with NULL-values.

If map is old and the cache is used the tile with tileIndex is read from file and stored in one of the cache buffers. The pointer to buffer is returned. If no free cache buffer is available an unlocked cache-buffer is freed up and the new tile is stored in its place. If the tile with tileIndex is not stored on the file corresponding to map, and tileIndex is a valid index the buffer is filled with NULL-values. If one of the cache buffers already contains the tile with tileIndex reading is skipped and the pointer to this buffer is returned.

If map is new and the cache is not used the functionality is the same as if map is old and the cache is not used. If the tile with tileIndex is already stored on file, it is read into the buffer, if not, the cells are set to null-values. If the buffer corresponding to the pointer is used for writing, subsequent calls to Rast3d_get_tile_ptr may destroy the values already stored in the buffer. Use Rast3d_flush_tile to write the buffer to the file before reusing it for a different index. The use of this buffer as write buffer is discouraged.

If map is new and the cache is used the functionality is the same as if map is old and the cache is used with the following exception. If tileIndex is a valid index and the tile with this index is not found in the cache and is not stored on the file corresponding to map, then the file cache is queried next. If the file-cache contains the tile it is loaded into the cache (memory-cache). Only if the file-cache does not contain the tile it is filled with NULL-values. Tile contents of buffers are never destroyed. If a cache buffer needs to be freed up, and the tile stored in the buffer has not been written to the file corresponding to map yet, the tile is copied into the file-cache.

Care has to be taken if this function is used in non-cache mode since it is implicitly invoked every time a read or write request is issued. The only I/O-functions for which it is safe to assume that they do not invoke Rast3d_get_tile_ptr are Rast3d_read_tile() and Rast3d_write_tile() and their corresponding type-specific versions.

Parameters
map
tileIndex
Returns
void * a pointer to a buffer ... if successful, NULL ... otherwise.

Definition at line 79 of file tileio.c.

References RASTER3D_Map::cache, RASTER3D_Map::currentIndex, RASTER3D_Map::data, RASTER3D_Map::nTiles, NULL, Rast3d_cache_elt_ptr(), Rast3d_error(), Rast3d_read_tile(), RASTER3D_Map::typeIntern, and RASTER3D_Map::useCache.

Referenced by Rast3d_flush_tile(), Rast3d_get_double_region(), Rast3d_get_float_region(), Rast3d_put_double(), Rast3d_put_float(), and Rast3d_tile_load().

◆ Rast3d_tile_load()

int Rast3d_tile_load ( RASTER3D_Map map,
int  tileIndex 
)

Same functionality as Rast3d_get_tile_ptr() but does not return the pointer.

Parameters
map
tileIndex
Returns
1 ... if successful, 0 ... otherwise.

Definition at line 123 of file tileio.c.

References NULL, Rast3d_error(), and Rast3d_get_tile_ptr().