English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1428) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.12.02. 21:02)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés
Σ: 1 post

TCH  (statz) Főfasz
#1, Főfasz (10466)
1937 | #2f1c | ^ | Idézet | Sat, 29 Nov 2014 21:08:13 +01
46.139.*.* Linux x86 Opera Classic Hungary *.catv.pool.telekom.hu
Tegyük fel, hogy be kell szúrnunk egy stream közepébe adatot. Beszúrás alatt azt értem, hogy nem felülírom ami útban van, hanem a beszúrt terület mögé mozgatom. Hogy lehet ezt csinálni? A memcpy() nem feltétlen jó, hiszen, ha a beszúrt terület vége nem lóg túl a stream eredeti végén, akkor a beszúrandó méret kisebb lesz, mint az a terület ami mögötte van, ennek megfelelően a copynál akkora overlap lesz, mint ide Irak és saját magára fog másolni, felülírván a hátralévő adatokat. A memmove() már jobb lenne, mert annek nem baj az overlap...csak éppen ez úgy működik, hogy előbb átmásolja egy átmeneti bufferbe, aztán copyzza be a végső helyére. Pazarlás Safranek. Hogyan lehetne ezt egyszeri memóriamásolással megoldani? Kurwa egyszerű, ha a sima memcpy() azért nem jó ide, mert overlap esetén felülírja a hátralévő adatokat, akkor fordított irányban kell copyzni! Viszont olyan memóriamásoló függvény, ami ezt csinálná, egyszerűen nincs! (Stringmásolóra vannak implementációk, de az nem jó, az byte-onként másol.)
Úgyhogy összedobtam egyet. Használlyátok egész seggel:
#ifndef _MEMCPY_BKW_C
#define _MEMCPY_BKW_C 1

#include <stdint.h>
#include <stdlib.h>

#if __WORDSIZE == 64
#define mask 7
#define shift 3
#define copytype int64_t
#endif

#if __WORDSIZE == 32
#define mask 3
#define shift 2
#define copytype int32_t
#endif

#if __WORDSIZE == 16
#define mask 1
#define shift 1
#define copytype int16_t
#endif

void memcpy_bkw(char *dst, char *src, size_t size)
{
	size_t mod;
	copytype *dstb;
	copytype *srcb;

	dstb = (copytype *)((copytype)dst + size);
	srcb = (copytype *)((copytype)src + size);
	mod = size & mask;
	size >>= shift;
	while (size--)
	{
		*dstb-- = *srcb--;
	}
	while (mod--)
	{
		*dst-- = *src--;
	}
}

#endif


English | Magyar
JS ki | CSS ki | Ékezetek ki | HiContrast
Lapozó:  (0 - 1428) 
<== | ==>
Ugrás a végére | Összes megjelenítése | Utolsó oldal
OpenOpera patches | Opera-SSL patches | Opera 12.15 source (Git repository) | Opera 12.15 source (Torrent) | Opera internal pages | Otter Browser Linux x64 - Qt5.15.2/QtWebKit5.602.1 (2024.12.02. 21:02)
OS for MC680x0 | OS for PPC | OS for Sparc64 | besztofbégéaefcé | CSÉNDZSLOG | WebToolz | DDG Shit Filter | Google Shit Filter | Progz | Fast CSS Box | Browser | OS | Agent | Statisztika | BBCode
Monospace font-family: Courier New | Browser default monospace
Email értesítő / Email notification ===> 
Keresés

Név: (max 255 byte)

Email: (max 255 byte) Nem kötelező!

Üzenet: (max 65536 kar.) 65536-0=65536




crap_vkn v4.34.0 by TCH
Thx to saxus for the escaped string decoder function (PHP), the realIP function (PHP) & the SQL handle layer (PHP), to thookerov for the int_divide function (PHP), to Jeff Anderson for the getSelText function (JS), to Alex King for the insertAtCursor function (JS), Flood3r for the new CSS styles, Pety for the spamprotection idea and some design and comfort ideas, MaxMind for the IP2Country database, famfamfam for the flags of countries and an unknown PHP programmer for the removeAccents function.



Kecskebaszók ide!