/[guile]/guile/guile-core/libguile/environments.c
ViewVC logotype

Diff of /guile/guile-core/libguile/environments.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.30 by dirk, Wed Jul 24 16:34:43 2002 UTC revision 1.31 by mdj, Wed Feb 19 15:04:49 2003 UTC
# Line 1  Line 1 
1  /* Copyright (C) 1999,2000,2001 Free Software Foundation, Inc.  /* Copyright (C) 1999,2000,2001, 2003 Free Software Foundation, Inc.
2   *   *
3   * This program is free software; you can redistribute it and/or modify   * This program is free software; you can redistribute it and/or modify
4   * it under the terms of the GNU General Public License as published by   * it under the terms of the GNU General Public License as published by
# Line 531  observer_print (SCM type, SCM port, scm_ Line 531  observer_print (SCM type, SCM port, scm_
531  static SCM  static SCM
532  obarray_enter (SCM obarray, SCM symbol, SCM data)  obarray_enter (SCM obarray, SCM symbol, SCM data)
533  {  {
534    size_t hash = SCM_SYMBOL_HASH (symbol) % SCM_VECTOR_LENGTH (obarray);    size_t hash = SCM_SYMBOL_HASH (symbol) % SCM_HASHTABLE_N_BUCKETS (obarray);
535    SCM entry = scm_cons (symbol, data);    SCM entry = scm_cons (symbol, data);
536    SCM slot = scm_cons (entry, SCM_VELTS (obarray)[hash]);    SCM slot = scm_cons (entry, SCM_HASHTABLE_BUCKETS (obarray)[hash]);
537    SCM_VECTOR_SET  (obarray, hash, slot);    SCM_SET_HASHTABLE_BUCKET  (obarray, hash, slot);
538      if (SCM_HASHTABLE_N_ITEMS (obarray) > SCM_HASHTABLE_UPPER (obarray))
539        scm_i_rehash (obarray, scm_i_hash_symbol, 0, "obarray_enter");
540    
541    return entry;    return entry;
542  }  }
# Line 547  obarray_enter (SCM obarray, SCM symbol, Line 549  obarray_enter (SCM obarray, SCM symbol,
549  static SCM  static SCM
550  obarray_replace (SCM obarray, SCM symbol, SCM data)  obarray_replace (SCM obarray, SCM symbol, SCM data)
551  {  {
552    size_t hash = SCM_SYMBOL_HASH (symbol) % SCM_VECTOR_LENGTH (obarray);    size_t hash = SCM_SYMBOL_HASH (symbol) % SCM_HASHTABLE_N_BUCKETS (obarray);
553    SCM new_entry = scm_cons (symbol, data);    SCM new_entry = scm_cons (symbol, data);
554    SCM lsym;    SCM lsym;
555    SCM slot;    SCM slot;
556    
557    for (lsym = SCM_VELTS (obarray)[hash]; !SCM_NULLP (lsym); lsym = SCM_CDR (lsym))    for (lsym = SCM_HASHTABLE_BUCKETS (obarray)[hash];
558           !SCM_NULLP (lsym);
559           lsym = SCM_CDR (lsym))
560      {      {
561        SCM old_entry = SCM_CAR (lsym);        SCM old_entry = SCM_CAR (lsym);
562        if (SCM_EQ_P (SCM_CAR (old_entry), symbol))        if (SCM_EQ_P (SCM_CAR (old_entry), symbol))
# Line 562  obarray_replace (SCM obarray, SCM symbol Line 566  obarray_replace (SCM obarray, SCM symbol
566          }          }
567      }      }
568    
569    slot = scm_cons (new_entry, SCM_VELTS (obarray)[hash]);    slot = scm_cons (new_entry, SCM_HASHTABLE_BUCKETS (obarray)[hash]);
570    SCM_VECTOR_SET (obarray, hash, slot);    SCM_SET_HASHTABLE_BUCKET (obarray, hash, slot);
571      if (SCM_HASHTABLE_N_ITEMS (obarray) > SCM_HASHTABLE_UPPER (obarray))
572        scm_i_rehash (obarray, scm_i_hash_symbol, 0, "obarray_replace");
573    
574    return SCM_BOOL_F;    return SCM_BOOL_F;
575  }  }
# Line 575  obarray_replace (SCM obarray, SCM symbol Line 581  obarray_replace (SCM obarray, SCM symbol
581  static SCM  static SCM
582  obarray_retrieve (SCM obarray, SCM sym)  obarray_retrieve (SCM obarray, SCM sym)
583  {  {
584    size_t hash = SCM_SYMBOL_HASH (sym) % SCM_VECTOR_LENGTH (obarray);    size_t hash = SCM_SYMBOL_HASH (sym) % SCM_HASHTABLE_N_BUCKETS (obarray);
585    SCM lsym;    SCM lsym;
586    
587    for (lsym = SCM_VELTS (obarray)[hash]; !SCM_NULLP (lsym); lsym = SCM_CDR (lsym))    for (lsym = SCM_HASHTABLE_BUCKETS (obarray)[hash];
588           !SCM_NULLP (lsym);
589           lsym = SCM_CDR (lsym))
590      {      {
591        SCM entry = SCM_CAR (lsym);        SCM entry = SCM_CAR (lsym);
592        if (SCM_EQ_P (SCM_CAR (entry), sym))        if (SCM_EQ_P (SCM_CAR (entry), sym))
# Line 596  obarray_retrieve (SCM obarray, SCM sym) Line 604  obarray_retrieve (SCM obarray, SCM sym)
604  static SCM  static SCM
605  obarray_remove (SCM obarray, SCM sym)  obarray_remove (SCM obarray, SCM sym)
606  {  {
607    size_t hash = SCM_SYMBOL_HASH (sym) % SCM_VECTOR_LENGTH (obarray);    size_t hash = SCM_SYMBOL_HASH (sym) % SCM_HASHTABLE_N_BUCKETS (obarray);
608    SCM table_entry = SCM_VELTS (obarray)[hash];    SCM table_entry = SCM_HASHTABLE_BUCKETS (obarray)[hash];
609    SCM handle = scm_sloppy_assq (sym, table_entry);    SCM handle = scm_sloppy_assq (sym, table_entry);
610    
611    if (SCM_CONSP (handle))    if (SCM_CONSP (handle))
612      {      {
613        SCM new_table_entry = scm_delq1_x (handle, table_entry);        SCM new_table_entry = scm_delq1_x (handle, table_entry);
614        SCM_VECTOR_SET (obarray, hash, new_table_entry);        SCM_SET_HASHTABLE_BUCKET (obarray, hash, new_table_entry);
615          SCM_HASHTABLE_DECREMENT (obarray);
616      }      }
617    
618    return handle;    return handle;
# Line 613  obarray_remove (SCM obarray, SCM sym) Line 622  obarray_remove (SCM obarray, SCM sym)
622  static void  static void
623  obarray_remove_all (SCM obarray)  obarray_remove_all (SCM obarray)
624  {  {
625    size_t size = SCM_VECTOR_LENGTH (obarray);    size_t size = SCM_HASHTABLE_N_BUCKETS (obarray);
626    size_t i;    size_t i;
627    
628    for (i = 0; i < size; i++)    for (i = 0; i < size; i++)
629      {      {
630        SCM_VECTOR_SET (obarray, i, SCM_EOL);        SCM_SET_HASHTABLE_BUCKET (obarray, i, SCM_EOL);
631      }      }
632      SCM_SET_HASHTABLE_N_ITEMS (obarray, 0);
633  }  }
634    
635    
# Line 759  core_environments_init (struct core_envi Line 769  core_environments_init (struct core_envi
769  {  {
770    body->funcs = funcs;    body->funcs = funcs;
771    body->observers = SCM_EOL;    body->observers = SCM_EOL;
772    body->weak_observers = scm_make_weak_value_hash_table (SCM_MAKINUM (1));    body->weak_observers = scm_make_weak_value_alist_vector (SCM_MAKINUM (1));
773  }  }
774    
775    
# Line 897  leaf_environment_fold (SCM env, scm_envi Line 907  leaf_environment_fold (SCM env, scm_envi
907    SCM result = init;    SCM result = init;
908    SCM obarray = LEAF_ENVIRONMENT (env)->obarray;    SCM obarray = LEAF_ENVIRONMENT (env)->obarray;
909    
910    for (i = 0; i < SCM_VECTOR_LENGTH (obarray); i++)    for (i = 0; i < SCM_HASHTABLE_N_BUCKETS (obarray); i++)
911      {      {
912        SCM l;        SCM l;
913        for (l = SCM_VELTS (obarray)[i]; !SCM_NULLP (l); l = SCM_CDR (l))        for (l = SCM_HASHTABLE_BUCKETS (obarray)[i];
914               !SCM_NULLP (l);
915               l = SCM_CDR (l))
916          {          {
917            SCM binding = SCM_CAR (l);            SCM binding = SCM_CAR (l);
918            SCM symbol = SCM_CAR (binding);            SCM symbol = SCM_CAR (binding);

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.31

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26