Exemplo n.º 1
0
conflag_ref conflag_dict_get(conflag_dict *dict, conflag_string *key) {
  for (long j = key->hash, p = key->hash; ; HASH_NEXT(j, p)) {
    conflag_dict_entry *entry = dict->table + (j & dict->mask);
    if (entry->ref.type == CONFLAG_DICT_EMPTY) {
      //printf("Key error: %s\n", key->string);
      return (conflag_ref) {CONFLAG_ERROR, {.error = CONFLAG_KEY_ERROR}};
    } else if (key->length == entry->key->length &&
Exemplo n.º 2
0
no hget(register no pred, register no fun)
{
  register no last,i=HKEY(pred,fun);
  if(HFOUND()) return htable[i].val;
  HLIMIT(last);
  do {
       HASH_NEXT();
       if(HFOUND()) return htable[i].val;
     }
  while(HNOTFULL() && HUSED());   
  return (no)NULL;
}
Exemplo n.º 3
0
no hdef(register no pred, register no fun, register no val, byte stamp)
{
  register no i=HKEY(pred,fun),last;
  HLIMIT(last);
  while(HNOTFULL() && HUSED() && !(HFOUND()))
    HASH_NEXT();
  if(!HUSED() || (HDELETED() && HFOUND()) )
      {
        HPUT(i,pred,fun,val,stamp);
        return 1;
      }
  return 0;     
}
Exemplo n.º 4
0
bp_long hindex(register no pred, register no fun, bp_long *index)
{
  register no last,i=HKEY(pred,fun);
  if(HFOUND()) {*index=i; return FOUND;}
  if(!HUSED()) {*index=i; return FREE;}
  HLIMIT(last); 
  do  
     {
       HASH_NEXT();
       if(HFOUND()) {*index=i; return FOUND;}
     }
  while(HNOTFULL() && HUSED());
 
  if(!HNOTFULL()) {hfull("culprit->hindex"); return FULL;}
  else {*index=i; return FREE;}
}
Exemplo n.º 5
0
void conlfag_dict_insert(
    conflag_dict *dict, conflag_string *key, conflag_ref value) {
  for (long j = key->hash, p = key->hash; ; HASH_NEXT(j, p)) {
    conflag_dict_entry *entry = dict->table + (j & dict->mask);
    //TODO: Can just use null key instead of CONFLAG_DICT_EMPTY!!!
    if (entry->ref.type == CONFLAG_DICT_EMPTY) {
      *entry = (conflag_dict_entry) {key, value};
      dict->used++;
      break;
    } else if (key->length == entry->key->length &&
         !strncmp(key->string, entry->key->string, key->length)) {
      entry->ref = value;
      break;
    }
  }
}
Exemplo n.º 6
0
no hset(register no pred, register no fun, register no val)
{
  register no i=HKEY(pred,fun),last; HLIMIT(last);
  while(HNOTFULL() && HUSED() && !(HFOUND()))
    HASH_NEXT();
  if(HFOUND())
      {
        htable[i].val=val;
        return 1;
      }
  warnmes("hdef/3 required before using hset/3");
#if 0
  fprintf(STD_err,"%s/%ld+...->%s/%ld\n",
     NAME(pred),GETARITY(pred),
     NAME(val),GETARITY(val)
    );
#endif
  return 0;
}
Exemplo n.º 7
0
int
pkg_repos(struct pkg_repo **r)
{
	HASH_NEXT(repos, (*r));
}