comparison unique.d @ 741:3f45fca47bec

added reporter and list features
author thomask
date Sat, 12 Nov 2005 21:56:58 +0000
parents 5ba45899cddd
children
comparison
equal deleted inserted replaced
740:a14f98c3ae83 741:3f45fca47bec
4 private import std.stdio; 4 private import std.stdio;
5 private import std.path; 5 private import std.path;
6 6
7 private char[][char[]] known; 7 private char[][char[]] known;
8 private uint doppelgaenger; 8 private uint doppelgaenger;
9
10 version(reporters){
11 private import std.string;
12 private uint[char[]] reporters;
13 }
9 14
10 private char[] lastPathElem(char[] path){ 15 private char[] lastPathElem(char[] path){
11 size_t end=path.length-1; 16 size_t end=path.length-1;
12 size_t start; 17 size_t start;
13 18
40 fwritef(stdout, "%s :\n\t%s\n\t%s\n", base, file, *tmp); 45 fwritef(stdout, "%s :\n\t%s\n\t%s\n", base, file, *tmp);
41 doppelgaenger++; 46 doppelgaenger++;
42 }else{ 47 }else{
43 known[base] = file; 48 known[base] = file;
44 } 49 }
50
51 version(reporters){
52 // only works for UTF-8
53 char[] data=cast(char[]) read(file);
54
55 size_t index = find(data, "@author@");
56 if(index != index.max){
57 data = data[index + "@author@".length .. data.length];
58
59 foreach(char end; "\r\n\x00\x0A"){
60 index = find(data, end);
61 if(index != index.max){
62 data = data[0 .. index];
63 }
64 }
65
66 data = strip(data);
67
68 version(verbose){
69 if(data in reporters){
70 reporters[data]++;
71 }else{
72 reporters[data]=1;
73 }
74 }else{
75 reporters[data]=1;
76 }
77 }
78 }
45 } 79 }
46 80
47 if(isdir(file) && (base[0]!='.')){ 81 if(isdir(file) && (base[0]!='.')){
48 foreach(char[] entry; listdir(file)){ 82 foreach(char[] entry; listdir(file)){
49 add(file~std.path.sep~entry); 83 add(file~std.path.sep~entry);
70 foreach(char[] entry; known.keys.sort){ 104 foreach(char[] entry; known.keys.sort){
71 fwritef(stderr, "\t%s\n", known[entry]); 105 fwritef(stderr, "\t%s\n", known[entry]);
72 } 106 }
73 } 107 }
74 108
109 version(reporters){
110 foreach(char[] entry; reporters.keys.sort){
111 version(verbose){
112 fprintf(stderr, "%i\t%.*s\n", reporters[entry], entry);
113 }else{
114 fprintf(stderr, "%.*s\n", entry);
115 }
116 }
117 }
118
75 fwritef(stdout, "hits : %s\n", doppelgaenger); 119 fwritef(stdout, "hits : %s\n", doppelgaenger);
76 120
77 return doppelgaenger > 0; 121 return doppelgaenger > 0;
78 } 122 }