Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
Palindrome.txt98 linesDownload Raw Back to MultiCore
1 2#define BORDER_CHARS    13 4U8 *buf;5I64 size,mp_not_done_flags;6CDoc *doc;7 8U0 PDNormalize()9{10  U8 *r=MAlloc(size+2*BORDER_CHARS),11        *src=buf,*dst=r;12  I64 ch;13  *dst++='['; //Border14  while (size--) {15    ch=*src++;16    if ('a'<=ch<='z') //lower is most common so do first17      *dst++=ch;18    else if ('A'<=ch<='Z')19      *dst++=ch+'a'-'A'; //Convert to lower20  }21  *dst++=']'; //Border22  Free(buf);23  buf=r;24  size=dst-r-2*BORDER_CHARS;25}26 27U0 PDAnswer(U8 *a,I64 len)28{29  DocLock(doc);30  a-=(len-1)/2;31  DocPrint(doc,"CPU%02X Len:%2d ",Gs->num,len);32  while (len--)33    DocPrint(doc,"%C",*a++); //%C is toupper char34  DocPrint(doc,"\n");35  DocUnlock(doc);36}37 38U0 MPPalindrome(I64 dummy=0)39{40  no_warn dummy;41  U8 *src=buf+BORDER_CHARS+size*Gs->num/mp_cnt,42        *f,*b;43  I64 len,best=0,44        my_size=(size+mp_cnt-1)/mp_cnt;45  while (my_size--) {46 47    //Odd48    f=src+1;49    b=src-1;50    while (*f==*b) {51      f++;52      b--;53    }54    len=f-b+1-2;55    if (len>best) {56      best=len;57      PDAnswer(src,len);58    }59 60    //Even61    f=src+1;62    b=src;63    while (*f==*b) {64      f++;65      b--;66    }67    len=f-b+1-2;68    if (len>best) {69      best=len;70      PDAnswer(src,len);71    }72 73    src++;74  }75  LBtr(&mp_not_done_flags,Gs->num);76}77 78U0 Palindrome(U8 *filename)79{80  I64 i;81  F64 t0=tS;82 83  buf=FileRead(filename,&size);84  PDNormalize;85 86  doc=DocPut;87  mp_not_done_flags=1<<mp_cnt-1;88  for (i=0;i<mp_cnt;i++)89    JobQue(&MPPalindrome,NULL,i);90  while (mp_not_done_flags)91    Yield;92 93  Free(buf);94  "Time:%9.5f\n",tS-t0;95}96 97Palindrome(BIBLE_FILENAME);98