memory.h头文件封装

原创 2006年06月02日 16:28:00

#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宏结束

C++的三种封装层级

C++的三种封装层级    我们都知道C++的一个好处是封装,在类中有三个封装层次,也是访问的限制,那我们来探索一下public、protect、private这三个家伙。在定义类中的访问限制 pub...
  • github_35735591
  • github_35735591
  • 2017年08月18日 14:59
  • 305

如何封装.h和.a静态库使得头文件中不含有暴露内部实现的private成员变量

参考:C++类怎么将一些成员的声明定义都放到cpp文件中 http://bbs.csdn.net/topics/350125990实现:分为四个文件: 最终需要交给别人的只有network....
  • u010286868
  • u010286868
  • 2016年05月29日 15:38
  • 2269

Android的底层库libutils

第一部分 libutils 概述     libutils 是 Android 的底层库,这个库以 C++ 实现,它提供的 API 也是 C++ 的。 Android 的层次的 C 语言 程序和...
  • koozxcv
  • koozxcv
  • 2016年06月21日 17:13
  • 1703

内核常用头文件

1、/linux-2.6.30.4/arch/arm/include/asm/ 1.1、--->对应__raw__write()和__raw__read()等的使用 1.2、 ----> /* c...
  • kokodudu
  • kokodudu
  • 2013年12月08日 18:24
  • 6451

C语言中自带的头文件(.h)所包含的函数

由于之前没有好好学习过C语言,所以对其自带头文件所包含的内容总是不清楚,每次写代码都是盲目的#include很多.h,现在重新整理一下,发现了不少很好的函数,以方便复习查阅。 不完全统计,C语言标准库...
  • Lebronze
  • Lebronze
  • 2016年07月14日 16:08
  • 4878

OS_Memory.h

  OS_Memory.h 这个文件主要提供了内存分配的安全的宏定义和内存分配静态类。 ACE的内存宏定义ACE_HAS_NEW_NOTHROW宏定义了是否使用new的异常抛出POINTER,CONS...
  • linweixuan
  • linweixuan
  • 2006年09月09日 01:12
  • 1735

《C++ Primer (5th Edition)》笔记-Part II . The C++ Library

注:本文以《C++ Primer(英文版)》(5th Edition)为参考。 Part II. The C++ Library Chapter 8. The IO Library 8.1 针对w...
  • liql2007
  • liql2007
  • 2013年10月01日 01:50
  • 1611

Android的底层库libutils介绍

Android的底层库libutils介绍   第一部分 libutils概述   libutils是Android的底层库,这个库以C++实现,它提供的API也是C++的。Android的层次的...
  • yu741677868yu
  • yu741677868yu
  • 2016年01月26日 18:58
  • 872

<C语言>头文件封装

使用C语言编写程序的时候,我们往往会用到很多头文件,然而作为一个偷懒的程序员,我实在嫌麻烦, 所以做了一个头文件封装,把大部分用到的头文件都封装到了我自己的命名头文件中。从此,在头文件引用时我只需要#...
  • WU9797
  • WU9797
  • 2017年08月08日 20:14
  • 202

#include <memory.h>如何使用

提供了内存操作相关的一些函数及声明,如: extern void *memchr(const void *, int, size_t); extern void *memccpy(); extern ...
  • qq_32075885
  • qq_32075885
  • 2016年07月31日 08:52
  • 136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memory.h头文件封装
举报原因:
原因补充:

(最多只允许输入30个字)