//-------------------------------------------------------------------------- VeParallel::VeParallel() noexcept { m_stThreadNum = VeCPUInfo::GetCount(); m_pkLoopEventArray = VeAlloc(VeThread::Event, m_stThreadNum); for (VeSizeT i(0); i < m_stThreadNum; ++i) { new(m_pkLoopEventArray + i)VeThread::Event(); } m_pkThreadArray = VeAlloc(std::thread, m_stThreadNum); for (VeSizeT i(0); i < m_stThreadNum; ++i) { new(m_pkThreadArray + i)std::thread([this,i]() noexcept { do { m_pkLoopEventArray[i].Wait(); if (m_kTask) { m_kTask(VeUInt32(i)); } m_pkLoopEventArray[i].Reset(); m_kEvent.Set(); } while (m_bLoop); }); } }
//-------------------------------------------------------------------------- void VeWindows::_SetWindowTitle(Window* pkWindow) { WindowData* pkData = (WindowData*)(VeRefObject*)pkWindow->m_spDriverData; VeUInt32 u32Len = MultiByteToWideChar(CP_UTF8, 0, pkWindow->m_kTitle, -1, NULL, 0); VeChar16* wszGBK = VeAlloc(VeChar16, u32Len + 1); VeZeroMemory(wszGBK, sizeof(VeChar16) * (u32Len + 1)); MultiByteToWideChar(CP_UTF8, 0, pkWindow->m_kTitle, -1, wszGBK, u32Len); u32Len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL); VeChar8* szGBK = VeAlloc(VeChar8, u32Len + 1); VeZeroMemory(szGBK, sizeof(VeChar8) * (u32Len + 1)); WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, u32Len, NULL, NULL); SetWindowText(pkData->m_hWnd, szGBK); VeFree(wszGBK); VeFree(szGBK); }
//-------------------------------------------------------------------------- void VeStringA_S::UpdateGBKToValueData() { if(m_kGBKData.Length()) { VeUInt32 u32Len = MultiByteToWideChar(CP_ACP, 0, m_kGBKData, -1, NULL, 0); VeChar16* wszGBK = VeAlloc(VeChar16, u32Len + 1); VeZeroMemory(wszGBK, sizeof(VeChar16) * (u32Len + 1)); MultiByteToWideChar(CP_ACP, 0, m_kGBKData, -1, wszGBK, u32Len); u32Len = WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, NULL, 0, NULL, NULL); VeChar8* szUTF8 = VeAlloc(VeChar8, u32Len + 1); VeZeroMemory(szUTF8, sizeof(VeChar8) * (u32Len + 1)); WideCharToMultiByte(CP_UTF8, 0, wszGBK, -1, szUTF8, u32Len, NULL, NULL); m_kValue = szUTF8; VeFree(wszGBK); VeFree(szUTF8); } else { m_kValue = ""; } }
//-------------------------------------------------------------------------- VeFileOStream::VeFileOStream(const VeChar8* pcFileName, VeSizeT stCache, bool bAppend) noexcept : m_stCacheSize(stCache) { const VeChar8* pcMode = bAppend ? "ab" : "wb"; # ifdef VE_PLATFORM_WIN fopen_s(&m_pkFile, pcFileName, pcMode); # else m_pkFile = fopen(pcFileName, pcMode); # endif VE_ASSERT(m_pkFile && m_stCacheSize); m_pbyCache = VeAlloc(VeByte, m_stCacheSize); VE_ASSERT(m_pbyCache); }
//-------------------------------------------------------------------------- D3D12InputLayout::D3D12InputLayout( const VeInputLayout::ElementDesc* pkDescs, size_t stNum) noexcept { VE_ASSERT(stNum); D3D12_INPUT_ELEMENT_DESC* pkAllocated = VeAlloc(D3D12_INPUT_ELEMENT_DESC, stNum); for (size_t i(0); i < stNum; ++i) { pkAllocated[i] = { s_apcSematicNameMap[pkDescs[i].m_eName], pkDescs[i].m_u32Index, (DXGI_FORMAT)pkDescs[i].m_eFormat, pkDescs[i].m_u32Slot, pkDescs[i].m_u32Offset, (D3D12_INPUT_CLASSIFICATION)pkDescs[i].m_eClass, pkDescs[i].m_u32Rate }; } m_kDesc = { pkAllocated, (UINT)stNum }; }
//-------------------------------------------------------------------------- VeFileIStream::VeFileIStream(const VeChar8* pcFileName, VeSizeT stCache) noexcept : m_stCacheSize(stCache) { if (VE_SUCCEEDED(VeAccess(pcFileName, VeDirectory::ACCESS_F_OK))) { # ifdef VE_PLATFORM_WIN fopen_s(&m_pkFile, pcFileName, "rb"); # else m_pkFile = fopen(pcFileName, "rb"); # endif if (m_pkFile) { UpdateLenth(); VE_ASSERT(m_stCacheSize); m_pbyCache = VeAlloc(VeByte, m_stCacheSize); VE_ASSERT(m_pbyCache); return; } } SetError(true); }