博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己实现几个基本函数
阅读量:7057 次
发布时间:2019-06-28

本文共 2593 字,大约阅读时间需要 8 分钟。

void _Assert(char* strFile, unsigned line){    fflush(stdout);    fprintf(stderr, "\nAssert Failed %s, line:%u\n", strFile, line);    fflush(stderr);    abort();}#ifdef _DEBUG#define MY_ASSERT(f) \    if (f)          \    NULL;           \    else            \    _Assert(__FILE__, __LINE__);#else#define MY_ASSERT(f)   NULL#endifvoid* my_memcpy(void* pvTo, void* pvFrom, size_t size){    byte* pbTo = (byte*)pvTo;    byte* pbFrom = (byte*)pvFrom;    MY_ASSERT(pbTo != NULL && pbFrom != NULL);    MY_ASSERT(pbTo >= pbFrom + size || pbFrom >= pbTo + size);    while(size-- > 0)        *pbTo++ = *pbFrom++;    return (void*)pbTo;}char* my_strdup(char* str){    MY_ASSERT(str != NULL);    char* strNew = (char*)malloc(strlen(str) + 1);    if (strNew == NULL)        return NULL;    //strcpy(str1,str2)时,str2会把末尾的'\0’也给复制到str1中且覆盖一个str1字符;    strcpy(strNew, str);    return strNew;}void* my_memset1(void* pv, byte b, size_t size){    MY_ASSERT(pv != NULL);    byte* pb = (byte*)pv;    while (size-- > 0)        *pb++ = b;    return pv;}// 假定long占4字节,一字节为8位long* long_fill(void* pv, long l, size_t size){    MY_ASSERT(pv != NULL);    long* pl = (long*)pv;    while (size > 0)    {        *pl = l;        size -= 4;        pl += 4;    }    return (long*)pv;}size_t threshold = 4;void* my_memset2(void* pv, byte b, size_t size){    byte* pb = (byte*)pv;    if (size > threshold)    {        unsigned long l;        l = (b << 8) | b;        l = (l << 16) | l;        pb = (byte*)long_fill((long*)pb, l, size / 4);        size = size % 4;    }    while (size -- >0)        *(pb++) = b;    return pv;}

 

struct Prim{    int pos;    int index;};Prim vecPrim[N];bool binarySearch(int pos, int& index){    int first = 0;    int last = N - 1;    int mid = 0;    while (first <= last)    {        mid = (first + last) / 2;        if (vecPrim[mid].pos < pos)            first = mid + 1;        else if (vecPrim[mid].pos > pos)            last = mid - 1;        else        {            index = vecPrim[mid].pos;            return true;        }    }    return false;}

 

template
int highestBitSet(T input){ register int result; assert(input); // zero is invalid input! assert(sizeof(T)==4); // 32bit data only! _asm bsr eax, input _asm mov result, eax return result;}template
T nearestPowerOfTwo(T input){ // the least possible power-of-two value is 1 if (input <= 1) return 1; int highestBit = highestBitSet(input); int roundingTest = input & (1<< (highestBit-1)); if (roundingTest) ++highestBit; return static_cast
(1<

转载地址:http://afgol.baihongyu.com/

你可能感兴趣的文章
C++中const用法总结(转)
查看>>
给Windows 2003文件夹设置权限
查看>>
Android x86+ADT
查看>>
算法53----换钱的最小次数和方法数【动态规划】
查看>>
Python爬虫1-----urllib模块
查看>>
深入理解Java虚拟机(七)字节码执行引擎(栈帧、动态连接、方法调用)
查看>>
<input>标签中获得鼠标与否的样式变化——js实现
查看>>
Percona XtraDB Cluster 的一些使用限制(PXC 5.7)
查看>>
mysql 源代码目录及安装目录介绍
查看>>
iOS下使用SHA1WithRSA算法加签源码
查看>>
要是喜欢刷题或者练技术,可以看看这些书
查看>>
凌晨的纠结
查看>>
iOS-加载数据的实现-MJRefresh
查看>>
Project Euler Problem 34 Digit factorials
查看>>
POJ NOI MATH-7648 蓄水池水管问题
查看>>
HDU2072 单词数(解法二)
查看>>
js 分页
查看>>
高性能网站架构的思考 (转)
查看>>
圆形背景的TextView
查看>>
从0开始学架构(四)
查看>>