Source code for pygrass.raster.rowio

# -*- coding: utf-8 -*-
"""
Created on Mon Jun 18 13:22:38 2012

@author: pietro
"""
import ctypes

import grass.lib.rowio as librowio
import grass.lib.raster as librast

from grass.pygrass.errors import GrassError
from grass.pygrass.raster.raster_type import TYPE as RTYPE


CMPFUNC = ctypes.CFUNCTYPE(ctypes.c_int,
                           ctypes.c_int, ctypes.c_void_p,
                           ctypes.c_int, ctypes.c_int)


[docs]def getmaprow_CELL(fd, buf, row, l): librast.Rast_get_c_row(fd, ctypes.cast(buf, ctypes.POINTER(librast.CELL)), row) return 1
[docs]def getmaprow_FCELL(fd, buf, row, l): librast.Rast_get_f_row(fd, ctypes.cast(buf, ctypes.POINTER(librast.FCELL)), row) return 1
[docs]def getmaprow_DCELL(fd, buf, row, l): librast.Rast_get_d_row(fd, ctypes.cast(buf, ctypes.POINTER(librast.DCELL)), row) return 1
get_row = { 'CELL': CMPFUNC(getmaprow_CELL), 'FCELL': CMPFUNC(getmaprow_FCELL), 'DCELL': CMPFUNC(getmaprow_DCELL), }
[docs]class RowIO(object): def __init__(self): self.c_rowio = librowio.ROWIO() self.fd = None self.rows = None self.cols = None self.mtype = None self.row_size = None
[docs] def open(self, fd, rows, cols, mtype): self.fd = fd self.rows = rows self.cols = cols self.mtype = mtype self.row_size = ctypes.sizeof(RTYPE[mtype]['grass def'] * cols) if (librowio.Rowio_setup(ctypes.byref(self.c_rowio), self.fd, self.rows, self.row_size, get_row[self.mtype], get_row[self.mtype]) == -1): raise GrassError('Fatal error, Rowio not setup correctly.')
[docs] def release(self): librowio.Rowio_release(ctypes.byref(self.c_rowio)) self.fd = None self.rows = None self.cols = None self.mtype = None
[docs] def get(self, row_index, buf): rowio_buf = librowio.Rowio_get(ctypes.byref(self.c_rowio), row_index) ctypes.memmove(buf.p, rowio_buf, self.row_size) return buf