static PyObject* PyJudyIntSet_remove(PyJudyIntSet* self, PyObject* key) { Word_t v; if (self->s == 0 || !pyobject_as_word_t(key, &v)) { set_key_error(key); return 0; } JError_t JError; int i = Judy1Unset(&self->s, (Word_t)v, &JError); if (i == JERR) { judy_set_error(&JError); return 0; } if (i == 0) { set_key_error(key); return 0; } Py_INCREF(Py_None); return Py_None; }
char set_s_selected(struct symbol *s, char value) { if(value) { Judy1Set ((Pvoid_t)&GLOBALS->s_selected, (Word_t)s, PJE0); } else { Judy1Unset ((Pvoid_t)&GLOBALS->s_selected, (Word_t)s, PJE0); } return(value); }
void flx_collector_t::mark(pthread::memory_ranges_t *px) { int reclimit = 64; if(debug) fprintf(stderr,"Collector: Running mark\n"); assert (root_count == roots.size()); assert(j_tmp == 0); if(px) { std::vector<pthread::memory_range_t>::iterator end = (*px).end(); for( std::vector<pthread::memory_range_t>::iterator i = (*px).begin(); i != end; ++i ) { pthread::memory_range_t range = *i; if(debug) { unsigned long n = (char*)range.e - (char*)range.b; fprintf(stderr, "Conservate scan of memory %p->%p, %ld bytes\n",range.b, range.e, n); } //VALGRIND_MAKE_MEM_DEFINED(range.b, (char*)range.e-(char*)range.b); void *end = range.e; for ( void *i = range.b; i != end; i = (void*)((void**)i+1)) { if(debug) fprintf(stderr, "Check if *%p=%p is a pointer\n",i,*(void**)i); scan_object(*(void**)i, reclimit); } if(debug) fprintf(stderr, "DONE: Conservate scan of memory %p->%p\n",range.b, range.e); } } if(debug) fprintf(stderr, "Scanning roots\n"); rootmap_t::iterator const end = roots.end(); for( rootmap_t::iterator i = roots.begin(); i != end; ++i ) { if (debug) fprintf(stderr, "Scanning root %p\n", (*i).first); scan_object((*i).first, reclimit); } // Now, scan the temporary list until it is empty Word_t toscan = 0ul; int res = Judy1First(j_tmp,&toscan,&je); // get one object scheduled for scanning while(res) { Judy1Unset(&j_tmp,toscan,&je); // remove it immediately scan_object((void*)toscan, reclimit); // scan it, it will either be marked or discarded toscan = 0ul; res = Judy1First(j_tmp,&toscan,&je); } assert(j_tmp == 0); if(debug) fprintf(stderr, "Done Scanning roots\n"); }