<URL: http://bugs.freeciv.org/Ticket/Display.html?id=40100 >

I've asked on the developers list, and nobody knows a reason for this
anachronistic structure.  Any time there are 2 different copies of the
same data, there's bound to be trouble keeping them synchronized.

The server side doesn't depend on its validity.  It is refreshed just
before use in common/aicore/cm.c cm_query_result():

   /* Refresh the city.  Otherwise the CM can give wrong results or just be
    * slower than necessary.  Note that cities are often passed in in an
    * unrefreshed state (which should probably be fixed). */
   generic_city_refresh(pcity, TRUE);

===

There are a total of 37 references.  Many of them (client and server)
could be replaced with a direct reference to the main map tiles!

Most of this code is devoted to updating it, and sanity checking it.

ai/aicity.c:171:
         if (acity->city_map[x][y] == C_TILE_WORKER) {
client/agents/cma_core.c:144:
         (pcity->city_map[x][y] == C_TILE_WORKER);
client/agents/cma_core.c:225:
       if ((pcity->city_map[x][y] == C_TILE_WORKER) &&
client/agents/cma_core.c:258:
         pcity->city_map[x][y] != C_TILE_WORKER) {
client/agents/cma_core.c:259:
         assert(pcity->city_map[x][y] == C_TILE_EMPTY);
client/citydlg_common.c:899:
     if (pcity->city_map[city_x][city_y] == C_TILE_WORKER) {
client/citydlg_common.c:902:
     } else if (pcity->city_map[city_x][city_y] == C_TILE_EMPTY) {
client/packhand.c:603:
         pcity->city_map[x][y] =
client/packhand.c:607:
         set_worker_city(pcity, x, y, packet->city_map[i]);
client/packhand.c:864:
         pcity->city_map[x][y] = C_TILE_EMPTY;
client/tilespec.c:4068:
             worked[i] = citymode->city_map[cx][cy] == C_TILE_WORKER;
client/tilespec.c:4137:
          && citymode->city_map[cx][cy] == C_TILE_UNAVAILABLE)
common/aicore/cm.c:640:
       if (pcity->city_map[x][y] == C_TILE_WORKER) {
common/aicore/cm.c:641:
         pcity->city_map[x][y] = C_TILE_EMPTY;
common/aicore/cm.c:670:
           pcity->city_map[tile->x][tile->y] = C_TILE_WORKER;
common/aicore/cm.c:1123:
       if (pcity->city_map[x][y] == C_TILE_UNAVAILABLE) {
common/aicore/cm.c:1910:
         (pcity->city_map[x][y] == C_TILE_WORKER);
common/aicore/cm.c:2049:
       if (pcity->city_map[x][y] == C_TILE_WORKER) {
common/city.c:301:
       if (pcity->city_map[city_x][city_y] == C_TILE_WORKER
common/city.c:314:
     pcity->city_map[city_x][city_y] = type;
common/city.c:327:
     return pcity->city_map[city_x][city_y];
common/city.c:1713:
       if (pcity->city_map[x][y] == C_TILE_WORKER) {
common/city.h:329:
     enum city_tile_type city_map[CITY_MAP_SIZE][CITY_MAP_SIZE];
server/citytools.c:1037:
         pcity->city_map[x_itr][y_itr] = C_TILE_EMPTY;
server/citytools.c:1039:
         pcity->city_map[x_itr][y_itr] = C_TILE_UNAVAILABLE;
server/citytools.c:1715:
         packet->city_map[x + y * CITY_MAP_SIZE] = get_worker_city(pcity, x, y);
server/citytools.c:2043:
     current = pcity->city_map[city_x][city_y];
server/cityturn.c:172:
       switch (pcity->city_map[x][y]) {
server/cityturn.c:439:
        && C_TILE_WORKER == pcity->city_map[city_x][city_y]
server/sanitycheck.c:284:
         switch (pcity->city_map[x][y]) {
server/sanitycheck.c:410:
         if (pcity->city_map[city_x][city_y] != C_TILE_WORKER) {
server/sanitycheck.c:416:
                 pcity->city_map[city_x][city_y],
server/savegame.c:2473:
       /* Initialize pcity->city_map[][], using set_worker_city() so that
server/savegame.c:2488:
         pcity->city_map[x][y] = valid ? C_TILE_EMPTY : C_TILE_UNAVAILABLE;
server/savegame.c:2533:
           assert(pcity->city_map[x][y] == C_TILE_UNAVAILABLE);
server/savegame.c:2558:
         pcity->city_map[city_x][city_y] = C_TILE_WORKER;
server/savegame.c:3695:
       switch (pcity->city_map[x][y]) {



_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to