~ubuntu-branches/ubuntu/precise/haskell-text/precise

« back to all changes in this revision

Viewing changes to tests/benchmarks/fileread_c.c

  • Committer: Bazaar Package Importer
  • Author(s): Joachim Breitner
  • Date: 2011-04-13 11:38:29 UTC
  • mfrom: (4.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20110413113829-f4ss61ivg720e5bu
Tags: 0.11.0.6-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <unicode/ustdio.h>
 
2
#include <stdio.h>
 
3
#include <stdlib.h>
 
4
#include <string.h>
 
5
 
 
6
void lazystring(const char *name)
 
7
{
 
8
    FILE *ufp = fopen(name, "r");
 
9
    const size_t bufsize = sizeof(char) * 32 * 1024;
 
10
    char *str = malloc(bufsize);
 
11
    long len = 0;
 
12
    int32_t n;
 
13
 
 
14
    do {
 
15
        n = fread(str, sizeof(char), bufsize, ufp);
 
16
        len += n;
 
17
    } while (n > 0);
 
18
 
 
19
    printf("%ld\n", len);
 
20
}
 
21
 
 
22
void lazytext(const char *name)
 
23
{
 
24
    UFILE *ufp = u_fopen(name, "r", NULL, "UTF-8");
 
25
    const size_t bufsize = sizeof(UChar) * 32 * 1024;
 
26
    UChar *str = malloc(bufsize);
 
27
    long len = 0;
 
28
    int32_t n;
 
29
 
 
30
    do {
 
31
        n = u_file_read(str, bufsize, ufp);
 
32
        len += n;
 
33
    } while (n > 0);
 
34
 
 
35
    printf("%ld\n", len);
 
36
}
 
37
 
 
38
void text(const char *name)
 
39
{
 
40
    UFILE *ufp = u_fopen(name, "r", NULL, "UTF-8");
 
41
    FILE *fp = u_fgetfile(ufp);
 
42
    UChar *str;
 
43
    long fsize;
 
44
    int32_t n;
 
45
 
 
46
    fseek(fp, 0, SEEK_END);
 
47
    fsize = ftell(fp);
 
48
    u_frewind(ufp);
 
49
 
 
50
    str = malloc(sizeof(*str) * fsize);
 
51
 
 
52
    n = u_file_read(str, fsize, ufp);
 
53
 
 
54
    printf("%d\n", n);
 
55
}
 
56
 
 
57
void string(const char *name)
 
58
{
 
59
    FILE *fp = fopen(name, "r");
 
60
    char *str;
 
61
    long fsize;
 
62
    int32_t n;
 
63
 
 
64
    fseek(fp, 0, SEEK_END);
 
65
    fsize = ftell(fp);
 
66
    fseek(fp, 0, SEEK_SET);
 
67
 
 
68
    str = malloc(sizeof(*str) * fsize);
 
69
 
 
70
    n = fread(str, sizeof(char), fsize, fp);
 
71
 
 
72
    printf("%d\n", n);
 
73
}
 
74
 
 
75
int main(int argc, char **argv)
 
76
{
 
77
    if (argc != 3) {
 
78
        fprintf(stderr, "Usage: %s handler filename\n", argv[0]);
 
79
        exit(1);
 
80
    }
 
81
 
 
82
    if (strcmp(argv[1], "lazystring") == 0)
 
83
        lazystring(argv[2]);
 
84
    else if (strcmp(argv[1], "lazytext") == 0)
 
85
        lazytext(argv[2]);
 
86
    else if (strcmp(argv[1], "string") == 0)
 
87
        string(argv[2]);
 
88
    else if (strcmp(argv[1], "text") == 0)
 
89
        text(argv[2]);
 
90
    else {
 
91
        fprintf(stderr, "no matching handler\n");
 
92
        return 1;
 
93
    }
 
94
 
 
95
    return 0;
 
96
}