From f281c71f756c6189dceb9fa52d66077708014efb Mon Sep 17 00:00:00 2001 From: lolo859 Date: Thu, 5 Feb 2026 21:18:21 +0100 Subject: [PATCH] first archive version working, working on new bitstream format --- all.tar.gz | Bin 24724 -> 5964 bytes ccc.cpp | 305 ++++++++++++++++++++++++++++------------------------- test.ccc | Bin 0 -> 9449 bytes 3 files changed, 161 insertions(+), 144 deletions(-) create mode 100644 test.ccc diff --git a/all.tar.gz b/all.tar.gz index a358a4dd88221d017b0632f997c0397f5dd5e476..53f5816d9c401378d067f312d5059dd34fab1bf4 100644 GIT binary patch literal 5964 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 literal 24724 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 +#include #include #include #include @@ -166,26 +168,15 @@ struct symbol { string name; int score; }; -struct node { - map children; - int token_id=-1; -}; -void insert(node* root,string str,int id) { - node* curr=root; - for (char c:str) { - if (curr->children.find(c)==curr->children.end()) { - curr->children[c]=new node(); - } - curr=curr->children[c]; - } - curr->token_id=id; -} -struct processed_file { - string path; - uint32_t payload_size; - vector payload; - bool is_payload_compressed; +#pragma pack(push,1) +struct header { + uint8_t sig[3]; + uint8_t flags; + size_t size_rec_table; + size_t entry_count; + size_t size_payload; }; +#pragma pack(pop) map> all_tokens; map rec_map; vector rec_list; @@ -310,6 +301,7 @@ vector process_file_nodes(vector *nodes,string code,vecto vector out; for (int i=0;isize();i++) { string type=string(ts_node_type(nodes->at(i))); + string supertext=code.substr(ts_node_start_byte(nodes->at(i)),ts_node_end_byte(nodes->at(i))-ts_node_start_byte(nodes->at(i))); if (type=="#if") { CCC_ADD_COMPOMENT(out,CCC_PREPROCESSOR_CONDITIONAL_IF); print_debug("if"); @@ -349,7 +341,7 @@ vector process_file_nodes(vector *nodes,string code,vecto } else if (type=="#warning") { CCC_ADD_COMPOMENT(out,CCC_PREPROCESSOR_OTHER_WARNING); print_debug("warning"); - } else if (type=="#pragma") { + } else if (type=="#pragma" || (type=="preproc_directive" && supertext=="#pragma")) { CCC_ADD_COMPOMENT(out,CCC_PREPROCESSOR_OTHER_PRAGMA); print_debug("pragma"); } else if (type=="#line") { @@ -553,131 +545,156 @@ int main(int argc,char **argv) { files_content.push_back(code); } construct_rec_table(files_content,files); - vector files_archive; + vector files_archive; + vector payloads_size; + vector payloads_start; for (int i=0;i payload_compressed; - payload_compressed.resize(payload_bytes.size()+payload_bytes.size()/3+128); - lzma_stream strm=LZMA_STREAM_INIT; - if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { - cout<<"Error: couldn't initialize LZMA compressor for file: "<=original_size) { - pfile.is_payload_compressed=false; - pfile.payload=payload_bytes; - pfile.payload_size=original_size; - } else { - pfile.is_payload_compressed=true; - pfile.payload=payload_compressed; - pfile.payload_size=compressed_size; - } + auto payload_bytes=process_file_nodes(&(all_tokens.at(files[i])),files_content[i],rec_list); + payloads_size.push_back(payload_bytes.size()); + payloads_start.push_back(files_archive.size()); + CCC_ADD_COMPOMENT(files_archive,payload_bytes); cout< rec_table; - // for (int i=0;i rec_table_compressed; - // rec_table_compressed.resize(rec_table.size()+rec_table.size()/3+128); - // lzma_stream strm=LZMA_STREAM_INIT; - // if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { - // cout<<"Error: couldn't initialize LZMA compressor."< out; - // out.push_back('C'); - // out.push_back(compressed_size>=original_size?'C':'c'); - // vector payload_bytes; - // unsigned char current=0; - // size_t bit_index=0; - // for (bool b:payload) { - // current|=(b<<(7-bit_index)); - // bit_index++; - // if (bit_index==8) { - // payload_bytes.push_back(current); - // current=0; - // bit_index=0; - // } - // } - // if (bit_index!=0) { - // payload_bytes.push_back(current); - // } - // vector payload_compressed; - // payload_compressed.resize(payload_bytes.size()+payload_bytes.size()/3+128); - // strm=LZMA_STREAM_INIT; - // if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { - // cout<<"Error: couldn't initialize LZMA compressor."<=original_size1?'C':'c'); - // if (compressed_size>=original_size) { - // CCC_ADD_COMPOMENT(out,rec_table); - // } else { - // CCC_ADD_COMPOMENT(out,rec_table_compressed); - // } - // if (compressed_size1>=original_size1) { - // CCC_ADD_COMPOMENT(out,payload_bytes); - // } else { - // CCC_ADD_COMPOMENT(out,payload_compressed); - // } - // ofstream fileout("test.ccc",ios::binary); - // if (!fileout) { - // cout<<"Error: couldn't open output file."<(out.data()),out.size()); - // fileout.close(); - // return 0; + vector payload_compressed; + payload_compressed.resize(files_archive.size()+files_archive.size()/3+128); + lzma_stream strm=LZMA_STREAM_INIT; + if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { + cout<<"Error: couldn't initialize LZMA compressor for file archive."<=original_size) { + flags&= ~(0b00000001); + payload_total_size=original_size; + } else { + flags|=0b00000001; + payload_total_size=compressed_size; + } + vector rec_table; + for (int i=0;i rec_table_compressed; + rec_table_compressed.resize(rec_table.size()+rec_table.size()/3+128); + strm=LZMA_STREAM_INIT; + if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { + cout<<"Error: couldn't initialize LZMA compressor for reccurences table."<=original_size) { + flags&= ~(0b00000010); + rec_table_total_size=original_size; + } else { + flags|=0b00000010; + rec_table_total_size=compressed_size; + } + vector files_table; + for (int i=0;i files_table_compressed; + files_table_compressed.resize(files_table.size()+files_table.size()/3+128); + strm=LZMA_STREAM_INIT; + if (lzma_easy_encoder(&strm,9,LZMA_CHECK_CRC64)!=LZMA_OK) { + cout<<"Error: couldn't initialize LZMA compressor for files table."<=original_size) { + flags&= ~(0b00000100); + files_table_total_size=original_size; + } else { + flags|=0b00000100; + files_table_total_size=compressed_size; + } + header head; + head.sig[0]='C'; + head.sig[1]='C'; + head.sig[2]='C'; + head.flags=flags; + head.size_payload=payload_total_size; + head.size_rec_table=rec_table_total_size; + head.entry_count=files.size(); + vector out; + for (int i=0;i(out.data()),out.size()); + fileout.close(); + return 0; } diff --git a/test.ccc b/test.ccc new file mode 100644 index 0000000000000000000000000000000000000000..d33b2bf9322f7f418f617b2129e41ecb7d39cc5f GIT binary patch literal 9449 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
eE}qj3dOlDgXarux1@2~E43 z`UsM#Ix26wpv05qo?$xzp5OTleO47aS`vS2f5(zYQD}mq(3Y7>Y%?TS%*c57pY2~% zXe94JJA(!C$!y}rW(Nh|24YEie2G0r3UUar^-yUGK{m&v?OVGC^TO;nKWn9~BpNWS zhtxAo>iX43x?p=t`o8F~Lr=yEW)*f5{ dfXY^eMrr%4Spe9Gz?LQez*DPS`~N=0{|B5_6*B+; literal 0 HcmV?d00001