当前位置:网站首页>Tar source code analysis Part 2
Tar source code analysis Part 2
2022-07-04 06:36:00 【Tao song remains the same】
bitmap It's a bitmap , Essential when dealing with big data , Let's look at the implementation :
#include "util/tc_bitmap.h"
#include "util/tc_common.h"
#include <cassert>
#include <string.h>
#include <iostream>
namespace tars
{
const int TC_BitMap::BitMap::_magic_bits[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
size_t TC_BitMap::BitMap::calcMemSize(size_t iElementCount)
{
assert(iElementCount > 0);
iElementCount--;
size_t iMemSize = iElementCount/8+1;
iMemSize += sizeof(tagBitMapHead);
return iMemSize;
}
void TC_BitMap::BitMap::create(void *pAddr, size_t iSize)
{
memset((char*)pAddr, 0, iSize);
_pHead = static_cast<tagBitMapHead*>(pAddr);
_pHead->_cVersion = BM_VERSION;
_pHead->_iMemSize = iSize;
_pData = (unsigned char*)pAddr + sizeof(tagBitMapHead);
}
int TC_BitMap::BitMap::connect(void *pAddr, size_t iSize)
{
_pHead = static_cast<tagBitMapHead*>(pAddr);
if(_pHead->_cVersion != BM_VERSION)
{
return -1;
}
if(iSize != _pHead->_iMemSize)
{
return -2;
}
_pData = (unsigned char*)pAddr + sizeof(tagBitMapHead);
return 0;
}
int TC_BitMap::BitMap::get(size_t i)
{
if(i/8 >= (_pHead->_iMemSize-sizeof(tagBitMapHead)))
{
return -1;
}
unsigned char* p =_pData + i/8;
return _get_bit(*p, i%8)>0?1:0;
}
int TC_BitMap::BitMap::set(size_t i)
{
if(i/8 >= (_pHead->_iMemSize-sizeof(tagBitMapHead)))
{
return -1;
}
unsigned char* p=(unsigned char*)_pData + i/8;
*p = _set_bit(*p, i%8);
return (int)(*p)>0?1:0;
}
int TC_BitMap::BitMap::clear(size_t i)
{
if(i/8 >= (_pHead->_iMemSize-sizeof(tagBitMapHead)))
{
return -1;
}
unsigned char* p = (unsigned char*)_pData + i/8;
*p = _clear_bit(*p, i%8);
return (int)(*p)>0?1:0;
}
int TC_BitMap::BitMap::clear4all()
{
memset(_pData, 0, _pHead->_iMemSize-sizeof(tagBitMapHead));
return 0;
}
int TC_BitMap::BitMap::dump2file(const string &sFile)
{
FILE *fp = fopen(sFile.c_str(), "wb");
if(fp == NULL)
{
return -1;
}
size_t ret = fwrite((void*)_pHead, 1, _pHead->_iMemSize, fp);
fclose(fp);
if(ret == _pHead->_iMemSize)
{
return 0;
}
return -1;
}
int TC_BitMap::BitMap::load5file(const string &sFile)
{
FILE *fp = fopen(sFile.c_str(), "rb");
if(fp == NULL)
{
return -1;
}
fseek(fp, 0L, SEEK_END);
size_t fs = ftell(fp);
if(fs != _pHead->_iMemSize)
{
fclose(fp);
return -2;
}
fseek(fp, 0L, SEEK_SET);
size_t iSize = 1024*1024*10;
size_t iLen = 0;
char *pBuffer = new char[iSize];
while(true)
{
int ret = fread(pBuffer, 1, iSize, fp);
if(ret == 0)
{
break;
}
// Check version
if(iLen == 0)
{
tagBitMapHead *tmp = (tagBitMapHead*)pBuffer;
if(tmp->_cVersion != BM_VERSION)
{
fclose(fp);
delete[] pBuffer;
return -3;
}
if(tmp->_iMemSize != _pHead->_iMemSize)
{
fclose(fp);
delete[] pBuffer;
return -2;
}
}
memcpy((char*)_pHead + iLen, pBuffer, ret);
iLen += ret;
}
fclose(fp);
delete[] pBuffer;
if(iLen != _pHead->_iMemSize)
{
return -2;
}
return 0;
}
边栏推荐
- what the fuck! If you can't grab it, write it yourself. Use code to realize a Bing Dwen Dwen. It's so beautiful ~!
- Data analysis notes 09
- C # symmetric encryption (AES encryption) ciphertext results generated each time, different ideas, code sharing
- How to use multithreading to export excel under massive data? Source code attached!
- Fast power (template)
- How does apscheduler set tasks not to be concurrent (that is, execute the next task after the first one)?
- What is the sheji principle?
- Cloud native - SSH article that must be read on the cloud (commonly used for remote login to ECS)
- R统计绘图-随机森林分类分析及物种丰度差异检验组合图
- [problem record] 03 connect to MySQL database prompt: 1040 too many connections
猜你喜欢
树形dp
Arcpy 利用updatelayer函数改变图层的符号系统
Detailed explanation of common APIs for component and container containers: frame, panel, scrollpane
SQL join, left join, right join usage
How to use multithreading to export excel under massive data? Source code attached!
JSON Web Token----JWT和傳統session登錄認證對比
Practical gadget instructions
QT 获取随机颜色值设置label背景色 代码
2022 where to find enterprise e-mail and which is the security of enterprise e-mail system?
[openvino+paddle] paddle detection / OCR / SEG export based on paddle2onnx
随机推荐
[backpack DP] backpack problem
Is the insurance annuity product worth buying? Is there a hole?
Software keywords and process information intercepted by Golden Shield video player
Dimension and format of data
颈椎、脚气
Realize IIC data / instruction interaction with micro batg135
uniapp 自定义环境变量
After the festival, a large number of people change careers. Is it still time to be 30? Listen to the experience of the past people
Redis面试题集
Tsinghua University product: penalty gradient norm improves generalization of deep learning model
Reading notes of Clickhouse principle analysis and Application Practice (4)
tars源码分析之5
Background and current situation of domestic CDN acceleration
AWT introduction
27-31. Dependency transitivity, principle
QT releases multilingual International Translation
Mysql 45讲学习笔记(七)行锁
tars源码分析之1
Learn about the Internet of things protocol WiFi ZigBee Bluetooth, etc. --- WiFi and WiFi protocols start from WiFi. What do we need to know about WiFi protocol itself?
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)