首页
社区
课程
招聘
[原创]发些个人库之string_cc.cc
发表于: 2013-10-7 13:04 5655

[原创]发些个人库之string_cc.cc

2013-10-7 13:04
5655
主要用来格式化HTTP协议的,代码写的很烂,比不上string和CString,还望被批斗。
版权问题:Author: root的意思是Linux Root账户
用法:
bool setResponse::content_type(const char* str) {
	const char* mime = http::matchMime::getInstance().find_ext_name_mime(str);
	setResponse::str_.format("Content-Type: %s\r\n", mime);
	return true;
}
bool setResponse::content_encode() {
	setResponse::str_.append("Content-Encoding: deflate\r\n");
	return true;
}
bool setResponse::content_length(size_t len) {
	setResponse::str_.format("Content-Length: %ld\r\n", len);
	return true;
}
void setResponse::cache_control() {
	setResponse::str_.append("Cache-Control: no-cache\r\n");
}
bool setResponse::transfer_encoding() {
	setResponse::str_.append("Transfer-Encoding: chunked\r\n");
	return true;
}


string_cc.h
/*
 * string_cc.h
 *
 *  Created on: Sep 30, 2013
 *      Author: root
 */

#ifndef STRING_CC_H_
#define STRING_CC_H_

#include "base_config.h"

#define min(a,b) ((a)<(b))?(a):(b)

namespace base {
std::string splitFileName(const std::string& str);
std::string splitFilePath(const std::string& str);
class string_cc {
public:
	string_cc();
	string_cc(const char* in);
	string_cc(const string_cc& in);
	~string_cc();
	string_cc& operator=(const string_cc& rhs);
	string_cc operator+(const string_cc& lhs);
	string_cc& operator+=(const string_cc& lhs);
	char& operator[](size_t n);
	void print() const;
	void append(char* str);
	void append(const char* str);
	void format(const char* format, ...);
	size_t getLength() const;
	const char* getBytes() const;
	void clear();
private:
	char *data;
};
}

#endif /* STRING_CC_H_ */


string_cc.cc
/*
 * string_cc.cc
 *
 *  Created on: Sep 30, 2013
 *      Author: root
 */

#include "string_cc.h"
#include "leakdbg_malloc-inl.h"
#include "leakdbg_debug_new.h"

namespace base {
std::string splitFileName(const std::string& str) {
	size_t found  = str.find_last_of("/\\");
	return str.substr(found + 1);
}

std::string splitFilePath(const std::string& str) {
	size_t found = str.find_last_of("/\\");
	return str.substr(0, found);
}
string_cc::string_cc() :
	data(0) {
	data = (char*) leakdbg_malloc(1);
	data[0] = '\0';
}

string_cc::string_cc(const char* in) :
	data(0) {
	data = (char*) leakdbg_malloc(std::strlen(in) + 1);
	std::strcpy(data, in);
}

string_cc::string_cc(const string_cc& in) :
	data(0) {
	data = (char*) leakdbg_malloc(in.getLength() + 1);
	std::strcpy(data, in.data);
}

string_cc::~string_cc() {
	leakdbg_delete(data);
}

string_cc& string_cc::operator=(const string_cc& rhs) {
	if (&rhs != this) {
		leakdbg_delete(data);
		data = (char*) leakdbg_malloc(rhs.getLength() + 1);
		std::strcpy(data, rhs.data);
	}
	return *this;
}

string_cc string_cc::operator+(const string_cc& lhs) {
	size_t length = (lhs.getLength() + string_cc::getLength() + 1);
	char* newData = (char*) leakdbg_malloc(length);
	memset(newData,0,length);
	std::strcpy(newData, string_cc::getBytes());
	std::strcpy(newData + string_cc::getLength(), lhs.getBytes());
	string_cc newString(newData);
	leakdbg_delete(newData);
	return newString;
}

string_cc& string_cc::operator+=(const string_cc& lhs) {
	*this = string_cc::operator+(lhs);
	return *this;
}

char& string_cc::operator[](size_t n) {
	size_t length = string_cc::getLength();
	if (n > length)
		return data[length - 1];
	else
		return data[n];
}

void string_cc::print() const {
	std::cout << data << std::endl;
}

void string_cc::append(char* str) {
	string_cc k(str);
	string_cc::operator+=(k);
}

void string_cc::append(const char* str) {
	char* str1 = const_cast<char*> (str);
	string_cc::append(str1);
}

void string_cc::format(const char* format, ...) {
	char buffer[kMaxFmtMessage] = { 0 };
	va_list pArg;
	va_start(pArg, format);
	vsnprintf(buffer, kMaxFmtMessage, format, pArg);
	buffer[kMaxFmtMessage - 1] = '\0';
	va_end(pArg);
	string_cc k(buffer);
	string_cc::operator+=(k);
}

size_t string_cc::getLength() const {
	return std::strlen(data);
}

const char* string_cc::getBytes() const {
	return data;
}

void string_cc::clear() {
	int length = string_cc::getLength();
	if (length) {
		memset(data,0,length);
	}
}
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (2)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Author: root  什么意思
2013-10-7 13:27
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
3
Linux Root账户。
2013-10-7 13:30
0
游客
登录 | 注册 方可回帖
返回
//