#43809: Introduce struct for requirement targets Open Date: 2022-02-08 00:24 Last Update: 2022-02-08 17:54 URL for this Ticket: https://osdn.net//projects/freeciv/ticket/43809 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=12505&tid=43809 --------------------------------------------------------------------- Last Changes/Comment on this Ticket: 2022-02-08 17:54 Updated by: alienvalkyrie Comment: There's a decision to be made regarding the struct name. So far, I've been going with req_targets (plural, which I think is more fitting than some decade-old comments which still talk about target, singular); this is fine in most cases, but in actions code, it leads to things like static bool is_enabler_active(const struct action_enabler *enabler, const struct req_targets *actor, const struct req_targets *target);which is an overload of the word "target" that doesn't have to happen. The alternative term I've been thinking about is "requirement evaluation context", or req_eval_context, which is a bit of a mouthful. Could be shortened to just req_context, but that sounds like it's part of the requirement; the context a requirement is defined in, rather than what it's evaluated against. If we want to change the name and associated nomenclature, now and as part of this feature would probably be the best time and place to do so. --------------------------------------------------------------------- Ticket Status: Reporter: alienvalkyrie Owner: alienvalkyrie Type: Patches Status: Open [Owner assigned] Priority: 5 - Medium MileStone: 3.1.0 Component: General Severity: 5 - Medium Resolution: None --------------------------------------------------------------------- Ticket details: Currently, calls to is_req_active() (and accordingly, to are_reqs_active() and is_enabler_active()) are highly inscrutable, given the number of arguments (many of which are often NULL). More problematically, it's impossible to add new kinds of requirement targets without changing every call site (usually by adding another NULL at some spot in the call). Solution: Add a new struct requirement_targets which contains all of them and make aforementioned functions take a pointer to it. Individual call sites only need to set their relevant fields (by field name ~> better readability), so new fields can be added to the struct with less hassle. Possible performance considerations: Additional layer of indirection via pointer to requirement_targets struct Individual requirement targets don't need to be copied anymore when e.g. are_reqs_active() calls is_req_active() Both of these are probably relatively minor. -- Ticket information of Freeciv project Freeciv Project is hosted on OSDN Project URL: https://osdn.net/projects/freeciv/ OSDN: https://osdn.net URL for this Ticket: https://osdn.net/projects/freeciv/ticket/43809 RSS feed for this Ticket: https://osdn.net/ticket/ticket_rss.php?group_id=12505&tid=43809