mirror of
https://git.savannah.gnu.org/git/gperf.git
synced 2025-12-02 21:19:24 +00:00
Bug fix: make -j 0 work.
This commit is contained in:
@@ -1,5 +1,12 @@
|
|||||||
2002-11-03 Bruno Haible <bruno@clisp.org>
|
2002-11-03 Bruno Haible <bruno@clisp.org>
|
||||||
|
|
||||||
|
Bug fix: When option -j 0 was used without option -r, the output was
|
||||||
|
not random.
|
||||||
|
* src/search.h (Search::prepare_asso_values): New method declaration.
|
||||||
|
* src/search.cc (Search::prepare_asso_values): New method, extracted
|
||||||
|
from Search::init_asso_values. Call srand also when "-j 0" was given.
|
||||||
|
(Search::optimize): Call prepare_asso_values().
|
||||||
|
|
||||||
* src/hash-table.h (Hash_Table::_ignore_length, Hash_Table::equal):
|
* src/hash-table.h (Hash_Table::_ignore_length, Hash_Table::equal):
|
||||||
Declare as const.
|
Declare as const.
|
||||||
* src/hash-table.cc (Hash_Table::equal): Declare as const.
|
* src/hash-table.cc (Hash_Table::equal): Declare as const.
|
||||||
|
|||||||
@@ -386,11 +386,10 @@ Search::get_max_keysig_size () const
|
|||||||
|
|
||||||
/* ---------------------- Finding good asso_values[] ----------------------- */
|
/* ---------------------- Finding good asso_values[] ----------------------- */
|
||||||
|
|
||||||
/* Initializes the asso_values[] related parameters and put a first guess
|
/* Initializes the asso_values[] related parameters. */
|
||||||
into asso_values[]. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Search::init_asso_values ()
|
Search::prepare_asso_values ()
|
||||||
{
|
{
|
||||||
int size_multiple = option.get_size_multiple ();
|
int size_multiple = option.get_size_multiple ();
|
||||||
int non_linked_length = keyword_list_length ();
|
int non_linked_length = keyword_list_length ();
|
||||||
@@ -416,22 +415,6 @@ Search::init_asso_values ()
|
|||||||
asso_value_max++;
|
asso_value_max++;
|
||||||
_asso_value_max = asso_value_max;
|
_asso_value_max = asso_value_max;
|
||||||
|
|
||||||
if (option[RANDOM])
|
|
||||||
{
|
|
||||||
srand (reinterpret_cast<long>(time (0)));
|
|
||||||
|
|
||||||
for (int i = 0; i < _alpha_size; i++)
|
|
||||||
_asso_values[i] = rand () & (asso_value_max - 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int asso_value = option.get_initial_asso_value ();
|
|
||||||
|
|
||||||
asso_value = asso_value & (_asso_value_max - 1);
|
|
||||||
for (int i = 0; i < _alpha_size; i++)
|
|
||||||
_asso_values[i] = asso_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Given the bound for _asso_values[c], we have a bound for the possible
|
/* Given the bound for _asso_values[c], we have a bound for the possible
|
||||||
hash values, as computed in compute_hash(). */
|
hash values, as computed in compute_hash(). */
|
||||||
_max_hash_value = (option[NOLENGTH] ? 0 : max_key_length ())
|
_max_hash_value = (option[NOLENGTH] ? 0 : max_key_length ())
|
||||||
@@ -447,6 +430,30 @@ Search::init_asso_values ()
|
|||||||
fprintf (stderr, "total non-linked keys = %d\nmaximum associated value is %d"
|
fprintf (stderr, "total non-linked keys = %d\nmaximum associated value is %d"
|
||||||
"\nmaximum size of generated hash table is %d\n",
|
"\nmaximum size of generated hash table is %d\n",
|
||||||
non_linked_length, asso_value_max, _max_hash_value);
|
non_linked_length, asso_value_max, _max_hash_value);
|
||||||
|
|
||||||
|
if (option[RANDOM] || option.get_jump () == 0)
|
||||||
|
/* We will use rand(), so initialize the random number generator. */
|
||||||
|
srand (reinterpret_cast<long>(time (0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Puts a first guess into asso_values[]. */
|
||||||
|
|
||||||
|
void
|
||||||
|
Search::init_asso_values ()
|
||||||
|
{
|
||||||
|
if (option[RANDOM])
|
||||||
|
{
|
||||||
|
for (int i = 0; i < _alpha_size; i++)
|
||||||
|
_asso_values[i] = rand () & (_asso_value_max - 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int asso_value = option.get_initial_asso_value ();
|
||||||
|
|
||||||
|
asso_value = asso_value & (_asso_value_max - 1);
|
||||||
|
for (int i = 0; i < _alpha_size; i++)
|
||||||
|
_asso_values[i] = asso_value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Computes a keyword's hash value, relative to the current _asso_values[],
|
/* Computes a keyword's hash value, relative to the current _asso_values[],
|
||||||
@@ -723,6 +730,7 @@ Search::optimize ()
|
|||||||
prepare ();
|
prepare ();
|
||||||
if (option[ORDER])
|
if (option[ORDER])
|
||||||
reorder ();
|
reorder ();
|
||||||
|
prepare_asso_values ();
|
||||||
|
|
||||||
/* Search for good _asso_values[]. */
|
/* Search for good _asso_values[]. */
|
||||||
find_asso_values ();
|
find_asso_values ();
|
||||||
@@ -748,7 +756,7 @@ Search::optimize ()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sorts the key word list by hash value. */
|
/* Sorts the keyword list by hash value. */
|
||||||
sort ();
|
sort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,8 +62,9 @@ private:
|
|||||||
/* Returns the number of key positions. */
|
/* Returns the number of key positions. */
|
||||||
int get_max_keysig_size () const;
|
int get_max_keysig_size () const;
|
||||||
|
|
||||||
/* Initializes the asso_values[] related parameters and put a first guess
|
/* Initializes the asso_values[] related parameters. */
|
||||||
into asso_values[]. */
|
void prepare_asso_values ();
|
||||||
|
/* Puts a first guess into asso_values[]. */
|
||||||
void init_asso_values ();
|
void init_asso_values ();
|
||||||
|
|
||||||
/* Computes a keyword's hash value, relative to the current _asso_values[],
|
/* Computes a keyword's hash value, relative to the current _asso_values[],
|
||||||
|
|||||||
Reference in New Issue
Block a user