123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /*************************************************************************/
- /* copymem.h */
- /*************************************************************************/
- /* This file is part of: */
- /* GODOT ENGINE */
- /* http://www.godotengine.org */
- /*************************************************************************/
- /* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur. */
- /* */
- /* Permission is hereby granted, free of charge, to any person obtaining */
- /* a copy of this software and associated documentation files (the */
- /* "Software"), to deal in the Software without restriction, including */
- /* without limitation the rights to use, copy, modify, merge, publish, */
- /* distribute, sublicense, and/or sell copies of the Software, and to */
- /* permit persons to whom the Software is furnished to do so, subject to */
- /* the following conditions: */
- /* */
- /* The above copyright notice and this permission notice shall be */
- /* included in all copies or substantial portions of the Software. */
- /* */
- /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
- /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
- /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
- /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
- /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
- /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
- /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
- /*************************************************************************/
- #ifndef COPYMEM_H
- #define COPYMEM_H
- #include "typedefs.h"
- ///@TODO use optimized routines for this, depending on platform. these are just the standard ones
- #define copymem(m_to,m_from,m_count) \
- do { \
- unsigned char * _from=(unsigned char*)m_from; \
- unsigned char * _to=(unsigned char*)m_to; \
- int _count=m_count; \
- for (int _i=0;_i<_count;_i++) \
- _to[_i]=_from[_i]; \
- } while (0);
- /*
- case 0: *_dto++ = *_dfrom++; \
- case 7: *_dto++ = *_dfrom++; \
- case 6: *_dto++ = *_dfrom++; \
- case 5: *_dto++ = *_dfrom++; \
- case 4: *_dto++ = *_dfrom++; \
- case 3: *_dto++ = *_dfrom++; \
- case 2: *_dto++ = *_dfrom++; \
- case 1: *_dto++ = *_dfrom++; \
- */
- #define movemem_duff(m_to, m_from, m_count) \
- do { \
- if (m_to<m_from) { \
- unsigned char* _dto = (unsigned char*)m_to; \
- unsigned char* _dfrom = (unsigned char*)m_from; \
- int n = (m_count + 7) / 8; \
- switch (m_count % 8) { \
- do { \
- case 0: *_dto++ = *_dfrom++; \
- case 7: *_dto++ = *_dfrom++; \
- case 6: *_dto++ = *_dfrom++; \
- case 5: *_dto++ = *_dfrom++; \
- case 4: *_dto++ = *_dfrom++; \
- case 3: *_dto++ = *_dfrom++; \
- case 2: *_dto++ = *_dfrom++; \
- case 1: *_dto++ = *_dfrom++; \
- } while (--n > 0); \
- }; \
- } else if (m_to>m_from) { \
- unsigned char* _dto = &((unsigned char*)m_to)[m_count-1]; \
- unsigned char* _dfrom = &((unsigned char*)m_from)[m_count-1]; \
- int n = (m_count + 7) / 8; \
- switch (m_count % 8) { \
- do { \
- case 0: *_dto-- = *_dfrom--; \
- case 7: *_dto-- = *_dfrom--; \
- case 6: *_dto-- = *_dfrom--; \
- case 5: *_dto-- = *_dfrom--; \
- case 4: *_dto-- = *_dfrom--; \
- case 3: *_dto-- = *_dfrom--; \
- case 2: *_dto-- = *_dfrom--; \
- case 1: *_dto-- = *_dfrom--; \
- } while (--n > 0); \
- }; \
- } \
- } while(0) \
- #define movemem_conventional(m_to,m_from,m_count) \
- do { \
- if (m_to<m_from) { \
- unsigned char * _from=(unsigned char*)m_from; \
- unsigned char * _to=(unsigned char*)m_to; \
- int _count=m_count; \
- for (int _i=0;_i<_count;_i++) \
- _to[_i]=_from[_i]; \
- \
- } else if (m_to>m_from) { \
- unsigned char * _from=(unsigned char*)m_from; \
- unsigned char * _to=(unsigned char*)m_to; \
- int _count=m_count; \
- while (_count--) \
- _to[_count]=_from[_count]; \
- \
- \
- } \
- } while (0); \
- void movemem_system(void*,void*,int);
- #define movemem movemem_system
- void zeromem(void* p_mem,size_t p_bytes);
- #endif
|