Esempio n. 1
0
WordSetU* HG_(newWordSetU) ( void* (*alloc_nofail)( HChar*, SizeT ),
                             HChar* cc,
                             void  (*dealloc)(void*),
                             Word  cacheSize )
{
   WordSetU* wsu;
   WordVec*  empty;

   wsu          = alloc_nofail( cc, sizeof(WordSetU) );
   VG_(memset)( wsu, 0, sizeof(WordSetU) );
   wsu->alloc   = alloc_nofail;
   wsu->cc      = cc;
   wsu->dealloc = dealloc;
   wsu->vec2ix  = VG_(newFM)( alloc_nofail, cc,
                              dealloc, cmp_WordVecs_for_FM );
   wsu->ix2vec_used = 0;
   wsu->ix2vec_size = 0;
   wsu->ix2vec      = NULL;
   wsu->ix2vec_free = NULL;
   WCache_INIT(wsu->cache_addTo,     cacheSize);
   WCache_INIT(wsu->cache_delFrom,   cacheSize);
   WCache_INIT(wsu->cache_intersect, cacheSize);
   WCache_INIT(wsu->cache_minus,     cacheSize);
   empty = new_WV_of_size( wsu, 0 );
   wsu->empty = add_or_dealloc_WordVec( wsu, empty );

   return wsu;
}
Esempio n. 2
0
WordBag* TC_(newBag) ( void* (*alloc_nofail)( SizeT ),
                       void  (*dealloc)(void*) )
{
   WordBag* bag = alloc_nofail(sizeof(WordBag));
   bag->fm = TC_(newFM)( alloc_nofail, dealloc, NULL );
   return bag;
}
Esempio n. 3
0
WordBag* VG_(newBag) ( void* (*alloc_nofail)( const HChar*, SizeT ),
                       const HChar* cc,
                       void  (*dealloc)(void*) )
{
   WordBag* bag = alloc_nofail(cc, sizeof(WordBag));
   bag->fm = VG_(newFM)( alloc_nofail, cc, dealloc, NULL );
   return bag;
}
Esempio n. 4
0
/* Allocate and Initialise a WordFM. */
WordFM* newFM( void* (*alloc_nofail)( SizeT ),
               void  (*dealloc)(void*),
               Word  (*kCmp)(Word,Word) )
{
    WordFM* fm = alloc_nofail(sizeof(WordFM));
    assert(fm);
    initFM(fm, alloc_nofail, dealloc, kCmp);
    return fm;
}
Esempio n. 5
0
/* Allocate and initialise a WordFM.  If kCmp is non-NULL, elements in
   the set are ordered according to the ordering specified by kCmp,
   which becomes obvious if you use VG_(initIterFM),
   VG_(initIterAtFM), VG_(nextIterFM), VG_(doneIterFM) to iterate over
   sections of the map, or the whole thing.  If kCmp is NULL then the
   ordering used is unsigned word ordering (UWord) on the key
   values. */
WordFM* VG_(newFM) ( void* (*alloc_nofail)( const HChar*, SizeT ),
                     const HChar* cc,
                     void  (*dealloc)(void*),
                     Word  (*kCmp)(UWord,UWord) )
{
   WordFM* fm = alloc_nofail(cc, sizeof(WordFM));
   tl_assert(fm);
   initFM(fm, alloc_nofail, cc, dealloc, kCmp);
   return fm;
}
Esempio n. 6
0
static 
AvlNode* avl_dopy ( AvlNode* nd, 
                    UWord(*dopyK)(UWord), 
                    UWord(*dopyV)(UWord),
                    void*(alloc_nofail)(const HChar*,SizeT),
                    const HChar* cc )
{
   AvlNode* nyu;
   if (! nd)
      return NULL;
   nyu = alloc_nofail(cc, sizeof(AvlNode));
   tl_assert(nyu);
   
   nyu->child[0] = nd->child[0];
   nyu->child[1] = nd->child[1];
   nyu->balance = nd->balance;

   /* Copy key */
   if (dopyK) {
      nyu->key = dopyK( nd->key );
      if (nd->key != 0 && nyu->key == 0)
         return NULL; /* oom in key dcopy */
   } else {
      /* copying assumedly unboxed keys */
      nyu->key = nd->key;
   }

   /* Copy val */
   if (dopyV) {
      nyu->val = dopyV( nd->val );
      if (nd->val != 0 && nyu->val == 0)
         return NULL; /* oom in val dcopy */
   } else {
      /* copying assumedly unboxed vals */
      nyu->val = nd->val;
   }

   /* Copy subtrees */
   if (nyu->child[0]) {
      nyu->child[0] = avl_dopy( nyu->child[0], dopyK, dopyV, 
                                alloc_nofail, cc );
      if (! nyu->child[0])
         return NULL;
   }
   if (nyu->child[1]) {
      nyu->child[1] = avl_dopy( nyu->child[1], dopyK, dopyV,
                                alloc_nofail, cc );
      if (! nyu->child[1])
         return NULL;
   }

   return nyu;
}
Esempio n. 7
0
static
AvlNode* avl_dopy ( AvlNode* nd,
                    Word(*dopyK)(Word),
                    Word(*dopyV)(Word),
                    void*(alloc_nofail)(SizeT) )
{
    AvlNode* nyu;
    if (! nd)
        return NULL;
    nyu = alloc_nofail(sizeof(AvlNode));
    assert(nyu);

    nyu->left = nd->left;
    nyu->right = nd->right;
    nyu->balance = nd->balance;

    /* Copy key */
    if (dopyK) {
        nyu->key = dopyK( nd->key );
        if (nd->key != 0 && nyu->key == 0)
            return NULL; /* oom in key dcopy */
    } else {
        /* copying assumedly unboxed keys */
        nyu->key = nd->key;
    }

    /* Copy val */
    if (dopyV) {
        nyu->val = dopyV( nd->val );
        if (nd->val != 0 && nyu->val == 0)
            return NULL; /* oom in val dcopy */
    } else {
        /* copying assumedly unboxed vals */
        nyu->val = nd->val;
    }

    /* Copy subtrees */
    if (nyu->left) {
        nyu->left = avl_dopy( nyu->left, dopyK, dopyV, alloc_nofail );
        if (! nyu->left)
            return NULL;
    }
    if (nyu->right) {
        nyu->right = avl_dopy( nyu->right, dopyK, dopyV, alloc_nofail );
        if (! nyu->right)
            return NULL;
    }

    return nyu;
}