for(auto type : {pdfa_XObject, pdfa_Pattern, pdfa_ExtGState})
{
...
}
///
pV = GetVarByPath(pD, {pdfa_SMask, pdfa_G, pdfa_Resources});
PdfStr5::PDFVariant GetVarByPath(PdfStr5::PDFVariant pVar, const std::initializer_list& path)
{
PdfStr5::PDFVariant* pRes = nullptr;
PdfStr5::PDFDictionary* pDict = pVar ? pVar->GetDictionary() : NULL;
for (auto key : path)
{
if (pDict == nullptr)
{
pRes = nullptr;
break;
}
Думки про програмування
вівторок, 24 березня 2015 р.
середа, 15 травня 2013 р.
Час перевести до локального
Для FILETIME
BOOL WINAPI FileTimeToLocalFileTime( _In_ const FILETIME *lpFileTime, // Час по Гринвичу _Out_ LPFILETIME lpLocalFileTime // Отриманий час по локальному );
Для SYSTEMTIME
TIME_ZONE_INFORMATION TimeZone; GetTimeZoneInformation(&TimeZone) SystemTimeToTzSpecificLocalTime(&TimeZone, &UniversalTime, &LocalTime);
четвер, 19 травня 2011 р.
Формати дати і часу
Container
|
Domain
|
Format / Notes
|
Min Date
|
Resolution
|
SYSTEMTIME
|
Win32
|
Struct (16 bytes)
|
January 1, 1601
|
1 millisecond
|
FILETIME
|
Win32
|
Offset value (64bit unsigned int)
|
January 1, 1601
|
100 nanoseconds
|
VT_DATE
|
Win32 / OLE Automation
|
Offset value (64bit signed float), 0.0 is December 30, 1899.
|
January 1, 100 (1)
|
500 milliseconds (2)
|
FAT/MS-DOS
|
Win32
|
Struct (values packed into two 16bit ints)
|
January 1, 1980
|
2 seconds
|
time_t
|
CRT
|
Offset value (unsigned int)
|
January 1, 1970
|
1 second
|
tm
|
CRT
|
Struct (36 bytes (3))
|
January 1, 1900
|
1 second
|
Перетворення
Windows Times
SYSTEMTIME
|
FILETIME
|
VT_DATE
|
FAT/приложений-DOS
| |
SYSTEMTIME
|
SystemTimeToFileTime
|
SystemTimeToVariantTime
| ||
FILETIME
|
FileTimeToSystemTime
|
FileTimeToDosDateTime
| ||
VT_DATE
|
VariantTimeToSystemTime
|
VariantTimeToDosDateTime
| ||
FAT/приложений-DOS
|
DosDateTimeToFileTime
|
DosDateTimeToVariantTime
|
CRT Times
time_t
|
ТМ
| |
time_t
|
gmtime
| |
ТМ
|
mktime
|
Converting between SYSTEMTIME and time_t
void SystemTimeToTime_t(SYSTEMTIME *systemTime, time_t *dosTime)
{
LARGE_INTEGER jan1970FT = {0};
jan1970FT.QuadPart = 116444736000000000I64; // january 1st 1970
LARGE_INTEGER utcFT = {0};
SystemTimeToFileTime(systemTime, (FILETIME*)&utcFT);
unsigned __int64 utcDosTime = (utcFT.QuadPart - an1970FT.QuadPart) / 10000000;
*dosTime = (time_t)utcDosTime;
}
void Time_tToSystemTime(time_t dosTime, SYSTEMTIME *systemTime)
{
LARGE_INTEGER jan1970FT = {0};
jan1970FT.QuadPart = 116444736000000000I64; // january 1st 1970
LARGE_INTEGER utcFT = {0};
utcFT.QuadPart = ((unsigned __int64)dosTime) * 10000000 + jan1970FT.QuadPart;
FileTimeToSystemTime((FILETIME*)&utcFT, systemTime);
}
четвер, 10 лютого 2011 р.
Игровые движки для Delphi
Полный список игровых движков на (доступных для) Delphi от pascalgames.net
Игровые движки:
ZenGL - http://andru-kun.ru/zengl.html
OMEGA Engine - http://isadateam.com/omega.php
Asphyre - http://afterwarp.net/
DGLEngine - http://dronprogs.mirgames.ru/dgle_about.html
eXgine - http://xproger.mirgames.ru/?id=2&page=4
eXgine 2.0 - http://code.google.com/p/exgine/
CAST II - http://casteng.com/ru
GLScene - http://glscene.org/
ReLi 3D Engine - http://coderman.org.ru/index.php?id=9
HGEDelphi - http://www.bilsen.com/HGEDelphi.zip
Genesis Device - http://www.genesisdevice.net/
Tokyo Game Engine - http://www.mathpudding.com/PGD/tss/
TRIPLE DASH GARLIC 3D - http://www.igrodel.ru/
DanJetX - http://dan.mirgames.ru/main.php?page=djx
3DOED - http://oed3d.narod.ru/3dOED.htm
pHEngine - http://rdi.mirgames.ru/?page=pheng
3DE - http://svsd.mirgames.ru/
LEAF 2 - http://leafproject.com.sapo.pt/
DunconGames - http://code.google.com/p/duncongames/
Andorra - http://andorra.sourceforge.net/
Irrlicht - http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=10511
Sky3D - http://sky3d.sourceforge.net/news.php
DiF Engine - http://code.google.com/p/difengine/
ZGE - http://code.google.com/p/zgameeditor/
Физические движки:
PAPPE - http://sourceforge.net/projects/pappe
Newton - http://www.saschawillems.de/?page_id=75
Chipmunk - http://www.par-com.net/~paulr/GLScene/chipmunkdemo.zip
Игровые движки:
ZenGL - http://andru-kun.ru/zengl.html
OMEGA Engine - http://isadateam.com/omega.php
Asphyre - http://afterwarp.net/
DGLEngine - http://dronprogs.mirgames.ru/dgle_about.html
eXgine - http://xproger.mirgames.ru/?id=2&page=4
eXgine 2.0 - http://code.google.com/p/exgine/
CAST II - http://casteng.com/ru
GLScene - http://glscene.org/
ReLi 3D Engine - http://coderman.org.ru/index.php?id=9
HGEDelphi - http://www.bilsen.com/HGEDelphi.zip
Genesis Device - http://www.genesisdevice.net/
Tokyo Game Engine - http://www.mathpudding.com/PGD/tss/
TRIPLE DASH GARLIC 3D - http://www.igrodel.ru/
DanJetX - http://dan.mirgames.ru/main.php?page=djx
3DOED - http://oed3d.narod.ru/3dOED.htm
pHEngine - http://rdi.mirgames.ru/?page=pheng
3DE - http://svsd.mirgames.ru/
LEAF 2 - http://leafproject.com.sapo.pt/
DunconGames - http://code.google.com/p/duncongames/
Andorra - http://andorra.sourceforge.net/
Irrlicht - http://irrlicht.sourceforge.net/phpBB2/viewtopic.php?t=10511
Sky3D - http://sky3d.sourceforge.net/news.php
DiF Engine - http://code.google.com/p/difengine/
ZGE - http://code.google.com/p/zgameeditor/
Физические движки:
PAPPE - http://sourceforge.net/projects/pappe
Newton - http://www.saschawillems.de/?page_id=75
Chipmunk - http://www.par-com.net/~paulr/GLScene/chipmunkdemo.zip
середа, 23 вересня 2009 р.
Браузер как текстовой редактор
Хочу чтобы браузер был как текстовой редактор — отредактировать текст (болд, курсив, выделение), удалить текст, выбрать фон.
Наберите в строке браузера
и нажмите Enter. Болд и курсив делаются посредством выделения текста мышью и нажатия Ctrl+B и Ctrl+I соответственно(в Опере так). Эту фичу по стандарту должны поддерживать все браузеры.
Наберите в строке браузера
javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
и нажмите Enter. Болд и курсив делаются посредством выделения текста мышью и нажатия Ctrl+B и Ctrl+I соответственно(в Опере так). Эту фичу по стандарту должны поддерживать все браузеры.
четвер, 14 травня 2009 р.
Собственно блокировка: pg_try_advisory_lock()
|
середа, 29 квітня 2009 р.
Хороша стаття про чергу завдань на PostgreSQL
Скопійовано із статі
Функция pg_try_advisory_lock() пытается "повесить" исключительную блокировку на некоторый
"виртуальный" идентификтор, который описывается парой ее параметров. Если этот идентификатор
уже заблокирован, она ничего не делает и возвращает false. Если же блокировку удалось
установить, то функция возвращает true. Блокировка снимается, когда вызывается
pg_advisory_unlock(), либо когда клиент отсоединяется от базы данных.
Собственно блокировка: pg_try_advisory_lock()
Теперь модифицируем наш запрос так, чтобы при его запуске на нескольких машинах результаты никогда не пересекались. Это делается так (псевдо-операция @IDS := ... означает, что данные нужно сохранить в некоторый массив вызывающего скрипта):/* Исходный запрос: получаем элементы-кандидаты на обработку. */ @IDS := ARRAY( SELECT id FROM subscription WHERE last_mail_at < MAILING_STARTED_AT AND subscription_type = <тип подписки> AND pg_try_advisory_lock(tableoid::INTEGER, id) /* вот она, блокировка! */ LIMIT 100 ); /* Пост-проверка: отсеиваем тех, кто успел пометиться обработанным за */ /* время работы предыдущего запроса (см. ниже подробности про это). */ @IDS := ARRAY( SELECT id FROM subscription WHERE last_mail_at < MAILING_STARTED_AT AND id IN (@IDS) );
Функция pg_try_advisory_lock() пытается "повесить" исключительную блокировку на некоторый
"виртуальный" идентификтор, который описывается парой ее параметров. Если этот идентификатор
уже заблокирован, она ничего не делает и возвращает false. Если же блокировку удалось
установить, то функция возвращает true. Блокировка снимается, когда вызывается
pg_advisory_unlock(), либо когда клиент отсоединяется от базы данных.
Підписатися на:
Дописи (Atom)