当前位置:网站首页>tars源码分析之25
tars源码分析之25
2022-07-20 22:46:00 【涛歌依旧】
打包怎么打,看完就明白了:
#include "util/tc_pack.h"
#include <iostream>
#include <string.h>
namespace tars
{
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (bool t)
{
_buffer.append(sizeof(bool), (char)t);
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (char t)
{
_buffer.append(sizeof(char), (char)t);
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned char t)
{
(*this) << (char)t;
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (short t)
{
t = htons(t);
_buffer.append((const char *)&t, sizeof(t));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned short t)
{
(*this) << (short)t;
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (int t)
{
t = htonl(t);
_buffer.append((const char *)&t, sizeof(int));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned int t)
{
(*this) << (int)t;
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (long t)
{
if(sizeof(long) == 8)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
}
else
{
t = htonl(t);
}
_buffer.append((const char *)&t, sizeof(long));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned long t)
{
if(sizeof(unsigned long) == 8)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
}
else
{
t = htonl(t);
}
_buffer.append((const char *)&t, sizeof(unsigned long));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (long long t)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
_buffer.append((const char *)&t, sizeof(long long));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned long long t)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
_buffer.append((const char *)&t, sizeof(unsigned long long));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (float t)
{
_buffer.append((const char *)&t, sizeof(float));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (double t)
{
_buffer.append((const char *)&t, sizeof(double));
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (const char *sBuffer)
{
_buffer.append(sBuffer, strlen(sBuffer) + 1);
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (const string& sBuffer)
{
uint32_t len = (uint32_t)sBuffer.length();
if(len < 255)
{
unsigned char c = (unsigned char)len;
(*this) << c;
}
else
{
unsigned char c = 255;
(*this) << c;
(*this) << len;
}
_buffer.append(sBuffer);
return *this;
}
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (const TC_PackIn& pi)
{
_buffer.append(pi.topacket());
return (*this);
}
/************************************************************************/
bool TC_PackOut::isEnd()
{
if(_pos >= _length)
{
return true;
}
return false;
}
TC_PackOut& TC_PackOut::operator >> (bool &t)
{
size_t len = sizeof(bool);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read bool error.");
}
memcpy(&t, _pbuffer + _pos, len);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (char &t)
{
size_t len = sizeof(char);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read char error.");
}
memcpy(&t, _pbuffer + _pos, len);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (unsigned char &t)
{
size_t len = sizeof(unsigned char);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read unsigned char error.");
}
memcpy(&t, _pbuffer + _pos, len);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (short &t)
{
size_t len = sizeof(short);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read short error.");
}
memcpy(&t, _pbuffer + _pos, len);
t = ntohs(t);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (unsigned short &t)
{
size_t len = sizeof(unsigned short);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read unsigned short error.");
}
memcpy(&t, _pbuffer + _pos, len);
t = ntohs(t);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (int &t)
{
size_t len = sizeof(int);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read int error.");
}
memcpy(&t, _pbuffer + _pos, len);
t = ntohl(t);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (unsigned int &t)
{
size_t len = sizeof(unsigned int);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read unsigned int error.");
}
memcpy(&t, _pbuffer + _pos, len);
t = ntohl(t);
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (long &t)
{
size_t len = sizeof(long);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read long error.");
}
memcpy(&t, _pbuffer + _pos, len);
if(sizeof(unsigned long) == 8)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
}
else
{
t = ntohl(t);
}
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (unsigned long &t)
{
size_t len = sizeof(unsigned long);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read long error.");
}
memcpy(&t, _pbuffer + _pos, len);
if(sizeof(unsigned long) == 8)
{
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
}
else
{
t = ntohl(t);
}
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (long long &t)
{
size_t len = sizeof(long long);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read long long error.");
}
memcpy(&t, _pbuffer + _pos, len);
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (unsigned long long &t)
{
size_t len = sizeof(unsigned long long);
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read long long error.");
}
memcpy(&t, _pbuffer + _pos, len);
#if __BYTE_ORDER == __LITTLE_ENDIAN
t = __bswap_64(t);
#endif
_pos += len;
return *this;
}
TC_PackOut& TC_PackOut::operator >> (float &f)
{
if(_pos + sizeof(float) > _length)
{
throw TC_PackOut_Exception("TC_PackOut read float error.");
}
memcpy(&f, _pbuffer + _pos, sizeof(float));
_pos += sizeof(float);
return *this;
}
TC_PackOut& TC_PackOut::operator >> (double &f)
{
if(_pos + sizeof(double) > _length)
{
throw TC_PackOut_Exception("TC_PackOut read double error.");
}
memcpy(&f, _pbuffer + _pos, sizeof(double));
_pos += sizeof(double);
return *this;
}
TC_PackOut& TC_PackOut::operator >> (char *sBuffer)
{
strcpy(sBuffer, _pbuffer + _pos);
_pos += strlen(sBuffer) + 1;
if(_pos > _length)
{
throw TC_PackOut_Exception("TC_PackOut read zero string error.");
}
return *this;
}
TC_PackOut& TC_PackOut::operator >> (string& sBuffer)
{
uint32_t len = 0;
unsigned char c;
(*this) >> c;
if(c == 255)
{
(*this) >> len;
}
else
{
len = c;
}
if(_pos + len > _length)
{
throw TC_PackOut_Exception("TC_PackOut read string error.");
}
sBuffer.assign((const char*)(_pbuffer + _pos), len);
_pos += len;
return *this;
}
}
边栏推荐
- 项目经理如何做好“老板”项目
- GameFramework——前言
- 入门软件测试小知识点
- When using mysql, please make good use of JSON
- [Baoyan] - oral English skills in Baoyan summer camp
- Summary of internal keywords in C #
- 经典自动化面试题
- How to learn automated testing from scratch?
- Ython + selenium web automation 2022 updated tutorial automated testing software test crawler - Notes blog collation
- 4.76 million. Targeted procurement of Bank of Hebei: F5 load balancing (10 sets)
猜你喜欢
Cloud native observability tracking technology in the eyes of Baidu engineers
477. 汉明距离总和
入门软件测试小知识点
554. 砖墙
740. 删除并获得点数
我的sql没问题为什么还是这么慢|MySQL加锁规则
Acme Automation - free SSL certificate application and automatic renewal
How to do well in test management?
8 keys to successful penetration testing
Shell 脚本特殊变量列表
随机推荐
It centralized purchase of Postal Savings Bank of China: servers, arrays, switches, routers, firewalls, etc
Cloud native observability tracking technology in the eyes of Baidu engineers
王者荣耀商城异地多活架构设计(架构实战营 模块七作业)
K8s drainage error summary (ignoring daemonset management pod, MySQL Cluster drainage error, Mongo cluster drainage error)
Codeforces Round #808 (Div. 2)
1744. Can you eat your favorite candy on your favorite day?
Two hackers gained 2million illegal profits five days after they were released from prison: arrested
477. 汉明距离总和
Kube controller manager principle
mysql数据库查询好慢,除了索引,还能因为什么?
This PIP uses a cheat sheet, how complete it must be!
[MySQL] simple installation in CentOS 7
Web接口资源是如何保存起来的?
联邦学习: 联邦场景下的时空数据挖掘
第06篇:池化技术
2022-07-20 第五小组 修身课 学习笔记(every day)
1723. Minimum time to complete all work
這份 pip 使用小抄,要有全有多全!
初识无影云电脑
How to learn automated testing from scratch?