00001 /****************************************************************************** 00002 * $Id: ogr_attrind.h,v 1.3 2003/03/21 02:58:00 warmerda Exp $ 00003 * 00004 * Project: OpenGIS Simple Features Reference Implementation 00005 * Purpose: Classes related to generic implementation of attribute indexing. 00006 * Author: Frank Warmerdam, warmerdam@pobox.com 00007 * 00008 ****************************************************************************** 00009 * Copyright (c) 2003, Frank Warmerdam <warmerdam@pobox.com> 00010 * 00011 * Permission is hereby granted, free of charge, to any person obtaining a 00012 * copy of this software and associated documentation files (the "Software"), 00013 * to deal in the Software without restriction, including without limitation 00014 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00015 * and/or sell copies of the Software, and to permit persons to whom the 00016 * Software is furnished to do so, subject to the following conditions: 00017 * 00018 * The above copyright notice and this permission notice shall be included 00019 * in all copies or substantial portions of the Software. 00020 * 00021 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00022 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 00023 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 00024 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 00025 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 00026 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 00027 * DEALINGS IN THE SOFTWARE. 00028 ****************************************************************************** 00029 * 00030 * $Log: ogr_attrind.h,v $ 00031 * Revision 1.3 2003/03/21 02:58:00 warmerda 00032 * added drop index support 00033 * 00034 * Revision 1.2 2003/03/07 18:24:12 warmerda 00035 * expand tabs 00036 * 00037 * Revision 1.1 2003/03/04 14:16:10 warmerda 00038 * New 00039 * 00040 */ 00041 00042 #ifndef _OGR_ATTRIND_H_INCLUDED 00043 #define _OGR_ATTRIND_H_INCLUDED 00044 00045 #include "ogrsf_frmts.h" 00046 00047 /************************************************************************/ 00048 /* OGRAttrIndex */ 00049 /* */ 00050 /* Base class for accessing the indexing info about one field. */ 00051 /************************************************************************/ 00052 00053 class CPL_DLL OGRAttrIndex 00054 { 00055 protected: 00056 OGRAttrIndex(); 00057 00058 public: 00059 virtual ~OGRAttrIndex(); 00060 00061 virtual long GetFirstMatch( OGRField *psKey ) = 0; 00062 virtual long *GetAllMatches( OGRField *psKey ) = 0; 00063 00064 virtual OGRErr AddEntry( OGRField *psKey, long nFID ) = 0; 00065 virtual OGRErr RemoveEntry( OGRField *psKey, long nFID ) = 0; 00066 00067 virtual OGRErr Clear() = 0; 00068 }; 00069 00070 /************************************************************************/ 00071 /* OGRLayerAttrIndex */ 00072 /* */ 00073 /* Base class representing attribute indexes for all indexed */ 00074 /* fields in a layer. */ 00075 /************************************************************************/ 00076 00077 class CPL_DLL OGRLayerAttrIndex 00078 { 00079 protected: 00080 OGRLayer *poLayer; 00081 char *pszIndexPath; 00082 00083 OGRLayerAttrIndex(); 00084 00085 public: 00086 virtual ~OGRLayerAttrIndex(); 00087 00088 virtual OGRErr Initialize( const char *pszIndexPath, OGRLayer * ) = 0; 00089 00090 virtual OGRErr CreateIndex( int iField ) = 0; 00091 virtual OGRErr DropIndex( int iField ) = 0; 00092 virtual OGRErr IndexAllFeatures( int iField ) = 0; 00093 00094 virtual OGRErr AddToIndex( OGRFeature *poFeature ) = 0; 00095 virtual OGRErr RemoveFromIndex( OGRFeature *poFeature ) = 0; 00096 00097 virtual OGRAttrIndex *GetFieldIndex( int iField ) = 0; 00098 }; 00099 00100 OGRLayerAttrIndex CPL_DLL *OGRCreateDefaultLayerIndex(); 00101 00102 00103 #endif /* ndef _OGR_ATTRIND_H_INCLUDED */ 00104