summaryrefslogtreecommitdiff
path: root/navit/item.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/item.c')
-rw-r--r--navit/item.c648
1 files changed, 367 insertions, 281 deletions
diff --git a/navit/item.c b/navit/item.c
index 3f865c19d..4f64a1edb 100644
--- a/navit/item.c
+++ b/navit/item.c
@@ -27,61 +27,61 @@
#include "transform.h"
struct item_name {
- enum item_type item;
- char *name;
+ enum item_type item;
+ char *name;
};
struct item_range item_range_all = { type_none, type_last };
struct default_flags {
- enum item_type type;
- int flags;
+ enum item_type type;
+ int flags;
};
struct item busy_item;
-struct default_flags default_flags2[]={
- {type_street_nopass, AF_PBH},
- {type_street_0, AF_ALL},
- {type_street_1_city, AF_ALL},
- {type_street_2_city, AF_ALL},
- {type_street_3_city, AF_ALL},
- {type_street_4_city, AF_ALL},
- {type_highway_city, AF_MOTORIZED_FAST},
- {type_street_1_land, AF_ALL},
- {type_street_2_land, AF_ALL},
- {type_street_3_land, AF_ALL},
- {type_street_4_land, AF_ALL},
- {type_street_n_lanes, AF_MOTORIZED_FAST},
- {type_highway_land, AF_MOTORIZED_FAST},
- {type_ramp, AF_MOTORIZED_FAST},
- {type_roundabout, AF_ALL},
- {type_ferry, AF_ALL},
- {type_cycleway, AF_PBH},
- {type_track_paved, AF_ALL},
- {type_track_gravelled, AF_ALL},
- {type_track_unpaved, AF_ALL},
- {type_track_ground, AF_ALL},
- {type_track_grass, AF_ALL},
- {type_footway, AF_PBH},
- {type_living_street, AF_ALL},
- {type_street_service, AF_ALL},
- {type_street_parking_lane, AF_ALL},
- {type_bridleway, AF_PBH},
- {type_path, AF_PBH},
- {type_steps, AF_PBH},
- {type_street_pedestrian, AF_PBH},
- {type_hiking_mountain, AF_PEDESTRIAN},
- {type_hiking_mountain_demanding, AF_PEDESTRIAN},
- {type_hiking, AF_PEDESTRIAN},
- {type_hiking_alpine, AF_PEDESTRIAN},
- {type_hiking_alpine_demanding, AF_PEDESTRIAN},
- {type_hiking_alpine_difficult, AF_PEDESTRIAN},
+struct default_flags default_flags2[]= {
+ {type_street_nopass, AF_PBH},
+ {type_street_0, AF_ALL},
+ {type_street_1_city, AF_ALL},
+ {type_street_2_city, AF_ALL},
+ {type_street_3_city, AF_ALL},
+ {type_street_4_city, AF_ALL},
+ {type_highway_city, AF_MOTORIZED_FAST},
+ {type_street_1_land, AF_ALL},
+ {type_street_2_land, AF_ALL},
+ {type_street_3_land, AF_ALL},
+ {type_street_4_land, AF_ALL},
+ {type_street_n_lanes, AF_MOTORIZED_FAST},
+ {type_highway_land, AF_MOTORIZED_FAST},
+ {type_ramp, AF_MOTORIZED_FAST},
+ {type_roundabout, AF_ALL},
+ {type_ferry, AF_ALL},
+ {type_cycleway, AF_PBH},
+ {type_track_paved, AF_ALL},
+ {type_track_gravelled, AF_ALL},
+ {type_track_unpaved, AF_ALL},
+ {type_track_ground, AF_ALL},
+ {type_track_grass, AF_ALL},
+ {type_footway, AF_PBH},
+ {type_living_street, AF_ALL},
+ {type_street_service, AF_ALL},
+ {type_street_parking_lane, AF_ALL},
+ {type_bridleway, AF_PBH},
+ {type_path, AF_PBH},
+ {type_steps, AF_PBH},
+ {type_street_pedestrian, AF_PBH},
+ {type_hiking_mountain, AF_PEDESTRIAN},
+ {type_hiking_mountain_demanding, AF_PEDESTRIAN},
+ {type_hiking, AF_PEDESTRIAN},
+ {type_hiking_alpine, AF_PEDESTRIAN},
+ {type_hiking_alpine_demanding, AF_PEDESTRIAN},
+ {type_hiking_alpine_difficult, AF_PEDESTRIAN},
};
-struct item_name item_names[]={
+struct item_name item_names[]= {
#define ITEM2(x,y) ITEM(y)
#define ITEM(x) { type_##x, #x },
#include "item_def.h"
@@ -93,41 +93,33 @@ static GHashTable *default_flags_hash;
static GHashTable *item_hash;
-void
-item_create_hash(void)
-{
- int i;
- item_hash=g_hash_table_new(g_str_hash, g_str_equal);
- for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
- g_hash_table_insert(item_hash, item_names[i].name, GINT_TO_POINTER(item_names[i].item));
- }
+void item_create_hash(void) {
+ int i;
+ item_hash=g_hash_table_new(g_str_hash, g_str_equal);
+ for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
+ g_hash_table_insert(item_hash, item_names[i].name, GINT_TO_POINTER(item_names[i].item));
+ }
}
-void
-item_destroy_hash(void)
-{
- g_hash_table_destroy(item_hash);
- item_hash=NULL;
+void item_destroy_hash(void) {
+ g_hash_table_destroy(item_hash);
+ item_hash=NULL;
}
-int *
-item_get_default_flags(enum item_type type)
-{
- if (!default_flags_hash) {
- int i;
- default_flags_hash=g_hash_table_new(NULL, NULL);
- for (i = 0 ; i < sizeof(default_flags2)/sizeof(struct default_flags); i++) {
- g_hash_table_insert(default_flags_hash, (void *)(long)default_flags2[i].type, &default_flags2[i].flags);
- }
- }
- return g_hash_table_lookup(default_flags_hash, (void *)(long)type);
+int *item_get_default_flags(enum item_type type) {
+ if (!default_flags_hash) {
+ int i;
+ default_flags_hash=g_hash_table_new(NULL, NULL);
+ for (i = 0 ; i < sizeof(default_flags2)/sizeof(struct default_flags); i++) {
+ g_hash_table_insert(default_flags_hash, (void *)(long)default_flags2[i].type, &default_flags2[i].flags);
+ }
+ }
+ return g_hash_table_lookup(default_flags_hash, (void *)(long)type);
}
-void
-item_cleanup(void)
-{
- if (default_flags_hash)
- g_hash_table_destroy(default_flags_hash);
+void item_cleanup(void) {
+ if (default_flags_hash)
+ g_hash_table_destroy(default_flags_hash);
}
/**
@@ -136,13 +128,14 @@ item_cleanup(void)
* This function resets the "coordinate pointer" of an item to point to the first coordinate pair,
* so that at the next call to {@code item_coord_get()} the first coordinates will be returned.
*
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
* @param it The map item whose pointer is to be reset. This must be the active item, i.e. the last one retrieved from the
* {@code map_rect}. There can only be one active item per {@code map_rect}.
*/
-void
-item_coord_rewind(struct item *it)
-{
- it->meth->item_coord_rewind(it->priv_data);
+void item_coord_rewind(struct item *it) {
+ it->meth->item_coord_rewind(it->priv_data);
}
/**
@@ -154,6 +147,9 @@ item_coord_rewind(struct item *it)
* Coordinates are stored in the projection of the item's map. If you need them in a different projection,
* call {@code item_coord_get_pro()} instead.
*
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
* @param it The map item whose coordinates to retrieve. This must be the active item, i.e. the last one retrieved from the
* {@code map_rect}. There can only be one active item per {@code map_rect}.
* @param c Points to a buffer that will receive the coordinates.
@@ -164,49 +160,119 @@ item_coord_rewind(struct item *it)
*
* @return The number of coordinates actually retrieved and stored in {@code c}
*/
-int
-item_coord_get(struct item *it, struct coord *c, int count)
-{
- return it->meth->item_coord_get(it->priv_data, c, count);
-}
-
-int
-item_coord_set(struct item *it, struct coord *c, int count, enum change_mode mode)
-{
- if (!it->meth->item_coord_set)
- return 0;
- return it->meth->item_coord_set(it->priv_data, c, count, mode);
-}
-
-int
-item_coord_get_within_selection(struct item *it, struct coord *c, int count, struct map_selection *sel)
-{
- int i,ret=it->meth->item_coord_get(it->priv_data, c, count);
- struct coord_rect r;
- struct map_selection *curr;
- if (ret <= 0 || !sel)
- return ret;
- r.lu=c[0];
- r.rl=c[0];
- for (i = 1 ; i < ret ; i++) {
- if (r.lu.x > c[i].x)
- r.lu.x=c[i].x;
- if (r.rl.x < c[i].x)
- r.rl.x=c[i].x;
- if (r.rl.y > c[i].y)
- r.rl.y=c[i].y;
- if (r.lu.y < c[i].y)
- r.lu.y=c[i].y;
- }
- curr=sel;
- while (curr) {
- struct coord_rect *sr=&curr->u.c_rect;
- if (r.lu.x <= sr->rl.x && r.rl.x >= sr->lu.x &&
- r.lu.y >= sr->rl.y && r.rl.y <= sr->lu.y)
- return ret;
- curr=curr->next;
- }
+int item_coord_get(struct item *it, struct coord *c, int count) {
+ return it->meth->item_coord_get(it->priv_data, c, count);
+}
+
+/**
+ * @brief Sets coordinates of an item
+ *
+ * This function supports different modes:
+ *
+ * \li `change_mode_delete`: Deletes the specified number of coordinates
+ * \li `change_mode_modify`: Replaces existing coordinates with new ones
+ * \li `change_mode_append`: Appends new coordinates
+ * \li `change_mode_prepend`: Prepends new coordinates
+ *
+ * TODO which coordinates are deleted/modified? Starting from the last coordinate retrieved, or the one after, or...?
+ *
+ * TODO what if `count` in delete or modify mode is bigger then the number of coordinates left?
+ *
+ * TODO where are coordinates appended/prepended? Beginning/end or current position?
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @param it The map item whose coordinates to retrieve. This must be the active item, i.e. the last one retrieved from the
+ * {@code map_rect}. There can only be one active item per {@code map_rect}.
+ * @param c TODO new coordinates, also store for old coordinates (delete/modify)? Required in delete mode?
+ * @param count TODO number of coordinates to add, delete or modify?
+ * @param mode The change mode, see description
+ */
+int item_coord_set(struct item *it, struct coord *c, int count, enum change_mode mode) {
+ if (!it->meth->item_coord_set)
return 0;
+ return it->meth->item_coord_set(it->priv_data, c, count, mode);
+}
+
+int item_coord_get_within_selection(struct item *it, struct coord *c, int count, struct map_selection *sel) {
+ int i,ret=it->meth->item_coord_get(it->priv_data, c, count);
+ struct coord_rect r;
+ struct map_selection *curr;
+ if (ret <= 0 || !sel)
+ return ret;
+ r.lu=c[0];
+ r.rl=c[0];
+ for (i = 1 ; i < ret ; i++) {
+ if (r.lu.x > c[i].x)
+ r.lu.x=c[i].x;
+ if (r.rl.x < c[i].x)
+ r.rl.x=c[i].x;
+ if (r.rl.y > c[i].y)
+ r.rl.y=c[i].y;
+ if (r.lu.y < c[i].y)
+ r.lu.y=c[i].y;
+ }
+ curr=sel;
+ while (curr) {
+ struct coord_rect *sr=&curr->u.c_rect;
+ if (r.lu.x <= sr->rl.x && r.rl.x >= sr->lu.x &&
+ r.lu.y >= sr->rl.y && r.rl.y <= sr->lu.y)
+ return ret;
+ curr=curr->next;
+ }
+ return 0;
+}
+
+/**
+ * @brief Gets all the coordinates of an item within a specified range
+ *
+ * This will get all the coordinates of the item `i`, starting with `start` and ending with `end`, and
+ * return them in `c`, up to `max` coordinates.
+ *
+ * If `i` does not contain the coordinates in `start`, no coordinates are retrieved and zero is returned.
+ *
+ * If `i` contains the coordinates in `start` but not those in `end`, all coordinates beginning with
+ * `start` are retrieved, ending with the last coordinate of `i` or after `max` coordinates have been
+ * retrieved, whichever occurs first.
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @important Make sure that `c` points to a buffer large enough to hold `max` coordinates!
+ *
+ * @param i The item to get the coordinates of
+ * @param c Pointer to memory allocated for holding the coordinates
+ * @param max Maximum number of coordinates to return
+ * @param start First coordinate to get
+ * @param end Last coordinate to get
+ *
+ * @return The number of coordinates stored in `c`
+ */
+int item_coord_get_within_range(struct item *i, struct coord *c, int max,
+ struct coord *start, struct coord *end) {
+ struct map_rect *mr;
+ struct item *item;
+ int rc = 0, p = 0;
+ struct coord c1;
+ mr=map_rect_new(i->map, NULL);
+ if (!mr)
+ return 0;
+ item = map_rect_get_item_byid(mr, i->id_hi, i->id_lo);
+ if (item) {
+ rc = item_coord_get(item, &c1, 1);
+ while (rc && (c1.x != start->x || c1.y != start->y)) {
+ rc = item_coord_get(item, &c1, 1);
+ }
+ while (rc && p < max) {
+ c[p++] = c1;
+ if (c1.x == end->x && c1.y == end->y)
+ break;
+ rc = item_coord_get(item, &c1, 1);
+ }
+ }
+ map_rect_destroy(mr);
+ return p;
}
/**
@@ -226,242 +292,262 @@ item_coord_get_within_selection(struct item *it, struct coord *c, int count, str
*
* @return The number of coordinates actually retrieved and stored in {@code c}
*/
-int
-item_coord_get_pro(struct item *it, struct coord *c, int count, enum projection to)
-{
- int ret=item_coord_get(it, c, count);
- int i;
- enum projection from=map_projection(it->map);
- if (from != to)
- for (i = 0 ; i < count ; i++)
- transform_from_to(c+i, from, c+i, to);
- return ret;
+int item_coord_get_pro(struct item *it, struct coord *c, int count, enum projection to) {
+ int ret=item_coord_get(it, c, count);
+ int i;
+ enum projection from=map_projection(it->map);
+ if (from != to)
+ for (i = 0 ; i < count ; i++)
+ transform_from_to(c+i, from, c+i, to);
+ return ret;
}
-int
-item_coord_is_node(struct item *it)
-{
- if (it->meth->item_coord_is_node)
- return it->meth->item_coord_is_node(it->priv_data);
- return 0;
+/**
+ * @brief Whether the current coordinates of an item correspond to a node.
+ *
+ * TODO which coordinates? Last retrieved or next (to be) retrieved?
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @param it The item
+ *
+ * @return True on success, false on failure
+ */
+int item_coord_is_node(struct item *it) {
+ if (it->meth->item_coord_is_node)
+ return it->meth->item_coord_is_node(it->priv_data);
+ return 0;
}
-void
-item_attr_rewind(struct item *it)
-{
- it->meth->item_attr_rewind(it->priv_data);
+/**
+ * @brief Resets the "attribute pointer" of an item
+ *
+ * This function resets the "attribute pointer" of an item to point to the first attribute,
+ * so that at the next call to {@code item_attr_get()} the first attribute will be returned.
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @param it The map item whose pointer is to be reset. This must be the active item, i.e. the last one retrieved from the
+ * {@code map_rect}. There can only be one active item per {@code map_rect}.
+ */
+void item_attr_rewind(struct item *it) {
+ it->meth->item_attr_rewind(it->priv_data);
}
-int
-item_attr_get(struct item *it, enum attr_type attr_type, struct attr *attr)
-{
- return it->meth->item_attr_get(it->priv_data, attr_type, attr);
+/**
+ * @brief Gets the next matching attribute from an item
+ *
+ * This function returns the next attribute matching `attr_type` from an item and advances the
+ * "attribute pointer" accordingly, so that at the next call the next attribute will be returned.
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @param it The map item whose attribute to retrieve. This must be the active item, i.e. the last one retrieved from the
+ * {@code map_rect}. There can only be one active item per {@code map_rect}.
+ * @param attr_type The attribute type to retrieve, or `attr_any` to retrieve the next attribute
+ * @param attr Receives the attribute retrieved
+ *
+ * @return True on success, false on failure
+ */
+int item_attr_get(struct item *it, enum attr_type attr_type, struct attr *attr) {
+ return it->meth->item_attr_get(it->priv_data, attr_type, attr);
}
-int
-item_attr_set(struct item *it, struct attr *attr, enum change_mode mode)
-{
- if (!it->meth->item_attr_set)
- return 0;
- return it->meth->item_attr_set(it->priv_data, attr, mode);
+/**
+ * @brief Sets an attribute of an item
+ *
+ * This function supports different modes:
+ *
+ * \li `change_mode_delete`: Deletes the attribute
+ * \li `change_mode_modify`: Replaces an attribute
+ * \li `change_mode_append`: Appends an attribute
+ * \li `change_mode_prepend`: Prepends an attribute
+ *
+ * TODO which attribute is deleted/modified? The last one retrieved, the next one, the first matching one?
+ *
+ * TODO where are attributes appended/prepended? Beginning/end or current position?
+ *
+ * This function is not safe to call after destroying the item's map rect, and doing so may cause errors
+ * with some map implementations.
+ *
+ * @param it The map item whose coordinates to retrieve. This must be the active item, i.e. the last one retrieved from the
+ * {@code map_rect}. There can only be one active item per {@code map_rect}.
+ * @param attr TODO new attr, also store for old attr (delete/modify)? Required in delete mode (type of attr to delete)?
+ * @param mode The change mode, see description
+ */
+int item_attr_set(struct item *it, struct attr *attr, enum change_mode mode) {
+ if (!it->meth->item_attr_set)
+ return 0;
+ return it->meth->item_attr_set(it->priv_data, attr, mode);
}
+
/**
- * @brief Set map item type.
+ * @brief Sets the type of a map item.
*
- * @param it reference to the item.
- * @param type New type for the item. Setting it to type_none is expected to delete item from the map.
- * @return Non-zero if this action is supported by the map and type is set successfully, 0 on error.
+ * @param it The item
+ * @param type The new type for the item. Setting it to type_none is expected to delete item from the map.
+ *
+ * @return Non-zero if this action is supported by the map and type is set successfully, 0 on error.
*/
-int
-item_type_set(struct item *it, enum item_type type)
-{
- if (!it->meth->item_type_set)
- return 0;
- return it->meth->item_type_set(it->priv_data, type);
+int item_type_set(struct item *it, enum item_type type) {
+ if (!it->meth->item_type_set)
+ return 0;
+ return it->meth->item_type_set(it->priv_data, type);
}
-struct item * item_new(char *type, int zoom)
-{
- struct item * it;
+struct item * item_new(char *type, int zoom) {
+ struct item * it;
- it = g_new0(struct item, 1);
+ it = g_new0(struct item, 1);
- /* FIXME evaluate arguments */
+ /* FIXME evaluate arguments */
- return it;
+ return it;
}
-enum item_type
-item_from_name(const char *name)
-{
- int i;
+enum item_type item_from_name(const char *name) {
+ int i;
- if (item_hash)
- return GPOINTER_TO_INT(g_hash_table_lookup(item_hash, name));
+ if (item_hash)
+ return GPOINTER_TO_INT(g_hash_table_lookup(item_hash, name));
- for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
- if (! strcmp(item_names[i].name, name))
- return item_names[i].item;
- }
- return type_none;
+ for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
+ if (! strcmp(item_names[i].name, name))
+ return item_names[i].item;
+ }
+ return type_none;
}
-char *
-item_to_name(enum item_type item)
-{
- int i;
+char *item_to_name(enum item_type item) {
+ int i;
- for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
- if (item_names[i].item == item)
- return item_names[i].name;
- }
- return NULL;
+ for (i=0 ; i < sizeof(item_names)/sizeof(struct item_name) ; i++) {
+ if (item_names[i].item == item)
+ return item_names[i].name;
+ }
+ return NULL;
}
struct item_hash {
- GHashTable *h;
+ GHashTable *h;
};
-static guint
-item_hash_hash(gconstpointer key)
-{
- const struct item *itm=key;
- gconstpointer hashkey=(gconstpointer)GINT_TO_POINTER(itm->id_hi^itm->id_lo^(GPOINTER_TO_INT(itm->map)));
- return g_direct_hash(hashkey);
+static guint item_hash_hash(gconstpointer key) {
+ const struct item *itm=key;
+ gconstpointer hashkey=(gconstpointer)GINT_TO_POINTER(itm->id_hi^itm->id_lo^(GPOINTER_TO_INT(itm->map)));
+ return g_direct_hash(hashkey);
}
-static gboolean
-item_hash_equal(gconstpointer a, gconstpointer b)
-{
- const struct item *itm_a=a;
- const struct item *itm_b=b;
- if (item_is_equal(*itm_a, *itm_b))
- return TRUE;
- return FALSE;
+static gboolean item_hash_equal(gconstpointer a, gconstpointer b) {
+ const struct item *itm_a=a;
+ const struct item *itm_b=b;
+ if (item_is_equal(*itm_a, *itm_b))
+ return TRUE;
+ return FALSE;
}
-unsigned int
-item_id_hash(const void *key)
-{
- const struct item_id *id=key;
- return id->id_hi^id->id_lo;
+unsigned int item_id_hash(const void *key) {
+ const struct item_id *id=key;
+ return id->id_hi^id->id_lo;
}
-int
-item_id_equal(const void *a, const void *b)
-{
- const struct item_id *id_a=a;
- const struct item_id *id_b=b;
- return (id_a->id_hi == id_b->id_hi && id_a->id_lo == id_b->id_lo);
+int item_id_equal(const void *a, const void *b) {
+ const struct item_id *id_a=a;
+ const struct item_id *id_b=b;
+ return (id_a->id_hi == id_b->id_hi && id_a->id_lo == id_b->id_lo);
}
/**
- * @brief Derive item id_lo and id_hi from pointer, considering pointer could be 32 or 64 bit wide but both ids are 32 bit.
+ * @brief Derive item id_lo and id_hi from pointer, considering pointer could be 32 or 64 bit wide but both ids are 32 bit.
*
* @param it reference to the item.
* @param id pointer to derive item id from.
* @return Nothing.
*/
-void
-item_id_from_ptr(struct item *item, void *id)
-{
+void item_id_from_ptr(struct item *item, void *id) {
#if !defined(__LP64__) && !defined(__LLP64__) && !defined(WIN64)
- item->id_lo=(int) id;
- item->id_hi=0;
+ item->id_lo=(int) id;
+ item->id_hi=0;
#else
# ifndef _MSC_VER
- item->id_lo=((long long)id)&0xFFFFFFFFll;
+ item->id_lo=((long long)id)&0xFFFFFFFFll;
# else
- item->id_lo=((long long)id)&0xFFFFFFFFi64;
+ item->id_lo=((long long)id)&0xFFFFFFFFi64;
# endif
- item->id_hi=((long long)id)>>32;
+ item->id_hi=((long long)id)>>32;
#endif
}
struct item_hash *
-item_hash_new(void)
-{
- struct item_hash *ret=g_new(struct item_hash, 1);
+item_hash_new(void) {
+ struct item_hash *ret=g_new(struct item_hash, 1);
- ret->h=g_hash_table_new_full(item_hash_hash, item_hash_equal, g_free, NULL);
- return ret;
+ ret->h=g_hash_table_new_full(item_hash_hash, item_hash_equal, g_free, NULL);
+ return ret;
}
-void
-item_hash_insert(struct item_hash *h, struct item *item, void *val)
-{
- struct item *hitem=g_new(struct item, 1);
- *hitem=*item;
- dbg(lvl_info,"inserting (0x%x,0x%x) into %p\n", item->id_hi, item->id_lo, h->h);
- g_hash_table_insert(h->h, hitem, val);
+void item_hash_insert(struct item_hash *h, struct item *item, void *val) {
+ struct item *hitem=g_new(struct item, 1);
+ *hitem=*item;
+ dbg(lvl_info,"inserting (0x%x,0x%x) into %p", item->id_hi, item->id_lo, h->h);
+ g_hash_table_insert(h->h, hitem, val);
}
-int
-item_hash_remove(struct item_hash *h, struct item *item)
-{
- int ret;
+int item_hash_remove(struct item_hash *h, struct item *item) {
+ int ret;
- dbg(lvl_info,"removing (0x%x,0x%x) from %p\n", item->id_hi, item->id_lo, h->h);
- ret=g_hash_table_remove(h->h, item);
- dbg(lvl_info,"ret=%d\n", ret);
+ dbg(lvl_info,"removing (0x%x,0x%x) from %p", item->id_hi, item->id_lo, h->h);
+ ret=g_hash_table_remove(h->h, item);
+ dbg(lvl_info,"ret=%d", ret);
- return ret;
+ return ret;
}
-void *
-item_hash_lookup(struct item_hash *h, struct item *item)
-{
- return g_hash_table_lookup(h->h, item);
+void *item_hash_lookup(struct item_hash *h, struct item *item) {
+ return g_hash_table_lookup(h->h, item);
}
-void
-item_hash_destroy(struct item_hash *h)
-{
- g_hash_table_destroy(h->h);
- g_free(h);
+void item_hash_destroy(struct item_hash *h) {
+ g_hash_table_destroy(h->h);
+ g_free(h);
}
-int
-item_range_intersects_range(struct item_range *range1, struct item_range *range2)
-{
- if (range1->max < range2->min)
- return 0;
- if (range1->min > range2->max)
- return 0;
- return 1;
+int item_range_intersects_range(struct item_range *range1, struct item_range *range2) {
+ if (range1->max < range2->min)
+ return 0;
+ if (range1->min > range2->max)
+ return 0;
+ return 1;
}
-int
-item_range_contains_item(struct item_range *range, enum item_type type)
-{
- if (type >= range->min && type <= range->max)
- return 1;
- return 0;
+int item_range_contains_item(struct item_range *range, enum item_type type) {
+ if (type >= range->min && type <= range->max)
+ return 1;
+ return 0;
}
-void
-item_dump_attr(struct item *item, struct map *map, FILE *out)
-{
- struct attr attr;
- fprintf(out,"type=%s", item_to_name(item->type));
- while (item_attr_get(item, attr_any, &attr))
- fprintf(out," %s='%s'", attr_to_name(attr.type), attr_to_text(&attr, map, 1));
+void item_dump_attr(struct item *item, struct map *map, FILE *out) {
+ struct attr attr;
+ fprintf(out,"type=%s", item_to_name(item->type));
+ while (item_attr_get(item, attr_any, &attr))
+ fprintf(out," %s='%s'", attr_to_name(attr.type), attr_to_text(&attr, map, 1));
}
-void
-item_dump_filedesc(struct item *item, struct map *map, FILE *out)
-{
+void item_dump_filedesc(struct item *item, struct map *map, FILE *out) {
- int i,count,max=16384;
- struct coord *ca=g_alloca(sizeof(struct coord)*max);
+ int i,count,max=16384;
+ struct coord *ca=g_alloca(sizeof(struct coord)*max);
- count=item_coord_get(item, ca, item->type < type_line ? 1: max);
- if (item->type < type_line)
- fprintf(out,"mg:0x%x 0x%x ", ca[0].x, ca[0].y);
- item_dump_attr(item, map, out);
- fprintf(out,"\n");
- if (item->type >= type_line)
- for (i = 0 ; i < count ; i++)
- fprintf(out,"mg:0x%x 0x%x\n", ca[i].x, ca[i].y);
+ count=item_coord_get(item, ca, item->type < type_line ? 1: max);
+ if (item->type < type_line)
+ fprintf(out,"mg:0x%x 0x%x ", ca[0].x, ca[0].y);
+ item_dump_attr(item, map, out);
+ fprintf(out,"\n");
+ if (item->type >= type_line)
+ for (i = 0 ; i < count ; i++)
+ fprintf(out,"mg:0x%x 0x%x\n", ca[i].x, ca[i].y);
}