elem->weights_idx = retval;
output_weight (struct obstack *pool, struct locale_collate_t *collate,	       struct element_t *elem){  size_t cnt;  int32_t retval;  /* Optimize the use of UNDEFINED.  */  if (elem == &collate->undefined)    /* The weights are already inserted.  */    return 0;  /* This byte can start exactly one collation element and this is     a single byte.  We can directly give the index to the weights.  */  retval = obstack_object_size (pool);  /* Construct the weight.  */  for (cnt = 0; cnt < nrules; ++cnt)    {      char buf[elem->weights[cnt].cnt * 7];      int len = 0;      int i;      for (i = 0; i < elem->weights[cnt].cnt; ++i)	/* Encode the weight value.  We do nothing for IGNORE entries.  */	if (elem->weights[cnt].w[i] != NULL)	  len += utf8_encode (&buf[len],			      elem->weights[cnt].w[i]->mborder[cnt]);      /* And add the buffer content.  */      obstack_1grow (pool, len);      obstack_grow (pool, buf, len);    }  /* Remember the index.  */  elem->weights_idx = retval;  return retval | ((elem->section->ruleidx & 0x7f) << 24);}