Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: charset for encode filename (Re: Re: html-split について )
Osamu Okano <osamu1999@xxxxxxxxxxxx> wrote:
>>僕の方で対処しておきました。確認をお願いします。
>
>ファイル名に半角カナが含まれている場合
>化けやすいようです。
うげー、僕の方ではそこまでは面倒みきれん。…と思ったけど、大
した手間ではないので対処しておきました。確認をお願いします。
>mknmz.inの175行目の
> if ($fragment){
> codeconv::toeuc(\$fragment);
> }
>を消し忘れてます。
>不要なので消した方がよいと思います。
ん? もとから入っていませんよ。
<http://www.namazu.org/tmp/namazu-2.0.2.tar.gz> を置き直しま
した。問題がなければ明日にでも 2.0.2 として公開します。
-- Satoru Takabayashi
おまけ: quick sort の進捗状況を表示しよう
% gcc -O2 -o vqsort vqsort.c -lm
% echo 1234567 | ./vqsort
seed: 953212145
100% |oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo| 1234567
len: 1234567, progress: 1234567, cost: 31604351, n lg n: 24982171, time: 4.32
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
#include <math.h>
static int total_count = 0;
static int cost_counter = 0;
static int progress_counter = 0;
static int prev_percent = 0;
static void swap ( int *a, int i, int j );
static void print_progress_meter ( void );
static void simple_qsort ( int *a, int l, int u );
static int * generate_sample ( int len );
extern void vqsort ( int *data, int len );
int
main (int argc, char **argv)
{
int seed;
time_t tmp;
char buf[BUFSIZ];
if (argc == 2) {
/*
* seed can be specified with a command line option
* for reproducing sample integers. It makes debug easy.
*/
seed = atoi(argv[1]);
} else {
seed = time(&tmp);
}
printf("seed: %d\n", seed);
srand(seed);
while(fgets(buf, BUFSIZ, stdin))
{
int len;
int *data;
buf[strlen(buf) - 1] = '\0';
len = atoi(buf);
data = generate_sample(len);
vqsort(data, len);
free(data);
}
return 0;
}
void
vqsort(int *data, int len)
{
double elapsed;
int expected_cost;
clock_t before;
expected_cost = (int)(len * log(len) / log(2));
progress_counter = 0;
cost_counter = 0;
prev_percent = 0;
total_count = len;
before = clock();
simple_qsort(data, 0, len - 1);
elapsed = clock() - before;
printf("\n");
printf("len: %d, progress: %d, cost: %d, n lg n: %d, time: %.2f\n",
len, progress_counter, cost_counter, expected_cost,
elapsed / CLOCKS_PER_SEC);
}
static void
print_progress_meter(void)
{
static char bar[]
= "oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo";
static int scale = sizeof(bar) - 1;
int progress, percent;
progress_counter++;
progress = (double)progress_counter / total_count * scale;
percent = (double)progress_counter / total_count * 100;
if (percent > prev_percent) {
printf("\r");
printf("%3d%% |%.*s%*s| %d", percent,
progress, bar, scale - progress, "", progress_counter);
prev_percent = percent;
}
fflush(stdout);
}
static void
simple_qsort(int *a, int l, int u)
{
int i, m;
if (l >= u) {
if (l == u) {
print_progress_meter();
}
return;
}
m = l;
for (i = l + 1; i <= u; i++) {
if (a[i] < a[l]) {
swap(a, ++m, i);
}
cost_counter++;
}
swap(a, l, m);
print_progress_meter();
simple_qsort(a, l, m - 1);
simple_qsort(a, m + 1, u);
}
static void
swap(int *a, int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
static int *
generate_sample(int len)
{
int i;
int *a = malloc(len * sizeof(int));
assert(a != NULL);
for (i = 0; i < len; i++) {
a[i] = rand();
}
return a;
}