//メッシュコンテナ削除 HRESULT MyAllocateHierarchy::DestroyMeshContainer(THIS_ LPD3DXMESHCONTAINER pMeshContainerToFree) { SDELETE(pMeshContainerToFree->Name); //名前 //メッシュ RELEASE(pMeshContainerToFree->MeshData.pMesh); //マテリアル for (DWORD i = 0; i < pMeshContainerToFree->NumMaterials; i++) SDELETE(pMeshContainerToFree->pMaterials->pTextureFilename); SDELETE(pMeshContainerToFree->pMaterials); //エフェクト for (DWORD i = 0; i < pMeshContainerToFree->pEffects->NumDefaults; i++) { SDELETE(pMeshContainerToFree->pEffects->pDefaults[i].pParamName); SDELETE(pMeshContainerToFree->pEffects->pDefaults[i].pValue); } SDELETE(pMeshContainerToFree->pEffects->pEffectFilename); SDELETE(pMeshContainerToFree->pEffects->pDefaults); SDELETE(pMeshContainerToFree->pEffects); //隣接ポリゴンインデックス SDELETE(pMeshContainerToFree->pAdjacency); RELEASE(pMeshContainerToFree->pSkinInfo); return D3D_OK; }
TTFontAsset *Assets::RequestTTFont(const std::string &filename) { TTFontAsset *asset = NULL; std::string name = GetContentPath() + filename; asset = (TTFontAsset *)GetAssetByFilename(name); if (!asset) { asset = new TTFontAsset(); if (asset->Load(name)) { StoreAsset(asset); std::cout << asset->m_filename << ": Load" << std::endl; } else { std::cout << asset->m_filename << ": Loading failed!" << std::endl; SDELETE(asset); } } if (asset) { asset->AddReference(); std::cout << asset->m_filename << ": RefCount (" << asset->m_iRefCount << ")" << std::endl; } return asset; }
/// <summary> /// Closes this instance. /// </summary> void HashJoinOperator::Close() { mInputRight.Close(); for ( uint32_t i = 0; i < mInputRegisterLeft.size(); ++i ) { SDELETE( mOutputRegister[i] ); } }
TextureAtlas::~TextureAtlas() { for (auto i : m_entries) { SDELETE(i.second); } m_entries.clear(); }
TileMap::~TileMap() { for (auto i : m_TileSet) { SDELETE(i); } m_TileTexture->RemoveReference(); }
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nWinMode) { int Return = 0; App *pAppObj = new App(Return, hInstance); //Appオブジェクトを作成 SDELETE(pAppObj); //Appオブジェクトを削除 return Return; }
//全ての箱オブジェクトを削除 void BoxWorld::DeleteAllBoxObj() { for (std::list<Box *>::iterator itr = listpBoxObj.begin(); itr != listpBoxObj.end();) { SDELETE(*itr); itr = listpBoxObj.erase(itr); } return; }
//フレーム削除 HRESULT MyAllocateHierarchy::DestroyFrame(THIS_ LPD3DXFRAME pFrameToFree) { SDELETE(pFrameToFree->Name); if (pFrameToFree->pMeshContainer) DestroyMeshContainer(pFrameToFree->pMeshContainer); if (pFrameToFree->pFrameSibling) DestroyFrame(pFrameToFree->pFrameSibling); if (pFrameToFree->pFrameFirstChild) DestroyFrame(pFrameToFree->pFrameFirstChild); return D3D_OK; }
//一定以上離れた物体を消去 void BoxWorld::BorderClamp() { for (std::list<Box *>::iterator itr = listpBoxObj.begin(); itr != listpBoxObj.end();) //箱オブジェクトを走査 { Tofu3D::Body *pBodyObj = pTofu3DObj->GetpBodyObj((*itr)->GetTofuID()); //箱のBodyオブジェクトを取得 if (pBodyObj->GetvecPos().y < -60.0) //60m以上低い場所だった場合 { SDELETE(*itr); //箱オブジェクトを消去 itr = listpBoxObj.erase(itr); } else { itr++; } } return; }
//デストラクタ App::~App() { pDebugObj->Output(TEXT("終了処理を開始。"), ho::Debug::Log); SDELETE(pMainObj); //メインオブジェクトを削除 SDELETE(pMyDirectXGObj); //DirectXGオブジェクトを削除 SDELETE(pMessageLoopObj); //メッセージループオブジェクトを削除 SDELETE(pMyFrameControlObj); //フレームレート制御オブジェクトを削除 SDELETE(pWindowManagerObj); //ウィンドウマネージャオブジェクトを削除 SDELETE(pDebugObj); //デバッグオブジェクトを削除 }
// Test if we can read and write from multiple threads without failures TEST_P(BufferTest, MultiThreadScanAndWrite) { // Start scan thread bool stop = false; uint32_t fails = 0; std::thread scanThread( Scan, mgr, GetParam().pagesOnDisk, std::ref(stop), std::ref(fails) ); // Start read/write threads std::vector<std::future<uint32_t>> readWriteFutures; for ( uint32_t i = 0; i < GetParam().threads; i++ ) { readWriteFutures.push_back( std::async( ReadWrite, mgr, i, GetParam().threads, GetParam().pagesOnDisk ) ); } // Wait for read/write threads uint32_t totalCount = 0; for ( uint32_t i = 0; i < GetParam().threads; i++ ) { totalCount += readWriteFutures[i].get(); } // Wait for scan thread stop = true; scanThread.join(); EXPECT_EQ( 0, fails ); // Restart buffer manager SDELETE(mgr); mgr = new BufferManager( GetParam().pagesInMemory ); // Verify results uint32_t totalCountOnDisk = 0; for ( uint32_t i = 0; i < GetParam().pagesOnDisk; i++ ) { BufferFrame& bf = mgr->FixPage( BufferManager::MergePageId( DB_TEST_SEGMENT, i ), false ); totalCountOnDisk += reinterpret_cast<uint32_t*>(bf.GetData())[0]; mgr->UnfixPage( bf, false ); } EXPECT_EQ( totalCount, totalCountOnDisk ); }
/// <summary> /// Opens this instance. /// </summary> void HashJoinOperator::Open() { // Empty all hashmaps mHashInt.clear(); mHashString.clear(); mIteratorOffest = 0; // Empty all registers for ( uint32_t i = 0; i < mInputRegisterLeft.size(); ++i ) { SDELETE( mOutputRegister[i] ); } mOutputRegister.clear(); mInputRegisterLeft.clear(); mInputRegisterRight.clear(); mInputLeft.Open(); mInputRegisterLeft = mInputLeft.GetOutput(); // Detect left side comparison attribute uint32_t curidx = 0; bool found = false; for ( Register* r : mInputRegisterLeft ) { if ( r->GetAttributeName() == mLeftAttrName ) { found = true; mLeftId = curidx; if ( r->GetType() == SchemaTypes::Tag::Char ) mAttrIsString = true; else mAttrIsString = false; break; } ++curidx; } assert( found ); // Prepare output registers associated with left side // these we have to build ourselves for ( Register* r : mInputRegisterLeft ) { mOutputRegister.push_back( new Register() ); mOutputRegister.back()->mType = r->GetType(); mOutputRegister.back()->mAttrName = r->GetAttributeName(); } // Go over left input and store it completely in the hashmap while (mInputLeft.Next()) { std::vector<Register> stored; for ( Register* r : mInputRegisterLeft ) { stored.push_back( *r ); } if (mAttrIsString) mHashString.insert( std::make_pair( mInputRegisterLeft[mLeftId]->GetString(), stored ) ); else mHashInt.insert( std::make_pair( mInputRegisterLeft[mLeftId]->GetInteger(), stored ) ); } mInputLeft.Close(); // Prepare right side mInputRight.Open(); mInputRegisterRight = mInputRight.GetOutput(); curidx = 0; found = false; for ( Register* r : mInputRegisterRight ) { if ( r->GetAttributeName() == mRightAttrName ) { found = true; mRightId = curidx; if ( mAttrIsString ) assert( r->GetType() == SchemaTypes::Tag::Char ); else assert( r->GetType() == SchemaTypes::Tag::Integer ); break; } ++curidx; } assert( found ); // Prepare output registers associated with right side // Leave out the register containing the right side attribute since that is already included in the left side for ( Register* r : mInputRegisterRight ) { if ( r->GetAttributeName() != mRightAttrName ) { mOutputRegister.push_back( r ); } } mInputRight.Next(); // Load the first tuple from the right }
//デストラクタ Tofu3D::~Tofu3D() { SDELETE(pWorldObj); //世界クラスオブジェクトを削除 }
virtual void TearDown() override { SDELETE( core ); }
//デストラクタ WindowManager::~WindowManager() { //全てのWindowオブジェクトを削除 for (int i = 0; i < (signed)vectorpWindowObj.size(); i++) SDELETE(vectorpWindowObj.at(i)); }
virtual void TearDown() override { SDELETE(mgr); }
//デストラクタ Body::~Body() { SDELETE(pMeshObj); }
SpriteAnimation::~SpriteAnimation() { for (auto i : m_clips) { SDELETE(i); } }
//デストラクタ Element::~Element() { //すべての子供エレメントを削除 for (std::map<int, Element *>::iterator itr = mappChildElementObj.begin(); itr != mappChildElementObj.end(); itr++) SDELETE(itr->second); }
//デストラクタ GUI::~GUI() { SDELETE(pTopElementObj); //一番上の階層にあるエレメントを削除 }
//デストラクタ BoxWorld::~BoxWorld() { DeleteAllBoxObj(); //全ての箱オブジェクトを削除 SDELETE(pUserInputObj); }
DWORD DumpResourceToFile(__in __nullterminated WCHAR* wzFileName) { BYTE* pbResBase; FILE* pF = NULL; DWORD ret = 0; DWORD dwResDirRVA; DWORD dwResDirSize; unsigned ulNumResNodes=0; DynamicArray<ResourceNode*> g_prResNodePtr; if (g_pPELoader->IsPE32()) { IMAGE_OPTIONAL_HEADER32 *pOptHeader = &(g_pPELoader->ntHeaders32()->OptionalHeader); dwResDirRVA = VAL32(pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress); dwResDirSize = VAL32(pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size); } else { IMAGE_OPTIONAL_HEADER64 *pOptHeader = &(g_pPELoader->ntHeaders64()->OptionalHeader); dwResDirRVA = VAL32(pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress); dwResDirSize = VAL32(pOptHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size); } if(dwResDirRVA && dwResDirSize) { if(g_pPELoader->getVAforRVA(dwResDirRVA, (void **) &pbResBase)) { // First, pull out all resource nodes (tree leaves), see ResourceNode struct PIMAGE_RESOURCE_DIRECTORY pirdType = (PIMAGE_RESOURCE_DIRECTORY)pbResBase; PIMAGE_RESOURCE_DIRECTORY_ENTRY pirdeType = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pbResBase+sizeof(IMAGE_RESOURCE_DIRECTORY)); DWORD dwTypeID; unsigned short i = 0,N = pirdType->NumberOfNamedEntries+pirdType->NumberOfIdEntries; PAL_CPP_TRY { for(i=0; i < N; i++, pirdeType++) { dwTypeID = VAL32(IMAGE_RDE_NAME(pirdeType)); if(IMAGE_RDE_OFFSET_FIELD(pirdeType, DataIsDirectory)) { BYTE* pbNameBase = pbResBase + VAL32(IMAGE_RDE_OFFSET_FIELD(pirdeType, OffsetToDirectory)); PIMAGE_RESOURCE_DIRECTORY pirdName = (PIMAGE_RESOURCE_DIRECTORY)pbNameBase; PIMAGE_RESOURCE_DIRECTORY_ENTRY pirdeName = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pbNameBase+sizeof(IMAGE_RESOURCE_DIRECTORY)); DWORD dwNameID; unsigned short i,N = VAL16(pirdName->NumberOfNamedEntries)+VAL16(pirdName->NumberOfIdEntries); for(i=0; i < N; i++, pirdeName++) { dwNameID = VAL32(IMAGE_RDE_NAME(pirdeName)); if(IMAGE_RDE_OFFSET_FIELD(pirdeName, DataIsDirectory)) { BYTE* pbLangBase = pbResBase + VAL32(IMAGE_RDE_OFFSET_FIELD(pirdeName, OffsetToDirectory)); PIMAGE_RESOURCE_DIRECTORY pirdLang = (PIMAGE_RESOURCE_DIRECTORY)pbLangBase; PIMAGE_RESOURCE_DIRECTORY_ENTRY pirdeLang = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(pbLangBase+sizeof(IMAGE_RESOURCE_DIRECTORY)); DWORD dwLangID; unsigned short i,N = VAL16(pirdLang->NumberOfNamedEntries)+VAL16(pirdLang->NumberOfIdEntries); for(i=0; i < N; i++, pirdeLang++) { dwLangID = VAL32(IMAGE_RDE_NAME(pirdeLang)); if(IMAGE_RDE_OFFSET_FIELD(pirdeLang, DataIsDirectory)) { _ASSERTE(!"Resource hierarchy exceeds three levels"); } else { g_prResNodePtr[ulNumResNodes++] = new ResourceNode(dwTypeID,dwNameID,dwLangID, VAL32(IMAGE_RDE_OFFSET(pirdeLang)),pbResBase); } } } else { g_prResNodePtr[ulNumResNodes++] = new ResourceNode(dwTypeID,dwNameID,0,VAL32(IMAGE_RDE_OFFSET(pirdeName)),pbResBase); } } } else { g_prResNodePtr[ulNumResNodes++] = new ResourceNode(dwTypeID,0,0,VAL32(IMAGE_RDE_OFFSET(pirdeType)),pbResBase); } } } PAL_CPP_CATCH_ALL { ret= 0xDFFFFFFF; ulNumResNodes = 0; } PAL_CPP_ENDTRY // OK, all tree leaves are in ResourceNode structs, and ulNumResNodes ptrs are in g_prResNodePtr if(ulNumResNodes) { ret = 1; #ifdef RES_FILE_DUMP_ENABLED _wfopen_s(&pF,wzFileName,L"wb"); if(pF) { // Dump them to pF // Write dummy header ResourceHeader *pRH = new ResourceHeader(); fwrite(pRH,sizeof(ResourceHeader),1,pF); SDELETE(pRH); // For each resource write header and data PAL_CPP_TRY { for(i=0; i < ulNumResNodes; i++) { /* sprintf_s(szString,SZSTRING_SIZE,"// Res.# %d Type=0x%X Name=0x%X Lang=0x%X DataOffset=0x%X DataLength=%d", i+1, g_prResNodePtr[i]->ResHdr.dwTypeID, g_prResNodePtr[i]->ResHdr.dwNameID, g_prResNodePtr[i]->ResHdr.wLangID, VAL32(g_prResNodePtr[i]->DataEntry.OffsetToData), VAL32(g_prResNodePtr[i]->DataEntry.Size)); printLine(NULL,szString); */ g_prResNodePtr[i]->Save(pF); SDELETE(g_prResNodePtr[i]); } } PAL_CPP_CATCH_ALL { ret= 0xDFFFFFFF; } PAL_CPP_ENDTRY fclose(pF); }// end if file opened else ret = 0xEFFFFFFF; #else // Dump to text, using wzFileName as GUICookie //char szString[4096]; void* GUICookie = (void*)wzFileName; BYTE* pbData; printLine(GUICookie,""); sprintf(szString,"// ========== Win32 Resource Entries (%d) ========",ulNumResNodes); for(i=0; i < ulNumResNodes; i++) { printLine(GUICookie,""); sprintf(szString,"// Res.# %d Type=0x%X Name=0x%X Lang=0x%X DataOffset=0x%X DataLength=%d", i+1, g_prResNodePtr[i]->ResHdr.dwTypeID, g_prResNodePtr[i]->ResHdr.dwNameID, g_prResNodePtr[i]->ResHdr.wLangID, VAL32(g_prResNodePtr[i]->DataEntry.OffsetToData), VAL32(g_prResNodePtr[i]->DataEntry.Size)); printLine(GUICookie,szString); if(g_pPELoader->getVAforRVA(VAL32(g_prResNodePtr[i]->DataEntry.OffsetToData), (void **) &pbData)) { strcat(g_szAsmCodeIndent,"// "); strcpy(szString,g_szAsmCodeIndent); DumpByteArray(szString,pbData,VAL32(g_prResNodePtr[i]->DataEntry.Size),GUICookie); printLine(GUICookie,szString); g_szAsmCodeIndent[strlen(g_szAsmCodeIndent)-4] = 0; } SDELETE(g_prResNodePtr[i]); } ret = 1; #endif } // end if there are nodes }// end if got ptr to resource
void Assets::RemoveAsset(Asset *asset) { SDELETE(asset); m_assets.remove(asset); }