Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- stock CompressFormat(const data[])
- {
- new
- pos = 0,
- total = 1;
- for ( ; ; )
- {
- switch (data[pos++])
- {
- case '\0':
- {
- break;
- }
- case 's':
- {
- total <<= 1;
- }
- default:
- {
- total = (total << 1) | 1;
- }
- }
- }
- return ~total;
- }
- forward @queryCallback(e_CALLBACK_FLAGS:cF, cP, cX, Alloc:cA, Alloc:a);
- public @queryCallback(e_CALLBACK_FLAGS:cF, cP, cX, Alloc:cA, Alloc:a)
- {
- new
- ret[E_CALLBACK_DATA];
- ret[E_CALLBACK_DATA_FLAGS] = cF;
- ret[E_CALLBACK_DATA_POINTER] = cP;
- ret[E_CALLBACK_DATA_FORMAT] = cX;
- ret[E_CALLBACK_DATA_ALLOC] = cA;
- Callback_Block(ret, Malloc_GetData(a, 2), Malloc_GetSlotSize(a) - 2);
- free(cA);
- free(a);
- }
- stock send_query(connectionHandle, query[], bool:cache, callback:callback, const type[], GLOBAL_TAG_TYPES:...)
- {
- new
- ret[E_CALLBACK_DATA],
- mem = CompressFormat(type);
- if (!Callback_Get(callback, ret))
- {
- return 0;
- }
- if (!(ret[E_CALLBACK_DATA_FLAGS] & e_CALLBACK_FLAGS_PUBLIC) && mem != ret[E_CALLBACK_DATA_FORMAT])
- {
- P:E("Blogai nurodytas kintamojo formatas inline funkcijoje %s: %04x%04x != %04x%04x", callback, mem >>> 16, mem & 0xFFFF, ret[E_CALLBACK_DATA_FORMAT] >>> 16, ret[E_CALLBACK_DATA_FORMAT] & 0xFFFF);
- Callback_Release(ret);
- return 0;
- }
- mem = 2;
- for (new i = 0; ; ++i)
- {
- switch (type[i])
- {
- case '\0':
- {
- break;
- }
- case 's':
- {
- mem += YSI_MAX_STRING;
- }
- case 'a':
- {
- P:E("y_inline nepalaiko masyvų");
- return 0;
- }
- default:
- {
- ++mem;
- }
- }
- }
- new
- Alloc:a = malloc(mem);
- if (a == NO_ALLOC)
- {
- Callback_Release(ret);
- return 0;
- }
- for (new i = 0, j = 4; ; ++i, ++j)
- {
- switch (type[i])
- {
- case '\0':
- {
- break;
- }
- case 's':
- {
- mem -= YSI_MAX_STRING;
- Malloc_SetVAS(a, mem, j);
- }
- default:
- {
- --mem;
- Malloc_Set(a, mem, getarg(j));
- }
- }
- }
- Malloc_Set(a, 1, _:ret[E_CALLBACK_DATA_ALLOC]);
- Malloc_Set(a, 0, mysql_function_query(connectionHandle, query, cache, "@queryCallback", "iiiii", _:ret[E_CALLBACK_DATA_FLAGS], ret[E_CALLBACK_DATA_POINTER], ret[E_CALLBACK_DATA_FORMAT], _:ret[E_CALLBACK_DATA_ALLOC], _:a));
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement