{"id":16382657,"url":"https://github.com/jeremyko/cumbuffer","last_synced_at":"2026-03-08T13:35:36.897Z","repository":{"id":147497400,"uuid":"76238560","full_name":"jeremyko/CumBuffer","owner":"jeremyko","description":"c++ byte buffer class","archived":false,"fork":false,"pushed_at":"2025-02-12T03:41:40.000Z","size":51,"stargazers_count":4,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T19:12:59.403Z","etag":null,"topics":["byte-buffer"],"latest_commit_sha":null,"homepage":"https://jeremyko.github.io/2016/12/12/cumbuffer-accumulating-buffer-for-c.html","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeremyko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-12-12T08:48:56.000Z","updated_at":"2025-02-12T03:41:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"0cdceabc-9535-4dff-bf6a-6c8a3b7b73d7","html_url":"https://github.com/jeremyko/CumBuffer","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jeremyko/CumBuffer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremyko%2FCumBuffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremyko%2FCumBuffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremyko%2FCumBuffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremyko%2FCumBuffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeremyko","download_url":"https://codeload.github.com/jeremyko/CumBuffer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremyko%2FCumBuffer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272100683,"owners_count":24873442,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["byte-buffer"],"created_at":"2024-10-11T04:05:59.609Z","updated_at":"2026-03-08T13:35:36.819Z","avatar_url":"https://github.com/jeremyko.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CumBuffer #\n\n### What ###\n\nAccumulating byte buffer for c++. \n\n\n### Usage ###\nJust copy CumBuffer.h to your project.\n\nThere are three buffer usage options : \n- auto growing buffer write, read\n- fixed length buffer write, read\n- direct buffer write, read\n\n(see unit_test/test.cpp file)\n\n---------------\n***option 1 : auto growing buffer write, read***\n\nIf the buffer space runs out, it automatically doubles in size.\n\n```cpp\n#include \"CumBuffer.h\"\n\nCumBuffer buffering;\nchar data[100];\nchar dataOut[100];\n//create auto growing buffer with default 10 bytes\nASSERT_TRUE(cumbuffer::OP_RSLT_OK == buffering.InitAutoGrowing(10)); \nEXPECT_EQ  (buffering.GetCurReadPos(),     0);\nEXPECT_EQ  (buffering.GetCurWritePos(),    0);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   0);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 10);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),10);\nmemset(data,0x00, sizeof(data));\nmemcpy(data,(void*)\"abcdefghij\", 10);\nASSERT_TRUE (cumbuffer::OP_RSLT_OK ==buffering.Append(10, data));\n//---\nEXPECT_EQ  (buffering.GetCurReadPos(),     0);\nEXPECT_EQ  (buffering.GetCurWritePos(),    10);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   10);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 0);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),0);\n// |0123456789|\n// ------------\n// |abcdefghij|\n// |          w|\n// |r         |\nmemset(data,0x00, sizeof(data));\nmemcpy(data,(void*)\"xxxxx\", 5);\nASSERT_TRUE (cumbuffer::OP_RSLT_OK ==buffering.Append(5, data));\n//--- At this time, the buffer size is automatically doubled.\n// |01234567890123456789|\n// ----------------------\n// |abcdefghijxxxxx     |\n// |               w    |\n// |r                   |\nEXPECT_EQ  (buffering.GetCurReadPos(),     0);\nEXPECT_EQ  (buffering.GetCurWritePos(),    15);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   15);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 5);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),5);\n//---\nASSERT_TRUE(cumbuffer::OP_RSLT_OK == buffering.PeekData(15, dataOut));\nEXPECT_EQ(strncmp(\"abcdefghijxxxxx\", dataOut, 15 ), 0 ); \n```\n---------------\n***option 2 : fixed length buffer write, read***\n\nFixed length buffer. If there is insufficient space, an buffer full error is returned.\n\n```cpp\n#include \"CumBuffer.h\"\n\nCumBuffer buffering;\nchar data   [100];\nchar dataOut[100];\n//create buffer with fixed 9 bytes\nASSERT_TRUE(cumbuffer::OP_RSLT_OK == buffering.Init(9)); \n\n//append 3 bytes \nmemset(data, 0x00, sizeof(data));\nmemcpy(data, (void*)\"aaa\", 3);\nif(cumbuffer::OP_RSLT_OK != buffering.Append(3, data)){\n    return false;\n}\n\n//append 4 bytes\nmemset(data, 0x00, sizeof(data));\nmemcpy(data, (void*)\"abbb\", 4);\nif(cumbuffer::OP_RSLT_OK != buffering.Append(4, data)){\n    return false;\n}\nif(buffering.GetCumulatedLen()!=7) {\n    return false;\n}\n\n//get 4 bytes\nmemset(dataOut, 0x00, sizeof(dataOut));\nif(cumbuffer::OP_RSLT_OK != buffering.GetData(4, dataOut)){\n    return false;\n}\nif( strcmp(\"aaaa\", dataOut)!=0){\n    return false;\n}\n\n//get 3 bytes\nmemset(dataOut, 0x00, sizeof(dataOut));\nif(cumbuffer::OP_RSLT_OK != buffering.GetData(3, dataOut)){\n    return false;\n}\nif( strcmp(\"bbb\", dataOut)!=0){\n    return false;\n}\n```\n---------------\n***option 3 : direct buffer write, read***\n\nThis is useful if you want to minimize memory copying.\n\n```cpp\n#include \"CumBuffer.h\"\n\nCumBuffer buffering;\nASSERT_TRUE(cumbuffer::OP_RSLT_OK == buffering.Init(10)); \nEXPECT_EQ  (buffering.GetCurHeadPos(),     0);\nEXPECT_EQ  (buffering.GetCurTailPos(),     0);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   0);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 10);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),10);\n\n//direct write to buffer\nmemcpy( buffering.GetLinearAppendPtr(),(void*)\"abcde\", 5);\nbuffering.IncreaseData(5); //after write, IncreaseData should be called\n\nEXPECT_EQ  (buffering.GetCurHeadPos(),     0);\nEXPECT_EQ  (buffering.GetCurTailPos(),     5);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   5);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 5);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),5);\n\n//direct access to read buffer (for no memcpy)\nEXPECT_EQ(strncmp(\"abcde\", buffering.GetUnReadDataPtr(), 5 ), 0 ); \nbuffering.ConsumeData(5); //when buffer usage is finished, ConsumeData should be called\n\nEXPECT_EQ  (buffering.GetCurHeadPos(),     5);\nEXPECT_EQ  (buffering.GetCurTailPos(),     5);\nEXPECT_EQ  (buffering.GetCumulatedLen(),   0);\nEXPECT_EQ  (buffering.GetTotalFreeSpace(), 10);\nEXPECT_EQ  (buffering.GetLinearFreeSpace(),5); //XXX linear available space !\n    \n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremyko%2Fcumbuffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeremyko%2Fcumbuffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremyko%2Fcumbuffer/lists"}