🚀 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){
if(!io.exists(path))
return [];

View File

@ -1,99 +1,18 @@
import.stl.padding;
import.stl.file;
import.stl.sort;
var source=[
"main.cpp",
"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 source=find_all_files_with_extension(".","cpp","h");
sort(source,func(a,b){return cmp(a,b)<0});
var lib=[
"fg_env.nas",
"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 lib=find_all_files_with_extension("./stl","nas");
sort(lib,func(a,b){return cmp(a,b)<0});
var testfile=[
"ascii-art.nas",
"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 testfile=find_all_files_with_extension("./test","nas");
sort(testfile,func(a,b){return cmp(a,b)<0});
var module=[
"fib.cpp",
"keyboard.cpp",
"matrix.cpp",
"nasocket.cpp",
"libfib.nas",
"libkey.nas",
"libmat.nas",
"libsock.nas"
];
var module=find_all_files_with_extension("./module","cpp","nas");
sort(module,func(a,b){return cmp(a,b)<0});
var longest=func(vec...){
var len=0;
@ -104,16 +23,35 @@ var longest=func(vec...){
}
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 cnt=0;
foreach(var i;split(c,s))
cnt+=(size(i)!=0 and i!="\r")
cnt+=!blank(i);
return cnt;
}
var column=func(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=""){
@ -125,7 +63,7 @@ var calc=func(codetype,files,path=""){
println(rightpad(files[i],padding_length),'|',
column(line_cnt),' line |',
column(semi_cnt),' semi |',
rightpad(str(int(size(s)/1024)),6),'kb | ',
leftpad(str(int(size(s)/1024)),3),' kb | ',
md5(s),' |');
bytes+=size(s);
ctx~=s;
@ -135,7 +73,7 @@ var calc=func(codetype,files,path=""){
println(rightpad("total:",padding_length),'|',
column(line),' line |',
column(semi),' semi |',
rightpad(str(int(bytes/1024)),6),'kb | ',
leftpad(str(int(bytes/1024)),3),' kb | ',
md5(ctx),' |\n');
return int(bytes/1024);
}

View File

@ -11,9 +11,42 @@ var mess=func(vec) {
}
}
var equal_join=func(n) {
# color a(int) b(str) c(int) message a(int) b(str)
# color.c = message.a
var project=func(n) {
# get(s) :- color(_, s, _).
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 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");
}
for(var i=100;i<1e7;i*=10) {
equal_join(i);
println("project");
for(var i=10;i<1e6;i*=10) {
project(i);
}
println("select");
for(var i=100;i<1e7;i*=10) {
select(i);
}

View File

@ -37,7 +37,14 @@ var s=func(){
"nasal.h"
];
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="";
foreach(var elem;filename)
@ -56,10 +63,10 @@ var textprint=func(index){
var info="";
if(os.platform()=="windows"){
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{
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){
info~=".";
@ -81,6 +88,9 @@ var indexprint=func(index){
# main
func(){
if(!size(s)){
return;
}
var info=indexprint(0);
for(var i=0;i<size(s);i+=1){
if(cnt==16){