<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><font class="Apple-style-span" face="Courier">> Hi Gabor,</font></div><div><font class="Apple-style-span" face="Courier">> </font></div><div><font class="Apple-style-span" face="Courier">> Could you give a little more detailed description of the plan</font></div><div><font class="Apple-style-span" face="Courier">> with the user-diet changes? I read the README but still don't</font></div><div><font class="Apple-style-span" face="Courier">> have a good picture of what will happen.</font></div><div><font class="Apple-style-span" face="Courier">> </font></div><div><font class="Apple-style-span" face="Courier">> Specifically, which operators new/delete will be overridden?</font></div><div><font class="Apple-style-span" face="Courier">> What work will they do? How will the surrogate getters/setters</font></div><div><font class="Apple-style-span" face="Courier">> work?</font></div><div><font class="Apple-style-span" face="Courier">> </font></div><div><font class="Apple-style-span" face="Courier">> Thanks,</font></div><div><font class="Apple-style-span" face="Courier">> </font></div><div><font class="Apple-style-span" face="Courier">> Dan</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Hi Dan,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">I am going to summarize rapidly my previous correspondence with Chris.</font></div><div><font class="Apple-style-span" face="Courier">(It is late here, so expect errors.)</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">We have 2 different layouts in the User (sub)classes:</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Layout a)</font></div><div><font class="Apple-style-span" face="Courier">The Use object(s) are inside of the User object and there are a fixed number of them.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Layout b)</font></div><div><font class="Apple-style-span" face="Courier">The Use object(s) are referenced by a pointer to an array from the User object and</font></div><div><font class="Apple-style-span" face="Courier">there may be a variable number of them.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Layout a) will be modelled by prepending the User object by the Use[] array.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font style="font: 16.0px Monaco"><font class="Apple-style-span" face="Courier" size="3"><span class="Apple-style-span" style="font-size: 12px;">...---.---.---.---.-------...</span></font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font style="font: 16.0px Monaco"><font class="Apple-style-span" face="Courier" size="3"><span class="Apple-style-span" style="font-size: 12px;">  | 0 | 0 | 2 | 1 | User</span></font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font style="font: 16.0px Monaco"><font class="Apple-style-span" face="Courier" size="3"><span class="Apple-style-span" style="font-size: 12px;">```---`---`---`---`-------```</span></font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><font style="font: 16.0px Monaco"><font class="Apple-style-span" face="Courier" size="3"><span class="Apple-style-span" style="font-size: 12px;">    12  12  12  12</span></font></font></div></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><div><font class="Apple-style-span" face="Courier">a bit-encoding in the 2 LSBits of the Use::Val will allow to find the</font></div><div><font class="Apple-style-span" face="Courier">start of the User object:</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><span class="Apple-style-span" style="line-height: normal; "><font class="Apple-style-span" face="Courier">00 --> binary digit 0 </font></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">01 --> binary digit 1 </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">10 --> stop and calc (s) </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">11 --> full stop (S) </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><span class="Apple-style-span" style="line-height: normal;"><font class="Apple-style-span" face="Courier"><br></font></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">Given a Use*, all we have to do is walk till we get a </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">stop and we either have a User immediately behind or </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">we have to walk to the next stop picking up digits </font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><font style="font: 12.0px Helvetica"><font class="Apple-style-span" face="Courier">and calculate the offset:</font></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; line-height: 14px; "><span class="Apple-style-span" style="line-height: normal;"><font class="Apple-style-span" face="Courier"><br></font></span></div></div><div><font class="Apple-style-span" face="Courier">.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.---.----------------</font></div><div><font class="Apple-style-span" face="Courier">| s | 1 | 0 | 1 | 1 | s | 0 | 1 | 1 | 0 | s | 0 | 0 | 0 | 1 | S | User (or User*)</font></div><div><font class="Apple-style-span" face="Courier">'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'---'----------------</font></div><div><font class="Apple-style-span" face="Courier"> +16                 +11                 +6                  +1</font></div><div><font class="Apple-style-span" face="Courier">                                                            |___></font></div><div><font class="Apple-style-span" face="Courier">                                        |_______________________></font></div><div><font class="Apple-style-span" face="Courier">                    |___________________________________________></font></div><div><font class="Apple-style-span" face="Courier">|_______________________________________________________________></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">For layout b) instead of the User we will find a pointer (with LSBit set).</font></div><div><font class="Apple-style-span" face="Courier">Following this pointer brings us to the User.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">For both layouts the location of the User can be calculated rapidly,</font></div><div><font class="Apple-style-span" face="Courier">so there is no need to store Use::U in the Use object. This allows</font></div><div><font class="Apple-style-span" face="Courier">us to shrink its size to 12 (from 16).</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">There are more middle-term savings, like eliminating the User::NumOperands member etc.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">There will be placement 'operator new' and 'Create' static factories, that will</font></div><div><font class="Apple-style-span" face="Courier">ensure that the layout invariants are met.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">I hope this gives a bit of a background for discussion.</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier">Cheers,</font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><span class="Apple-tab-span" style="white-space:pre">        </span>Gabor<br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div><div><font class="Apple-style-span" face="Courier"><br></font></div></div>
</body></html>