{-- TerraHS - Interface between TerraLib and Haskell (c) Sergio Costa (INPE) - Setembro, 2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License 2.1 as published by the Free Software Foundation (http://www.opensource.org/licenses/gpl-license.php) --} {- | A module for supporting a TeQuerier TerraLib class A class to build spatial temporal instances (STInstance) from different sources More information - -} module TerraHS.TerraLib.TeQuerier ( -- * The @TeQuerier@ type TeQuerier(..), -- * The @TeQueriers@ class TeQueriers(..) ) where import Foreign (Int32) import Foreign.C.String import qualified Foreign.Ptr (Ptr) import TerraHS.Algebras.Base.Object import TerraHS.Misc.GenericFunctions import TerraHS.TerraLib.TeGeometry import TerraHS.TerraLib.TeGeometryAlgorithms import TerraHS.TerraLib.TeSTInstance import TerraHS.TerraLib.TeLayer import TerraHS.TerraLib.TeTheme class TeQueriers q where -- | Loads the STInstances. If frame>-1, loads only the instances of the frame-ésimo frame loadInstances :: (Foreign.Ptr.Ptr q) -> Prelude.IO Bool -- | Returns the number of instances to each time frame numElemInstances :: (Foreign.Ptr.Ptr q) -> Prelude.IO Int32 -- | Returns the next instances nextInstance :: (Foreign.Ptr.Ptr q) -> Prelude.IO TeSTInstancePtr --getInstances :: (Foreign.Ptr.Ptr q) -> Int32 -> Int32 -> Prelude.IO [TeSTInstance] -- | The type @TeQuerier @ represent a TerraLib Class "TeQuerier" data TeQuerier = TeQuerier TeLayerPtr Bool Bool | TeQuerierTheme TeThemePtr Bool Bool -- loadgeometries e loadatributes --- passa o ponteiro para haskell -- | The type @TeQuerierPtr@ is a pointer to @TeQuerier@ type TeQuerierPtr = Foreign.Ptr.Ptr TeQuerier instance TeQueriers TeQuerier where loadInstances ptr = tequerier_loadinstances ptr numElemInstances ptr = tequerier_numeleminstances ptr --getInstances q i size = (nextInstance q) >>= fromPointer >>= \geo -> -- if i >= size then return [] else getInstances q (i+1) size >>= \xs -> return (geo : xs) nextInstance ptr = (new TeSTInstance) >>= \st -> (tequerier_nextinstance ptr st) >> return st instance Pointer TeQuerier where new (TeQuerier lptr loadgeo loadattr) = do qptr <- tequerier_new lptr loadgeo loadattr return qptr new (TeQuerierTheme lptr loadgeo loadattr) = do qptr <- tequerier_new2 lptr loadgeo loadattr return qptr delete l = error "not implemented" ----- funções "C" ------------- foreign import ccall unsafe "c_tequerier_new" tequerier_new :: TeLayerPtr -> Bool -> Bool -> Prelude.IO TeQuerierPtr foreign import ccall unsafe "c_tequerier_new2" tequerier_new2 :: TeThemePtr -> Bool -> Bool -> Prelude.IO TeQuerierPtr foreign import ccall unsafe "c_tequerier_nextInstance" tequerier_nextinstance :: TeQuerierPtr -> TeSTInstancePtr -> Prelude.IO () foreign import ccall unsafe "c_tequerier_loadInstances" tequerier_loadinstances :: TeQuerierPtr -> Prelude.IO Bool foreign import ccall unsafe "c_tequerier_numElemInstances" tequerier_numeleminstances :: TeQuerierPtr -> Prelude.IO Int32