mirror of
https://github.com/dvorka/hstr.git
synced 2025-01-06 15:08:13 +08:00
Added assert to protect radix and set and thus fixed #21.
This commit is contained in:
parent
4cb887b0d4
commit
80c2cba194
2 changed files with 8 additions and 4 deletions
|
@ -8,6 +8,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
#include "include/hstr_history.h"
|
#include "include/hstr_history.h"
|
||||||
|
|
||||||
|
@ -30,7 +31,11 @@ static const char *commandBlacklist[] = {"ls", "pwd", "cd", "hh", "mc"};
|
||||||
#define DEBUG_RADIXSORT()
|
#define DEBUG_RADIXSORT()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HISTORY_RANKING_FUNCTION(RANK,NEWOCCURENCEORDER,LNG) RANK+NEWOCCURENCEORDER/10+LNG
|
unsigned history_ranking_function(unsigned rank, int newOccurenceOrder, size_t length) {
|
||||||
|
long metrics=rank+newOccurenceOrder/10+length;
|
||||||
|
assert(metrics<UINT_MAX);
|
||||||
|
return metrics;
|
||||||
|
}
|
||||||
|
|
||||||
char *get_history_file_name()
|
char *get_history_file_name()
|
||||||
{
|
{
|
||||||
|
@ -96,7 +101,7 @@ HistoryItems *get_prioritized_history()
|
||||||
}
|
}
|
||||||
if((r=hashset_get(&rankmap, line))==NULL) {
|
if((r=hashset_get(&rankmap, line))==NULL) {
|
||||||
r=malloc(sizeof(RankedHistoryItem));
|
r=malloc(sizeof(RankedHistoryItem));
|
||||||
r->rank=HISTORY_RANKING_FUNCTION(0, i, strlen(line));
|
r->rank=history_ranking_function(0, i, strlen(line));
|
||||||
r->item=historyList[i]->line;
|
r->item=historyList[i]->line;
|
||||||
|
|
||||||
hashset_put(&rankmap, line, r);
|
hashset_put(&rankmap, line, r);
|
||||||
|
@ -112,7 +117,7 @@ HistoryItems *get_prioritized_history()
|
||||||
assert(radixItem);
|
assert(radixItem);
|
||||||
|
|
||||||
if(radixItem) {
|
if(radixItem) {
|
||||||
r->rank=HISTORY_RANKING_FUNCTION(r->rank, i, strlen(line));
|
r->rank=history_ranking_function(r->rank, i, strlen(line));
|
||||||
radixItem->key=r->rank;
|
radixItem->key=r->rank;
|
||||||
radixsort_add(&rs, radixItem);
|
radixsort_add(&rs, radixItem);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,6 @@ void radixsort_add(RadixSorter *rs, RadixItem *item)
|
||||||
unsigned topIndex = GET_TOP_INDEX(item->key);
|
unsigned topIndex = GET_TOP_INDEX(item->key);
|
||||||
unsigned lowIndex = GET_LOW_INDEX(item->key);
|
unsigned lowIndex = GET_LOW_INDEX(item->key);
|
||||||
|
|
||||||
|
|
||||||
if(!rs->topDigits[topIndex]) {
|
if(!rs->topDigits[topIndex]) {
|
||||||
rs->topDigits[topIndex]=radixsort_get_slot(rs, topIndex);
|
rs->topDigits[topIndex]=radixsort_get_slot(rs, topIndex);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue