🚀 add file::find_all_files_with_extension
This commit is contained in:
parent
1259b43389
commit
e454b315fc
19
stl/file.nas
19
stl/file.nas
|
@ -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 [];
|
||||
|
|
140
test/calc.nas
140
test/calc.nas
|
@ -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=""){
|
||||
|
@ -122,20 +60,20 @@ var calc=func(codetype,files,path=""){
|
|||
forindex(var i;files){
|
||||
var s=io.exists(path~files[i])?io.fin(path~files[i]):"";
|
||||
(line_cnt,semi_cnt)=(count(s,'\n'),count(s,';'));
|
||||
println(rightpad(files[i],padding_length),'| ',
|
||||
column(line_cnt),'line | ',
|
||||
column(semi_cnt),'semi | ',
|
||||
rightpad(str(int(size(s)/1024)),6),'kb | ',
|
||||
println(rightpad(files[i],padding_length),'|',
|
||||
column(line_cnt),' line |',
|
||||
column(semi_cnt),' semi |',
|
||||
leftpad(str(int(size(s)/1024)),3),' kb | ',
|
||||
md5(s),' |');
|
||||
bytes+=size(s);
|
||||
ctx~=s;
|
||||
line+=line_cnt;
|
||||
semi+=semi_cnt;
|
||||
}
|
||||
println(rightpad("total:",padding_length),'| ',
|
||||
column(line),'line | ',
|
||||
column(semi),'semi | ',
|
||||
rightpad(str(int(bytes/1024)),6),'kb | ',
|
||||
println(rightpad("total:",padding_length),'|',
|
||||
column(line),' line |',
|
||||
column(semi),' semi |',
|
||||
leftpad(str(int(bytes/1024)),3),' kb | ',
|
||||
md5(ctx),' |\n');
|
||||
return int(bytes/1024);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue