void layerObj_destroy(layerObj *self) { /* if the layer has a parent_map, let's the map object destroy it */ if ((self->map == NULL) && (self->refcount == 1)) { /* if there is no other PHP Object that use this C layer object, delete it */ freeLayer(self); free(self); self = NULL; } else { MS_REFCNT_DECR(self); } return; }
layerObj *msRemoveLayer(mapObj *map, int nIndex) { int i; int order_index; layerObj *layer; if (nIndex < 0 || nIndex >= map->numlayers) { msSetError(MS_CHILDERR, "Cannot remove Layer, invalid index %d", "msRemoveLayer()", nIndex); return NULL; } else { layer=GET_LAYER(map, nIndex); /* msCopyLayer(layer, (GET_LAYER(map, nIndex))); */ /* Iteratively copy the higher index layers down one index */ for (i=nIndex; i<map->numlayers-1; i++) { /* freeLayer((GET_LAYER(map, i))); */ /* initLayer((GET_LAYER(map, i)), map); */ /* msCopyLayer(GET_LAYER(map, i), GET_LAYER(map, i+1)); */ GET_LAYER(map, i)=GET_LAYER(map, i+1); GET_LAYER(map, i)->index = i; } /* Free the extra layer at the end */ /* freeLayer((GET_LAYER(map, map->numlayers-1))); */ GET_LAYER(map, map->numlayers-1)=NULL; /* Adjust drawing order */ order_index = 0; for (i=0; i<map->numlayers; i++) { if (map->layerorder[i] > nIndex) map->layerorder[i]--; if (map->layerorder[i] == nIndex) { order_index = i; break; } } for (i=order_index; i<map->numlayers-1; i++) { map->layerorder[i] = map->layerorder[i+1]; if (map->layerorder[i] > nIndex) map->layerorder[i]--; } /* decrement number of layers and return copy of removed layer */ map->numlayers--; layer->map=NULL; MS_REFCNT_DECR(layer); return layer; } }
styleObj *msRemoveLabelStyle(labelObj *label, int nStyleIndex) { int i; styleObj *style; if (nStyleIndex < 0 || nStyleIndex >= label->numstyles) { msSetError(MS_CHILDERR, "Cannot remove style, invalid nStyleIndex %d", "removeLabelStyle()", nStyleIndex); return NULL; } else { style=label->styles[nStyleIndex]; for (i=nStyleIndex; i<label->numstyles-1; i++) { label->styles[i]=label->styles[i+1]; } label->styles[label->numstyles-1]=NULL; label->numstyles--; MS_REFCNT_DECR(style); return style; } }
symbolObj *msRemoveSymbol(symbolSetObj *symbolset, int nSymbolIndex) { int i; symbolObj *symbol; if (symbolset->numsymbols == 1) { msSetError(MS_CHILDERR, "Cannot remove a symbolset's sole symbol", "removeSymbol()"); return NULL; } else if (nSymbolIndex < 0 || nSymbolIndex >= symbolset->numsymbols) { msSetError(MS_CHILDERR, "Cannot remove symbol, invalid nSymbolIndex %d", "removeSymbol()", nSymbolIndex); return NULL; } else { symbol=symbolset->symbol[nSymbolIndex]; for (i=nSymbolIndex+1; i<symbolset->numsymbols; i++) { symbolset->symbol[i-1] = symbolset->symbol[i]; } symbolset->symbol[i-1]=NULL; symbolset->numsymbols--; MS_REFCNT_DECR(symbol); return symbol; } }