MCPcopy Index your code
hub / github.com/MapServer/MapServer / sortLayerByMetadata

Function sortLayerByMetadata

maptemplate.c:378–450  ·  view source on GitHub ↗

! * This function set the map->layerorder * index order by the metadata collumn name */

Source from the content-addressed store, hash-verified

376 * index order by the metadata collumn name
377*/
378int sortLayerByMetadata(mapObj *map, char* pszMetadata)
379{
380 int nLegendOrder1;
381 int nLegendOrder2;
382 char *pszLegendOrder1;
383 char *pszLegendOrder2;
384 int i, j;
385 int tmp;
386
387 if(!map) {
388 msSetError(MS_WEBERR, "Invalid pointer.", "sortLayerByMetadata()");
389 return MS_FAILURE;
390 }
391
392 /*
393 * Initiate to default order (Reverse mapfile order)
394 */
395 if(map->layerorder)
396 {
397 int *pnLayerOrder;
398
399 /* Backup the original layer order to be able to reverse it */
400 pnLayerOrder = (int*)msSmallMalloc(map->numlayers * sizeof(int));
401 for (i=0; i<map->numlayers ;i++)
402 pnLayerOrder[i] = map->layerorder[i];
403
404 /* Get a new layerorder array */
405 free(map->layerorder);
406 map->layerorder = (int*)msSmallMalloc(map->numlayers * sizeof(int));
407
408 /* Reverse the layerorder array */
409 for (i=0; i<map->numlayers ;i++)
410 map->layerorder[i] = pnLayerOrder[map->numlayers - i - 1];
411
412 free(pnLayerOrder);
413 }
414 else
415 {
416 map->layerorder = (int*)msSmallMalloc(map->numlayers * sizeof(int));
417
418 for (i=0; i<map->numlayers ;i++)
419 map->layerorder[i] = map->numlayers - i - 1;
420 }
421
422 if(!pszMetadata)
423 return MS_SUCCESS;
424
425 /*
426 * Bubble sort algo (not very efficient)
427 * should implement a kind of quick sort
428 * alog instead
429 */
430 for (i=0; i<map->numlayers-1; i++) {
431 for (j=0; j<map->numlayers-1-i; j++) {
432 pszLegendOrder1 = msLookupHashTable(&(GET_LAYER(map, map->layerorder[j+1])->metadata), pszMetadata);
433 pszLegendOrder2 = msLookupHashTable(&(GET_LAYER(map, map->layerorder[j])->metadata), pszMetadata);
434
435 if(!pszLegendOrder1 || !pszLegendOrder2)

Callers 1

generateLegendTemplateFunction · 0.85

Calls 3

msSetErrorFunction · 0.85
msSmallMallocFunction · 0.85
msLookupHashTableFunction · 0.85

Tested by

no test coverage detected