🚀 add file::find_all_files_with_extension

This commit is contained in:
ValKmjolnir 2023-02-02 21:24:21 +08:00
parent 1259b43389
commit e454b315fc
4 changed files with 113 additions and 108 deletions

View File

@ -25,6 +25,25 @@ var file={
} }
}; };
var find_all_files_with_extension=func(path,extensions...){
var in_vec=func(ext){
foreach(var i;extensions){
if(ext==i){
return 1;
}
}
return 0;
}
var res=[];
foreach(var f;find_all_files(path)){
var tmp=split('.',f);
if(size(tmp)>1 and in_vec(tmp[-1])){
append(res,f);
}
}
return res;
}
var find_all_files=func(path){ var find_all_files=func(path){
if(!io.exists(path)) if(!io.exists(path))
return []; return [];

View File

@ -1,99 +1,18 @@
import.stl.padding; import.stl.padding;
import.stl.file;
import.stl.sort;
var source=[ var source=find_all_files_with_extension(".","cpp","h");
"main.cpp", sort(source,func(a,b){return cmp(a,b)<0});
"nasal_ast.h",
"nasal_builtin.h",
"nasal_codegen.h",
"nasal_dbg.h",
"nasal_err.h",
"nasal_gc.h",
"nasal_import.h",
"nasal_lexer.h",
"nasal_opt.h",
"nasal_parse.h",
"nasal_vm.h",
"nasal.h"
];
var lib=[ var lib=find_all_files_with_extension("./stl","nas");
"fg_env.nas", sort(lib,func(a,b){return cmp(a,b)<0});
"file.nas",
"json.nas",
"lib.nas",
"list.nas",
"log.nas",
"module.nas",
"padding.nas",
"process_bar.nas",
"queue.nas",
"result.nas",
"sort.nas",
"stack.nas",
"string.nas"
];
var testfile=[ var testfile=find_all_files_with_extension("./test","nas");
"ascii-art.nas", sort(testfile,func(a,b){return cmp(a,b)<0});
"auto_crash.nas",
"bf.nas",
"bfconvertor.nas",
"bfs.nas",
"bigloop.nas",
"bp.nas",
"calc.nas",
"choice.nas",
"class.nas",
"console3D.nas",
"coroutine.nas",
"datalog.nas",
"diff.nas",
"donuts.nas",
"exception.nas",
"fib.nas",
"filesystem.nas",
"hexdump.nas",
"httptest.nas",
"json.nas",
"leetcode1319.nas",
"lexer.nas",
"life.nas",
"loop.nas",
"mandel.nas",
"mandelbrot.nas",
"mcpu.nas",
"md5.nas",
"md5compare.nas",
"module_test.nas",
"nasal_test.nas",
"occupation.nas",
"pi.nas",
"ppmgen.nas",
"prime.nas",
"qrcode.nas",
"quick_sort.nas",
"scalar.nas",
"snake.nas",
"tetris.nas",
"trait.nas",
"turingmachine.nas",
"utf8chk.nas",
"watchdog.nas",
"wavecollapse.nas",
"word_collector.nas",
"ycombinator.nas"
];
var module=[ var module=find_all_files_with_extension("./module","cpp","nas");
"fib.cpp", sort(module,func(a,b){return cmp(a,b)<0});
"keyboard.cpp",
"matrix.cpp",
"nasocket.cpp",
"libfib.nas",
"libkey.nas",
"libmat.nas",
"libsock.nas"
];
var longest=func(vec...){ var longest=func(vec...){
var len=0; var len=0;
@ -104,16 +23,35 @@ var longest=func(vec...){
} }
var padding_length=longest(source,lib,testfile,module); var padding_length=longest(source,lib,testfile,module);
var blank=func(s){
if(!size(s)){
return 1;
}
var space=[" "[0],"\n"[0],"\t"[0],"\r"[0]];
for(var i=0;i<size(s);i+=1){
var flag=0;
foreach(var j;space){
if(s[i]==j){
flag=1;
}
}
if(flag){
return 0;
}
}
return 1;
}
var count=func(s,c){ var count=func(s,c){
var cnt=0; var cnt=0;
foreach(var i;split(c,s)) foreach(var i;split(c,s))
cnt+=(size(i)!=0 and i!="\r") cnt+=!blank(i);
return cnt; return cnt;
} }
var column=func(number){ var column=func(number){
number=number>=1000?substr(str(number/1000),0,3)~'k':str(number); number=number>=1000?substr(str(number/1000),0,3)~'k':str(number);
return rightpad(number,6); return leftpad(number,6);
} }
var calc=func(codetype,files,path=""){ var calc=func(codetype,files,path=""){
@ -122,20 +60,20 @@ var calc=func(codetype,files,path=""){
forindex(var i;files){ forindex(var i;files){
var s=io.exists(path~files[i])?io.fin(path~files[i]):""; var s=io.exists(path~files[i])?io.fin(path~files[i]):"";
(line_cnt,semi_cnt)=(count(s,'\n'),count(s,';')); (line_cnt,semi_cnt)=(count(s,'\n'),count(s,';'));
println(rightpad(files[i],padding_length),'| ', println(rightpad(files[i],padding_length),'|',
column(line_cnt),'line | ', column(line_cnt),' line |',
column(semi_cnt),'semi | ', column(semi_cnt),' semi |',
rightpad(str(int(size(s)/1024)),6),'kb | ', leftpad(str(int(size(s)/1024)),3),' kb | ',
md5(s),' |'); md5(s),' |');
bytes+=size(s); bytes+=size(s);
ctx~=s; ctx~=s;
line+=line_cnt; line+=line_cnt;
semi+=semi_cnt; semi+=semi_cnt;
} }
println(rightpad("total:",padding_length),'| ', println(rightpad("total:",padding_length),'|',
column(line),'line | ', column(line),' line |',
column(semi),'semi | ', column(semi),' semi |',
rightpad(str(int(bytes/1024)),6),'kb | ', leftpad(str(int(bytes/1024)),3),' kb | ',
md5(ctx),' |\n'); md5(ctx),' |\n');
return int(bytes/1024); return int(bytes/1024);
} }

View File

@ -11,9 +11,42 @@ var mess=func(vec) {
} }
} }
var equal_join=func(n) { var project=func(n) {
# color a(int) b(str) c(int) message a(int) b(str) # get(s) :- color(_, s, _).
# color.c = message.a
var ts=maketimestamp();
var bar=process_bar.high_resolution_bar(40);
var color=[];
setsize(color,n);
var last_step=0;
ts.stamp();
for(var i=0;i<n;i+=1) {
color[i]=[i,"color "~i,i+n*10];
# generate process bar, every 0.2%
if((i-last_step)/n>1/500) {
last_step=i;
print(" ",bar.bar((i+1)/n)~" \r");
}
}
print(" ",bar.bar(1)~" ",rightpad(str(ts.elapsedMSec()/1000),5)," s | ");
mess(color);
ts.stamp();
var cnt=0;
foreach(var c;color) {
var data=c[2];
cnt+=1;
}
println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s");
}
var select=func(n) {
# get(s) :- color(_, _, x), message(x, s).
var ts=maketimestamp(); var ts=maketimestamp();
var bar=process_bar.high_resolution_bar(40); var bar=process_bar.high_resolution_bar(40);
@ -64,6 +97,11 @@ var equal_join=func(n) {
println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s"); println(rightpad(str(cnt),7)," in ",ts.elapsedMSec()/1000," s");
} }
println("project");
for(var i=10;i<1e6;i*=10) {
project(i);
}
println("select");
for(var i=100;i<1e7;i*=10) { for(var i=100;i<1e7;i*=10) {
equal_join(i); select(i);
} }

View File

@ -37,7 +37,14 @@ var s=func(){
"nasal.h" "nasal.h"
]; ];
if(size(runtime.argv())!=0){ if(size(runtime.argv())!=0){
return io.fin(runtime.argv()[0]); var argv=runtime.argv();
if(argv[0]=="-h" or argv[0]=="--h"){
println("usage:");
println(" nasal hexdump.nas | get all files' hexdump.");
println(" nasal hexdump.nas [file] | get single file's hexdump.");
return "";
}
return io.fin(argv[0]);
} }
var ret=""; var ret="";
foreach(var elem;filename) foreach(var elem;filename)
@ -56,10 +63,10 @@ var textprint=func(index){
var info=""; var info="";
if(os.platform()=="windows"){ if(os.platform()=="windows"){
for(var i=index-cnt;i<index;i+=1) for(var i=index-cnt;i<index;i+=1)
info~=(s[i]<32 or s[i]>=128)?".":chr(s[i]); info~=(s[i]<32 or s[i]>=127)?".":chr(s[i]);
}else{ }else{
for(var i=index-cnt;i<index;i+=1) for(var i=index-cnt;i<index;i+=1)
info~=(0<=s[i] and s[i]<32)?".":chr(s[i]); info~=(s[i]<32 or s[i]==127)?".":chr(s[i]);
} }
for(var i=cnt;i<16;i+=1){ for(var i=cnt;i<16;i+=1){
info~="."; info~=".";
@ -81,6 +88,9 @@ var indexprint=func(index){
# main # main
func(){ func(){
if(!size(s)){
return;
}
var info=indexprint(0); var info=indexprint(0);
for(var i=0;i<size(s);i+=1){ for(var i=0;i<size(s);i+=1){
if(cnt==16){ if(cnt==16){