[Freeciv-Dev] Re: [RFC] Attaching information to objects
[Top] [All Lists]
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
 
On Sat, Jan 13, 2001 at 02:57:12PM +0100, Falk Hueffner wrote:
> Raimar Falke <hawk@xxxxxxxxxxxxxxxxxxxxxxx> writes:
> 
> > The type of the value could be int, string, fixed array of
> > ints. Fixed array of ints would allow better performance for large
> > data however I don't thing it is worth the extra effort. So I
> > propose int for the value type. This is a problem if some code wants
> > to attach strings to objects. I don't expect any strings.
> 
> I'd choose array of chars (which may contain '\0' bytes). An int is
> just too few. For example, the player might command a settler to go to
> a certain place and build a city called "Foo". So the client needs to
> store the coordinates and the city name. Another example: A client
> might implement the possibility to plan tile improvements. It would
> then have to store a list of (coord, improvement)-pairs. (Actually I
> think this would be a very nice feature, for those people who dislike
> micro management but also think the AI autosettlers are too bad.)
> 
> What examples did you have in mind?
Same set: the auto-explore, auto-settle and other existing code as a
starting point. In the next batch any data some client side ai/player
script wants to save.
> 
> Implementation should be easy since there is already a hash table
> implementation in freeciv.
As I said: if the keys are dense and to total amount known a static
array is sufficing.
> 
> > The result are methods like:
> > 
> >    void {city,unit,player}_set_storage(int key, int value);
> >    int {city,unit,player}_get_storage(int key, int default_value);
> 
> Hm, this is a bit difficult, since "roundtrip" packets have to be
> implemented, which currently do not exist. The client has to postpone
Only in the lazy approach.
> The interface could be:
> 
> void {city,unit,player}_set_attrib(const char *key, const char *data, int 
> len);
> const char *{city,unit,player}_get_attrib(const char *key,  int *len);
If you allow any string you have to quote them in the savegame. This
isn't a hard problem.
> It would return zero length if no attribute is attached.
> 
> Actually, get_attrib might be unneccessary; the client should simply
> always cache attributes, and only retrieve them on startup or
> reconnect.  That would simplify things a lot.
Yes but I have a better feeling if this is a function instead of an
access to a data structure. Think about extensibility (we may have
roundtrip packets sometime).
        Raimar
-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 "Many of my assistants were fans of Tolkien, who wrote 'Lord of the Rings'
  and a number of other children's stories for adults.  The first character
  alphabet that was programmed for my plotter was Elvish rather than Latin."
    -- from SAIs "life as a computer for a quarter of a century"
 
 
 | 
 |