<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">We currently allocate a ton of PurpleStatus objects.  Specifically, whenever a PurpleBuddy is allocated:<div> <span class="Apple-tab-span" style="white-space:pre">        </span>purple_buddy_new > purple_presence_new_for_buddy > purple_prpl_get_statuses > purple_status_new</div><div>where purple_prpl_get_statuses() creates a PurpleStatus for each status the buddy's account supports.</div><div><br></div><div>However, the only places we use an inactive status are:</div><div> 1. <span class="Apple-style-span" style="font-family: Monaco; font-size: 10px; ">purple_presence_get_status()</span> - which looks up a PurpleStatus by status_id</div><div> 2. tcl_cmd_presence() - which I guess obtains the possible statuses for use by tcl</div><div><br></div><div>Otherwise, for every PurpleBuddy on, for example, MSN, we have 10 PurpleStatus objects, a maximum of 3 of which are in use at any time (if the buddy has a tune set and is mobile) since 7 of them are exclusive.  For a list with 100 buddies, that means there are 700 PurpleStatus objects, each with associated objects, including a PurpleValue per supported attribute, which are only used when looking them up to switch to them (or when TCL does it's thing; I don't claim to know anything about TCL).</div><div><br></div><div>Is this a necessary allocation evil? Or could we be lazier about generation of these objects to bring them into being only as needed, destroying them when done?</div><div><br></div><div>-Evan</div></body></html>