Complete.Org: Mailing Lists: Archives: freeciv-dev: October 2001:
[Freeciv-Dev] Re: [UPDATE] Corecleanup_08 patch to cvs-Sep28
Home

[Freeciv-Dev] Re: [UPDATE] Corecleanup_08 patch to cvs-Sep28

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: rf13@xxxxxxxxxxxxxxxxxxxxxx
Cc: "Ross W. Wetmore" <rwetmore@xxxxxxxxxxxx>, freeciv-dev@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: [UPDATE] Corecleanup_08 patch to cvs-Sep28
From: "Ross W. Wetmore" <rwetmore@xxxxxxxxxxxx>
Date: Tue, 02 Oct 2001 21:58:01 -0400

At 09:28 AM 01/10/02 +0200, Raimar Falke wrote:
>On Mon, Oct 01, 2001 at 08:04:17PM -0400, Ross W. Wetmore wrote:
>Can you make a proposal (list what has to be changed, how it is
>controlled, performance impact,...) of the generalization of the map
>topology? So that we can have the four types (flat, like now,
>donut,...). This is the next big step IMHO.

I suspect getting up to snuff with the corecleanups is still a prereq
since you have a lot of bugfixes and updates to work through yet.

However, when you are clean, these are the changes - pretty miniscule
right?.

Cheers,
RossW
=====

See map.h for more details:
 *
 * For toroidal maps (aka donut worlds), is_real_tile and normalize_map_pos
 *   always return TRUE. normalize_map_pos and _map_adjust_* always adjust
 *   both x and y.
 * For flat-earth, is_real_tile checks both x and y within bounds, and
 *   normalize_map_pos and map_adjust_* are just bounds checks.
 *
   

These two functions control most of the topology effects, both where used
explictly and in the iterate loops (map_adjust is effectively gone).

There are a small number of places where one still does explicit map 
wrap operations like the get_citymap_xy() example. You can grep for 
has_mapwrap() to locate them. They are in city.c, gotohand.c and mapgen.c
(and of course map.c and map.h where the macro and function definitions 
are).


#define is_real_tile(X,Y)
  \
( (has_mapwrap(MAP_TYPE_WRAPX) || RANGE_CHECK_0(map.xsize, (X))) &&
  \
  (has_mapwrap(MAP_TYPE_WRAPY) || RANGE_CHECK_0(map.ysize, (Y))) )

This is the typical magnitude of the change. It does not show up on 
profiling even when using the functional form of either of the two
controlling operations.


/* Map topology definitions and map dimension related macros                */
/* The default definition reflects a cylindrical map wrapping at map.xsize  */

enum MAP_TYPE {
  MAP_TYPE_FLAT  = 0,  /* Note: not a WRAPTYPE */
  MAP_TYPE_WRAPX = 1,
  MAP_TYPE_WRAPY = 2,
  MAP_TYPE_TORUS = 3
};
extern enum MAP_TYPE map_type;

#ifdef FC__MAP_C            /* allocated in common/map.c */
/* TODO: provide a settable and savable civ_map parameter, and
 *       chenge map_type to a macro pointing at this location.
 *       e.g. #define map_type civmap->maptype
 * Note:
 * If one defines map_type to a constant, most compilers remove all
 * resolvable checks in macros that use this. For example, #defining
 * map_type to MAP_TYPE_WRAPX, will reduce to the standard hardcoded
 * cylindrical world.
*/
enum MAP_TYPE map_type = MAP_TYPE_WRAPX;
#endif

/*
 * These two macros allow one to determine the current game map topology.
 * They are primarily used in the key map coordinate macros, but are used
 * in scattered code that needs to knwo this information.
 *
 * The argument to is_maptype is one of the enum MAP_TYPES.
 * The argument to has_wraptype is one of the non-zero enum MAP_TYPES.
 */
#define is_maptype(TYPE)        (map_type == (TYPE))
#define has_mapwrap(WRAPTYPE)   ((map_type & (WRAPTYPE)) == (WRAPTYPE))
 

stdinhand.c:
  { "maptype", (int *)&map_type, NULL, NULL,
    SSET_MAP_GEN, SSET_TO_CLIENT,
    MAP_TYPE_FLAT, MAP_TYPE_TORUS, MAP_TYPE_WRAPX,
    N_("Map type or topology"), "" },

     

>       Raimar
>-- 
> email: rf13@xxxxxxxxxxxxxxxxx
> "The very concept of PNP is a lovely dream that simply does not translate to
>  reality. The confusion of manually doing stuff is nothing compared to the
>  confusion of computers trying to do stuff and getting it wrong, which they
>  gleefully do with great enthusiasm." 
>    -- Jinx Tigr in the SDM




[Prev in Thread] Current Thread [Next in Thread]