Changeset 13788


Ignore:
Timestamp:
Jan 13, 2013, 10:09:18 PM (8 years ago)
Author:
jordan
Message:

(libT) make ptrarray's assertions consume fewer CPU cycles

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/ptrarray.c

    r13683 r13788  
    161161}
    162162
     163#ifdef NDEBUG
     164#define assertArrayIsSortedAndUnique(array,compare) /* no-op */
     165#define assertIndexIsSortedAndUnique(array,pos,compare) /* no-op */
     166#else
     167
    163168static void
    164 assertSortedAndUnique (const tr_ptrArray * t UNUSED,
    165                        int compare (const void*, const void*) UNUSED)
    166 {
    167 #ifndef NDEBUG
     169assertArrayIsSortedAndUnique (const tr_ptrArray * t,
     170                              int compare (const void*, const void*))
     171{
    168172  int i;
    169173
    170174  for (i=0; i<t->n_items-2; ++i)
    171175    assert (compare (t->items[i], t->items[i+1]) < 0);
     176}
     177
     178static void
     179assertIndexIsSortedAndUnique (const tr_ptrArray * t,
     180                              int pos,
     181                              int compare (const void*, const void*))
     182{
     183  if (pos > 0)
     184    assert (compare (t->items[pos-1], t->items[pos]) < 0);
     185
     186  if ((pos + 1) < t->n_items)
     187    assert (compare (t->items[pos], t->items[pos+1]) < 0);
     188}
     189
    172190#endif
    173 }
    174191
    175192int
     
    180197  int pos;
    181198  int ret;
    182 
    183   assertSortedAndUnique (t, compare);
     199  assertArrayIsSortedAndUnique (t, compare);
    184200
    185201  pos = tr_ptrArrayLowerBound (t, ptr, compare, NULL);
    186202  ret = tr_ptrArrayInsert (t, ptr, pos);
    187203
    188   assertSortedAndUnique (t, compare);
     204  assertIndexIsSortedAndUnique (t, ret, compare);
    189205  return ret;
    190206}
     
    205221                         int           compare (const void*, const void*))
    206222{
     223  int pos;
    207224  bool match;
    208225  void * ret = NULL;
    209   const int pos = tr_ptrArrayLowerBound (t, ptr, compare, &match);
    210 
    211   assertSortedAndUnique (t, compare);
     226
     227  assertArrayIsSortedAndUnique (t, compare);
     228
     229  pos = tr_ptrArrayLowerBound (t, ptr, compare, &match);
    212230
    213231  if (match)
     
    218236    }
    219237
    220   assertSortedAndUnique (t, compare);
    221238  assert ((ret == NULL) || (compare (ret, ptr) == 0));
    222239  return ret;
Note: See TracChangeset for help on using the changeset viewer.