memory.h头文件封装
来源:互联网 发布:apache rewrite是什么 编辑:程序博客网 时间:2024/04/29 04:48
#ifndef _UNIX_LIB_MEMORY_HPP
#define _UNIX_LIB_MEMORY_HPP
/* author: piboye
* email : piboye@yahoo.com.cn
* date : 2006.06.2
*/
//头文件
#include<memory.h>
#include<assert.h>
namespace UNIX {
class Mem //提供内存操作,但不提供内存管理;
{
private:
void *i_start; //内存开始的位置
unsigned int i_length; //内存的长度,用unsigned 是为了保持与C接口的一致性;
public:
typedef enum {less=-1,great=1,equal=0} CmpT;//内存比较需要的结果 类型;
Mem(void *add,unsigned int len):i_start(add),i_length(len){assert(i_start&&i_length);} //add 不可以使用无效指针,但这是用户的责任;
Mem const & operator=(Mem const & rhs) // 封装了void* __cdecl memmove (void*, const void*, size_t); 如果内存可以重叠。
{
unsigned int const min=(i_length>rhs.i_length)?rhs.i_length:i_length;
memmove(i_start,rhs.i_start,min);
return *this;
}
Mem const & copy(Mem const &rhs)// 封装了 void* __cdecl memcpy (void*, const void*, size_t);内存拷贝,内存不允许重叠。
{
unsigned int min=(i_length>rhs.i_length)?rhs.i_length:i_length;
memcpy(i_start,rhs.i_start,min);
return *this;
}
Mem const & ccopy(Mem const &rhs,int ch) // 封装了 void* __cdecl memccpy (void*, const void*, int, size_t);内存拷贝,直到遇到ch字符为止。不会拷贝ch字符,也不会添加'/0'到i_start,内存上内存不允许重叠。
{
unsigned int min=(i_length>rhs.i_length)?rhs.i_length:i_length;
memccpy(i_start,rhs.i_start,ch,min);
return *this;
}
CmpT compare(Mem const& rhs) const //区分大小写的内存比较函数,封装了int __cdecl memcmp (const void*, const void*, size_t)
{
unsigned int min=(i_length>rhs.i_length)?rhs.i_length:i_length;
return static_cast<CmpT> (memcmp(i_start,rhs.i_start,min));
}
CmpT icompare(Mem const& rhs) const //忽略大小写的比较函数,封装了int __cdecl memicmp (const void*, const void*, size_t)
{
unsigned int min=(i_length>rhs.i_length)?rhs.i_length:i_length;
return static_cast<CmpT>(memicmp(i_start,rhs.i_start,min));
}
void* find(int ch) // 查找ch字符所在的位置,封装了 void* __cdecl memchr (const void*, int, size_t) 函数
{
return menchr(i_start,ch,i_length);
}
//比较运算符用的是 没有忽略大小写的 compare;
#define CMP(OP) const/
bool operator OP (Mem const & rhs) /
{ /
return compare(rhs) OP 0; /
}
CMP(<)
CMP(>)
CMP(==)
CMP(<=)
CMP(>=)
CMP(!=)
#undef CMP
Mem const & operator =(char ch) //内存初始话为 ch值,封装了 void* __cdecl memset (void*, int, size_t);
{
memset(i_start,ch,i_length);
return *this;
}
operator void *() const //转换为地址;
{
return i_start;
}
unsigned int length() const //内存大小;
{
return i_length;
}
void * address() const //返回内存地址;
{
return i_start;
}
void set(void * ptr,unsigned int len) //重置 内存块;ptr不可以使用无效指针,但这是用户责任。
{
assert((ptr&& len));
i_start=ptr;
i_length=len;
}
}; //Mem类定义结束
}// 结束Unix名字空间
#endif //文件_UNIX_LIB_MEMORY_HPP宏结束
- memory.h头文件封装
- conio.h头文件
- stdlib.h头文件
- 头文件time.h
- stdAfx.h头文件
- stdafx.h头文件
- d3dUtility.h头文件
- list.h 头文件
- 头文件errno.h
- 头文件errors.h
- unistd.h头文件
- 头文件WinDef.h
- time.h头文件
- windows.h头文件
- apue.h头文件
- ctype.h头文件
- errno.h 头文件
- 头文件pthread.h
- java集合类
- 嵌入式人才的发展方向,给从事嵌入式开发的同学指路【好文,转贴】
- cache与buffer
- 关于色彩管理的若干个问题
- SQL 语句
- memory.h头文件封装
- 一种PHP设计模式:DPT
- 为生活而挣扎
- 组播
- 我在外包公司做软件测试的日子20
- 英语之痛:好久也让老外在启蒙期就开始学习汉语
- stm 后缀名 asp ssi 调试 上传 木马
- Bulk绑定是如何提高性能的。有空再翻译吧。(from oracle)
- PHP程序与服务器端通讯的方法