change collation setting interface to take pointer argument
diff --git a/collation_key.c b/collation_key.c index 25e2ff9..3ede6f9 100644 --- a/collation_key.c +++ b/collation_key.c
@@ -18,93 +18,90 @@ return (Collation_choice) UNICOLL_VARIABLE_NONIGNORABLE; } -Collation_choice -unicoll_set_variable (Collation_choice collation, - int variable) +void +unicoll_set_variable (Collation_choice *collation, int variable) { if (variable != UNICOLL_VARIABLE_NONIGNORABLE && variable != UNICOLL_VARIABLE_SHIFTED && variable != UNICOLL_VARIABLE_BLANKED) { errno = EINVAL; - return collation; + return; } - return (Collation_choice) (collation & ~UNICOLL_VARIABLE_MASK) | variable; + *collation = (*collation & ~UNICOLL_VARIABLE_MASK) | variable; } /* Set bit to disable output of a collation level. */ -Collation_choice -unicoll_disable_level (Collation_choice collation, int level) +void +unicoll_disable_level (Collation_choice *collation, int level) { switch (level) { case 1: - return (collation | UNICOLL_LEVEL1_BIT); + *collation |= UNICOLL_LEVEL1_BIT; case 2: - return (collation | UNICOLL_LEVEL2_BIT); + *collation |= UNICOLL_LEVEL2_BIT; case 3: - return (collation | UNICOLL_LEVEL3_BIT); + *collation |= UNICOLL_LEVEL3_BIT; case 4: - return (collation | UNICOLL_LEVEL4_BIT); + *collation |= UNICOLL_LEVEL4_BIT; default: errno = EINVAL; - return collation; } } /* Clear bit to enable output of a collation level. */ -Collation_choice -unicoll_enable_level (Collation_choice collation, int level) +void +unicoll_enable_level (Collation_choice *collation, int level) { switch (level) { case 1: - return (collation & ~UNICOLL_LEVEL1_BIT); + *collation &= ~UNICOLL_LEVEL1_BIT; case 2: - return (collation & ~UNICOLL_LEVEL2_BIT); + *collation &= ~UNICOLL_LEVEL2_BIT; case 3: - return (collation & ~UNICOLL_LEVEL3_BIT); + *collation &= ~UNICOLL_LEVEL3_BIT; case 4: - return (collation & ~UNICOLL_LEVEL4_BIT); + *collation &= ~UNICOLL_LEVEL4_BIT; default: errno = EINVAL; - return collation; } } -Collation_choice -unicoll_set_normalization (Collation_choice collation, int normalization_on) +void +unicoll_set_normalization (Collation_choice *collation, int normalization_on) { /* Set bit to disable normalization. */ if (normalization_on) - return (collation & ~UNICOLL_NORMALIZATION_MASK); + *collation &= ~UNICOLL_NORMALIZATION_MASK; else - return (collation | UNICOLL_NORMALIZATION_MASK); + *collation |= UNICOLL_NORMALIZATION_MASK; } /* If CONTRACTIONS_ON is 0, disable use of contractions, i.e. sequence lookup. */ -Collation_choice -unicoll_set_contractions (Collation_choice collation, int contractions_on) +void +unicoll_set_contractions (Collation_choice *collation, int contractions_on) { if (contractions_on) - return (collation & ~UNICOLL_CONTRACTIONS_MASK); + *collation &= ~UNICOLL_CONTRACTIONS_MASK; else - return (collation | UNICOLL_CONTRACTIONS_MASK); + *collation |= UNICOLL_CONTRACTIONS_MASK; } /* If PARTIAL_KEY_ENABLED is non-zero, u*_make_collation_key does not re-allocate RESULTBUF and will return a partial key (null-terminated) if the full result would be longer than *LENGTHP bytes. */ -Collation_choice -unicoll_enable_partial (Collation_choice collation, - int partial_key_enabled) +void +unicoll_enable_partial (Collation_choice *collation, + int partial_key_enabled) { if (!partial_key_enabled) - return (collation & ~UNICOLL_PARTIAL_MASK); + *collation &= ~UNICOLL_PARTIAL_MASK; else - return (collation | UNICOLL_PARTIAL_MASK); + *collation |= UNICOLL_PARTIAL_MASK; } #define BITS 32
diff --git a/collation_key.h b/collation_key.h index ea21ef5..9b0be27 100644 --- a/collation_key.h +++ b/collation_key.h
@@ -22,19 +22,19 @@ typedef uint_fast32_t Collation_choice; Collation_choice unicoll_default (void); -Collation_choice unicoll_set_variable (Collation_choice collation, +void unicoll_set_variable (Collation_choice *collation, int variable); -Collation_choice unicoll_disable_level (Collation_choice collation, +void unicoll_disable_level (Collation_choice *collation, int level); -Collation_choice unicoll_enable_level (Collation_choice collation, +void unicoll_enable_level (Collation_choice *collation, int level); -Collation_choice unicoll_set_normalization (Collation_choice collation, +void unicoll_set_normalization (Collation_choice *collation, int normalization_on); -Collation_choice unicoll_set_contractions (Collation_choice collation, +void unicoll_set_contractions (Collation_choice *collation, int use_contractions); -Collation_choice unicoll_enable_partial (Collation_choice collation, +void unicoll_enable_partial (Collation_choice *collation, int partial_key_enabled);
diff --git a/collation_test.c b/collation_test.c index b38816b..fe2ded1 100644 --- a/collation_test.c +++ b/collation_test.c
@@ -112,10 +112,10 @@ long int skip_count = 0; Collation_choice collation = unicoll_default (); - collation = unicoll_set_variable (collation, + unicoll_set_variable (&collation, variable_shifted ? UNICOLL_VARIABLE_SHIFTED : UNICOLL_VARIABLE_NONIGNORABLE); - /* collation = unicoll_set_normalization (collation, 0); */ + /* unicoll_set_normalization (&collation, 0); */ while (1) {