static unsigned long HashAirwayIntersectionFeatureFunc(const void* _feature) { OGRFeature* feature = (OGRFeature*)_feature; OGRPoint* point = (OGRPoint*) feature->GetGeometryRef(); unsigned long hash = CPLHashSetHashStr((unsigned char*)feature->GetFieldAsString(0)); const double x = point->getX(); const double y = point->getY(); return hash ^ OGRXPlaneAirwayHashDouble(x) ^ OGRXPlaneAirwayHashDouble(y); }
GMLHandler::GMLHandler( GMLReader *poReader ) { m_poReader = poReader; m_bInCurField = FALSE; m_nCurFieldAlloc = 0; m_nCurFieldLen = 0; m_pszCurField = NULL; m_nAttributeIndex = -1; m_nAttributeDepth = 0; m_pszGeometry = NULL; m_nGeomAlloc = 0; m_nGeomLen = 0; m_nGeometryDepth = 0; m_nDepthFeature = m_nDepth = 0; m_inBoundedByDepth = 0; m_pszCityGMLGenericAttrName = NULL; m_inCityGMLGenericAttrDepth = 0; m_bIsCityGML = FALSE; m_bIsAIXM = FALSE; m_bReportHref = FALSE; m_pszHref = NULL; m_pszUom = NULL; m_pszValue = NULL; pasGeometryNames = (GeometryNamesStruct*)CPLMalloc( GML_GEOMETRY_TYPE_COUNT * sizeof(GeometryNamesStruct)); for(int i=0; i<GML_GEOMETRY_TYPE_COUNT; i++) { pasGeometryNames[i].pszName = apszGMLGeometryElements[i]; pasGeometryNames[i].nHash = CPLHashSetHashStr(pasGeometryNames[i].pszName); } qsort(pasGeometryNames, GML_GEOMETRY_TYPE_COUNT, sizeof(GeometryNamesStruct), GMLHandlerSortGeometryElements); nStackDepth = 0; stateStack[0] = STATE_TOP; }
int GMLHandler::IsGeometryElement( const char *pszElement ) { int nFirst = 0; int nLast = GML_GEOMETRY_TYPE_COUNT- 1; unsigned long nHash = CPLHashSetHashStr(pszElement); do { int nMiddle = (nFirst + nLast) / 2; if (nHash == pasGeometryNames[nMiddle].nHash) return strcmp(pszElement, pasGeometryNames[nMiddle].pszName) == 0; if (nHash < pasGeometryNames[nMiddle].nHash) nLast = nMiddle - 1; else nFirst = nMiddle + 1; } while(nFirst <= nLast); if (m_bIsAIXM && strcmp( pszElement, "ElevatedPoint") == 0) return TRUE; return FALSE; }
static unsigned long hash_func_get_metadata_item(const void* _elt) { GetMetadataItemElt* elt = (GetMetadataItemElt*) _elt; return CPLHashSetHashStr(elt->pszName) ^ CPLHashSetHashStr(elt->pszDomain); }