Author: cazfi
Date: Tue May 2 08:08:41 2017
New Revision: 35362
URL: http://svn.gna.org/viewcvs/freeciv?rev=35362&view=rev
Log:
Add idex hashes to world object
See hrm Feature #656546
Modified:
trunk/client/packhand.c
trunk/common/game.c
trunk/common/idex.c
trunk/common/idex.h
trunk/common/player.c
trunk/common/scriptcore/api_game_find.c
trunk/common/world_object.h
trunk/server/citytools.c
trunk/server/savegame2.c
trunk/server/savegame3.c
trunk/server/unittools.c
Modified: trunk/client/packhand.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/client/packhand.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/client/packhand.c (original)
+++ trunk/client/packhand.c Tue May 2 08:08:41 2017
@@ -139,7 +139,7 @@
{
if (NULL != invisible.cities) {
city_list_iterate(invisible.cities, pcity) {
- idex_unregister_city(pcity);
+ idex_unregister_city(&wld, pcity);
destroy_city_virtual(pcity);
} city_list_iterate_end;
@@ -634,7 +634,7 @@
city_is_new = TRUE;
pcity = create_city_virtual(powner, pcenter, packet->name);
pcity->id = packet->id;
- idex_register_city(pcity);
+ idex_register_city(&wld, pcity);
update_descriptions = TRUE;
} else if (pcity->id != packet->id) {
log_error("handle_city_info() city id %d != id %d.",
@@ -1103,7 +1103,7 @@
pcity = create_city_virtual(powner, pcenter, packet->name);
pcity->id = packet->id;
city_map_radius_sq_set(pcity, radius_sq);
- idex_register_city(pcity);
+ idex_register_city(&wld, pcity);
} else if (pcity->id != packet->id) {
log_error("handle_city_short_info() city id %d != id %d.",
pcity->id, packet->id);
@@ -1800,7 +1800,7 @@
} else {
/*** Create new unit ***/
punit = packet_unit;
- idex_register_unit(punit);
+ idex_register_unit(&wld, punit);
unit_list_prepend(unit_owner(punit)->units, punit);
unit_list_prepend(unit_tile(punit)->units, punit);
@@ -2885,7 +2885,7 @@
pwork = create_city_virtual(invisible.placeholder, NULL, named);
pwork->id = packet->worked;
- idex_register_city(pwork);
+ idex_register_city(&wld, pwork);
city_list_prepend(invisible.cities, pwork);
Modified: trunk/common/game.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/game.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/game.c (original)
+++ trunk/common/game.c Tue May 2 08:08:41 2017
@@ -122,7 +122,7 @@
**************************************************************************/
struct city *game_city_by_number(int id)
{
- return idex_lookup_city(id);
+ return idex_lookup_city(&wld, id);
}
@@ -132,7 +132,7 @@
**************************************************************************/
struct unit *game_unit_by_number(int id)
{
- return idex_lookup_unit(id);
+ return idex_lookup_unit(&wld, id);
}
/**************************************************************************
@@ -181,7 +181,7 @@
unit_list_remove(unit_tile(punit)->units, punit);
unit_list_remove(unit_owner(punit)->units, punit);
- idex_unregister_unit(punit);
+ idex_unregister_unit(&wld, punit);
if (game.callbacks.unit_deallocate) {
(game.callbacks.unit_deallocate)(punit->id);
@@ -220,7 +220,7 @@
} city_tile_iterate_end;
}
- idex_unregister_city(pcity);
+ idex_unregister_city(&wld, pcity);
destroy_city_virtual(pcity);
}
@@ -439,7 +439,7 @@
map_init(&wld.map, is_server());
team_slots_init();
game_ruleset_init();
- idex_init();
+ idex_init(&wld);
cm_init();
researches_init();
universal_found_functions_init();
@@ -467,7 +467,7 @@
player_slots_free();
map_free(&(wld.map));
free_city_map_index();
- idex_free();
+ idex_free(&wld);
team_slots_free();
game_ruleset_free();
researches_free();
@@ -491,10 +491,10 @@
map_free(&(wld.map));
free_city_map_index();
- idex_free();
+ idex_free(&wld);
map_init(&wld.map, FALSE);
- idex_init();
+ idex_init(&wld);
researches_init();
}
}
Modified: trunk/common/idex.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/idex.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/idex.c (original)
+++ trunk/common/idex.c Tue May 2 08:08:41 2017
@@ -38,57 +38,36 @@
#include "idex.h"
-
-/* struct city_hash. */
-#define SPECHASH_TAG city
-#define SPECHASH_INT_KEY_TYPE
-#define SPECHASH_IDATA_TYPE struct city *
-#include "spechash.h"
-
-/* struct unit_hash. */
-#define SPECHASH_TAG unit
-#define SPECHASH_INT_KEY_TYPE
-#define SPECHASH_IDATA_TYPE struct unit *
-#include "spechash.h"
-
-
-/* "Global" data: */
-static struct city_hash *idex_city_hash = NULL;
-static struct unit_hash *idex_unit_hash = NULL;
-
/**************************************************************************
Initialize. Should call this at the start before use.
***************************************************************************/
-void idex_init(void)
+void idex_init(struct world *iworld)
{
- fc_assert_ret(idex_city_hash == NULL);
- fc_assert_ret(idex_unit_hash == NULL);
-
- idex_city_hash = city_hash_new();
- idex_unit_hash = unit_hash_new();
+ iworld->cities = city_hash_new();
+ iworld->units = unit_hash_new();
}
/**************************************************************************
Free the hashs.
***************************************************************************/
-void idex_free(void)
+void idex_free(struct world *iworld)
{
- city_hash_destroy(idex_city_hash);
- idex_city_hash = NULL;
+ city_hash_destroy(iworld->cities);
+ iworld->cities = NULL;
- unit_hash_destroy(idex_unit_hash);
- idex_unit_hash = NULL;
+ unit_hash_destroy(iworld->units);
+ iworld->units = NULL;
}
/**************************************************************************
Register a city into idex, with current pcity->id.
Call this when pcity created.
***************************************************************************/
-void idex_register_city(struct city *pcity)
+void idex_register_city(struct world *iworld, struct city *pcity)
{
struct city *old;
- city_hash_replace_full(idex_city_hash, pcity->id, pcity, NULL, &old);
+ city_hash_replace_full(iworld->cities, pcity->id, pcity, NULL, &old);
fc_assert_ret_msg(NULL == old,
"IDEX: city collision: new %d %p %s, old %d %p %s",
pcity->id, (void *) pcity, city_name_get(pcity),
@@ -99,11 +78,11 @@
Register a unit into idex, with current punit->id.
Call this when punit created.
***************************************************************************/
-void idex_register_unit(struct unit *punit)
+void idex_register_unit(struct world *iworld, struct unit *punit)
{
struct unit *old;
- unit_hash_replace_full(idex_unit_hash, punit->id, punit, NULL, &old);
+ unit_hash_replace_full(iworld->units, punit->id, punit, NULL, &old);
fc_assert_ret_msg(NULL == old,
"IDEX: unit collision: new %d %p %s, old %d %p %s",
punit->id, (void *) punit, unit_rule_name(punit),
@@ -114,11 +93,11 @@
Remove a city from idex, with current pcity->id.
Call this when pcity deleted.
***************************************************************************/
-void idex_unregister_city(struct city *pcity)
+void idex_unregister_city(struct world *iworld, struct city *pcity)
{
struct city *old;
- city_hash_remove_full(idex_city_hash, pcity->id, NULL, &old);
+ city_hash_remove_full(iworld->cities, pcity->id, NULL, &old);
fc_assert_ret_msg(NULL != old,
"IDEX: city unreg missing: %d %p %s",
pcity->id, (void *) pcity, city_name_get(pcity));
@@ -132,11 +111,11 @@
Remove a unit from idex, with current punit->id.
Call this when punit deleted.
***************************************************************************/
-void idex_unregister_unit(struct unit *punit)
+void idex_unregister_unit(struct world *iworld, struct unit *punit)
{
struct unit *old;
- unit_hash_remove_full(idex_unit_hash, punit->id, NULL, &old);
+ unit_hash_remove_full(iworld->units, punit->id, NULL, &old);
fc_assert_ret_msg(NULL != old,
"IDEX: unit unreg missing: %d %p %s",
punit->id, (void *) punit, unit_rule_name(punit));
@@ -150,11 +129,12 @@
Lookup city with given id.
Returns NULL if the city is not registered (which is not an error).
***************************************************************************/
-struct city *idex_lookup_city(int id)
+struct city *idex_lookup_city(struct world *iworld, int id)
{
struct city *pcity;
- city_hash_lookup(idex_city_hash, id, &pcity);
+ city_hash_lookup(iworld->cities, id, &pcity);
+
return pcity;
}
@@ -162,10 +142,11 @@
Lookup unit with given id.
Returns NULL if the unit is not registered (which is not an error).
***************************************************************************/
-struct unit *idex_lookup_unit(int id)
+struct unit *idex_lookup_unit(struct world *iworld, int id)
{
struct unit *punit;
- unit_hash_lookup(idex_unit_hash, id, &punit);
+ unit_hash_lookup(iworld->units, id, &punit);
+
return punit;
}
Modified: trunk/common/idex.h
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/idex.h?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/idex.h (original)
+++ trunk/common/idex.h Tue May 2 08:08:41 2017
@@ -1,4 +1,4 @@
-/**********************************************************************
+/***********************************************************************
Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -22,19 +22,21 @@
id values to unit and city pointers.
***************************************************************************/
+/* common */
#include "fc_types.h"
+#include "world_object.h"
-void idex_init(void);
-void idex_free(void);
+void idex_init(struct world *iworld);
+void idex_free(struct world *iworld);
-void idex_register_city(struct city *pcity);
-void idex_register_unit(struct unit *punit);
+void idex_register_city(struct world *iworld, struct city *pcity);
+void idex_register_unit(struct world *iworld, struct unit *punit);
-void idex_unregister_city(struct city *pcity);
-void idex_unregister_unit(struct unit *punit);
+void idex_unregister_city(struct world *iworld, struct city *pcity);
+void idex_unregister_unit(struct world *iworld, struct unit *punit);
-struct city *idex_lookup_city(int id);
-struct unit *idex_lookup_unit(int id);
+struct city *idex_lookup_city(struct world *iworld, int id);
+struct unit *idex_lookup_unit(struct world *iworld, int id);
#ifdef __cplusplus
}
Modified: trunk/common/player.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/player.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/player.c (original)
+++ trunk/common/player.c Tue May 2 08:08:41 2017
@@ -1122,7 +1122,7 @@
struct city *player_city_by_number(const struct player *pplayer, int city_id)
{
/* We call idex directly. Should use game_city_by_number() instead? */
- struct city *pcity = idex_lookup_city(city_id);
+ struct city *pcity = idex_lookup_city(&wld, city_id);
if (!pcity) {
return NULL;
@@ -1148,7 +1148,7 @@
struct unit *player_unit_by_number(const struct player *pplayer, int unit_id)
{
/* We call idex directly. Should use game_unit_by_number() instead? */
- struct unit *punit = idex_lookup_unit(unit_id);
+ struct unit *punit = idex_lookup_unit(&wld, unit_id);
if (!punit) {
return NULL;
Modified: trunk/common/scriptcore/api_game_find.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/scriptcore/api_game_find.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/scriptcore/api_game_find.c (original)
+++ trunk/common/scriptcore/api_game_find.c Tue May 2 08:08:41 2017
@@ -45,7 +45,7 @@
if (pplayer) {
return player_city_by_number(pplayer, city_id);
} else {
- return idex_lookup_city(city_id);
+ return idex_lookup_city(&wld, city_id);
}
}
@@ -59,7 +59,7 @@
if (pplayer) {
return player_unit_by_number(pplayer, unit_id);
} else {
- return idex_lookup_unit(unit_id);
+ return idex_lookup_unit(&wld, unit_id);
}
}
Modified: trunk/common/world_object.h
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/common/world_object.h?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/common/world_object.h (original)
+++ trunk/common/world_object.h Tue May 2 08:08:41 2017
@@ -20,9 +20,24 @@
/* common */
#include "map_types.h"
+
+/* struct city_hash. */
+#define SPECHASH_TAG city
+#define SPECHASH_INT_KEY_TYPE
+#define SPECHASH_IDATA_TYPE struct city *
+#include "spechash.h"
+
+/* struct unit_hash. */
+#define SPECHASH_TAG unit
+#define SPECHASH_INT_KEY_TYPE
+#define SPECHASH_IDATA_TYPE struct unit *
+#include "spechash.h"
+
struct world
{
struct civ_map map;
+ struct city_hash *cities;
+ struct unit_hash *units;
};
#ifdef __cplusplus
Modified: trunk/server/citytools.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/citytools.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/server/citytools.c (original)
+++ trunk/server/citytools.c Tue May 2 08:08:41 2017
@@ -1483,7 +1483,7 @@
pcity->id = identity_number();
fc_allocate_mutex(&game.server.mutexes.city_list);
- idex_register_city(pcity);
+ idex_register_city(&wld, pcity);
fc_release_mutex(&game.server.mutexes.city_list);
if (city_list_size(pplayer->cities) == 0) {
Modified: trunk/server/savegame2.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame2.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/server/savegame2.c (original)
+++ trunk/server/savegame2.c Tue May 2 08:08:41 2017
@@ -3257,7 +3257,7 @@
}
identity_number_reserve(pcity->id);
- idex_register_city(pcity);
+ idex_register_city(&wld, pcity);
/* Load the information about the nationality of citizens. This is done
* here because the city sanity check called by citizens_update() requires
@@ -3673,7 +3673,7 @@
}
identity_number_reserve(punit->id);
- idex_register_unit(punit);
+ idex_register_unit(&wld, punit);
if ((pcity = game_city_by_number(punit->homecity))) {
unit_list_prepend(pcity->units_supported, punit);
Modified: trunk/server/savegame3.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/savegame3.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/server/savegame3.c (original)
+++ trunk/server/savegame3.c Tue May 2 08:08:41 2017
@@ -4437,7 +4437,7 @@
}
identity_number_reserve(pcity->id);
- idex_register_city(pcity);
+ idex_register_city(&wld, pcity);
/* Load the information about the nationality of citizens. This is done
* here because the city sanity check called by citizens_update() requires
@@ -5074,7 +5074,7 @@
}
identity_number_reserve(punit->id);
- idex_register_unit(punit);
+ idex_register_unit(&wld, punit);
if ((pcity = game_city_by_number(punit->homecity))) {
unit_list_prepend(pcity->units_supported, punit);
Modified: trunk/server/unittools.c
URL:
http://svn.gna.org/viewcvs/freeciv/trunk/server/unittools.c?rev=35362&r1=35361&r2=35362&view=diff
==============================================================================
--- trunk/server/unittools.c (original)
+++ trunk/server/unittools.c Tue May 2 08:08:41 2017
@@ -1586,7 +1586,7 @@
/* Register unit */
punit->id = identity_number();
- idex_register_unit(punit);
+ idex_register_unit(&wld, punit);
fc_assert_ret_val(ptile != NULL, NULL);
unit_tile_set(punit, ptile);
_______________________________________________
Freeciv-commits mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-commits