At Tue, 25 Sep 2018 16:45:09 -0700, Andres Freund <and...@anarazel.de> wrote in <20180925234509.3hrrf6tmvy5tf...@alap3.anarazel.de> > Hi, > > On 2018-09-04 18:35:34 +0530, Amit Khandekar wrote: > > Subject: [PATCH 05/14] Use tts_flags instead of previous bool members > > > > Pack the boolean members in TupleTableSlot into a 16 bit tts_flags. > > This reduces the size of TupleTableSlot since each bool member takes > > at least a byte on the platforms where bool is defined as a char. > > > > Ashutosh Bapat and Andres Freund > > > + > > +/* true = slot is empty */ > > +#define TTS_ISEMPTY (1 << 1) > > +#define IS_TTS_EMPTY(slot) ((slot)->tts_flags & TTS_ISEMPTY) > > +#define SET_TTS_EMPTY(slot) ((slot)->tts_flags |= TTS_ISEMPTY) > > +#define RESET_TTS_EMPTY(slot) ((slot)->tts_flags &= ~TTS_ISEMPTY) > > The flag stuff is the right way, but I'm a bit dubious about the > accessor functions. I can see open-coding the accesses, using the > macros, or potentially going towards using bitfields. > > Any comments?
Currently we have few setter/resetter function(macro)s for such simple operations. FWIW open-coding in the following two looks rather easier to me. > if (IS_TTS_EMPTY(slot)) > if (slot->tts_flags & TTS_ISEMPTY) About bitfields, an advantage of it is debugger awareness. We don't need to look aside to the definitions of bitwise macros while using debugger. And the current code is preserved in appearance by using it. > if (slot->tts_isempty) > slot->tts_isempty = true; In short, +1 from me to use bitfields. Coulnd't we use bitfield here, possiblly in other places then? ===== Not related to tuple slots, in other places, like infomask, we handle a set of bitmap values altogether. > infomask = tuple->t_data->t_infomask; Bare bitfields are a bit inconvenient for the use. It gets simpler using C11 anonymous member but not so bothersome even in C99. Anyway I don't think we jump into that immediately. infomask.all = tuple->t_data->t_infomask.all; - if (!HeapTupleHeaderXminCommitted(tuple)) C99> if (tuple->t_infomask.b.xmin_committed) C11> if (tuple->t_infomask.xmin_committed) regards. -- Kyotaro Horiguchi NTT Open Source Software Center