void ProjectDialog::accept() { Project p = project(); bool ufc = p.useFileCreation(); p.setUseFileCreation( 0 ); p.setElementStatus( ElementStatus::recordByName( "New" ) ); p.setProjectStatus( ProjectStatus::recordByName( "Production" ) ); p.commit(); p.setUseFileCreation( ufc ); p.setProject( p ); Client client( Client::recordByName( mClientCombo->currentText() ) ); p.setClient( client ); p.commit(); if( mWebCheck->isChecked() || mFTPCheck->isChecked() ) { User u = User::setupProjectUser( p, client, mWebCheck->isChecked(), mFTPCheck->isChecked() ); u.commit(); } /* Create Project Storage Records */ ProjectStorageList storage; storage += createStorage( p, "animation", mWIPCombo->currentText() ); storage += createStorage( p, "renderOutput", mRenderOutputCombo->currentText() ); storage += createStorage( p, "compOutput", mCompOutputCombo->currentText() ); storage.commit(); QDialog::accept(); }
TEST(LowLevelBufferHandler, SetMetaData) { const BufferId BUFFERS_COUNT = 1; const BufferPos BUFFER_SIZE = 1; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); MetaData meta; SignalValue buffersDump[] = {0}; QualityCode qualityCodesDump[] = {0}; TimeStamp timeStampsDump[] = {0}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, meta, buffersDump, qualityCodesDump, timeStampsDump, length)); MetaData metaActual; metaActual.clientCount = 10; manager.setMetaData(metaActual, reinterpret_cast<void *>(storage.get())); boost::scoped_array<char> expected(createStorage(BUFFERS_COUNT, BUFFER_SIZE, metaActual, buffersDump, qualityCodesDump, timeStampsDump, length)); EXPECT_TRUE(0 == std::memcmp(expected.get(), storage.get(), length)); }
TEST(LowLevelBufferHandler, SetQualityCode) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; TimeStamp timeStampsDump[] = {9, 6, 7, 8}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); QualityCode expectedQualty[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; boost::scoped_array<char> expected(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, expectedQualty, timeStampsDump, length)); manager.setQualityCode(0, 0, storage.get()); manager.setQualityCode(1, 1, storage.get()); manager.setQualityCode(2, 2, storage.get()); manager.setQualityCode(3, 3, storage.get()); manager.setQualityCode(4, 4, storage.get()); manager.setQualityCode(5, 5, storage.get()); manager.setQualityCode(6, 6, storage.get()); manager.setQualityCode(7, 7, storage.get()); manager.setQualityCode(8, 8, storage.get()); manager.setQualityCode(9, 9, storage.get()); EXPECT_TRUE(0 == std::memcmp(expected.get(), storage.get(), length)); }
TEST(LowLevelBufferHandler, ParseTimestampsToVector) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 8, 5, 6, 7, 0, 9, 0, 0, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {9, 6, 7, 8}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); QVector<TimeStamp> expected = {9, 8, 7, 6}; EXPECT_EQ(expected, manager.getTimestamps((void*)storage.get())); }
TEST(LowLevelBufferHandler, ParseTimestamps) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 8, 5, 6, 7, 0, 9, 0, 0, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {9, 6, 7, 8}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); TimeStamp expected[] = {9, 8, 7, 6}; std::unique_ptr<TimeStamp[]> actual(manager.getRawTimeStamps((void*)storage.get())); EXPECT_TRUE(0 == std::memcmp(expected, actual.get(), 4 * sizeof(TimeStamp))); }
TEST(LowLevelBufferHandler, GetBufferToVector) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 8, 5, 6, 7, 0, 9, 0, 0, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {4, 1, 2, 3}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); EXPECT_EQ(QVector<SignalValue>({4, 3, 2, 1}), manager.getBuffer<QVector>(0, (void*)storage.get())); EXPECT_EQ(QVector<SignalValue>({8, 7, 6, 5}), manager.getBuffer<QVector>(1, (void*)storage.get())); EXPECT_EQ(QVector<SignalValue>({0, 0, 0, 9}), manager.getBuffer<QVector>(2, (void*)storage.get())); }
TEST(LowLevelBufferHandler, GetBuffersDump) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {4, 1, 2, 3}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); const int dumpLength = manager.getDumpLengthBytes(); char *expected = new char[dumpLength]; memset(expected, 0, dumpLength); SignalValue expectedBufferDump[] = { 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1 }; QualityCode expectedQualityCodes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp expectedTimeStamps[] = {4, 3, 2, 1}; memcpy(expected, expectedBufferDump, (BUFFERS_COUNT * BUFFER_SIZE) * sizeof(SignalValue)); memcpy(expected + (BUFFERS_COUNT * BUFFER_SIZE) * sizeof(SignalValue), expectedQualityCodes, BUFFERS_COUNT * sizeof(QualityCode)); memcpy(expected + (BUFFERS_COUNT * BUFFER_SIZE) * sizeof(SignalValue) + BUFFERS_COUNT * sizeof(QualityCode), expectedTimeStamps, BUFFER_SIZE * sizeof(TimeStamp)); char *dump = manager.getRawBuffersDump((void*)storage.get()); EXPECT_TRUE(0 == std::memcmp(expected, dump, dumpLength)); //! Cleanup delete[] expected; delete[] dump; }
TEST(LowLevelBufferHandler, MultiplePushWithFullingBuffer) { static const BufferId BUFFERS_COUNT = 10; static const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); void *storage = manager.createStorage(); for (int j = 0; j < 4; ++j) { boost::scoped_array<SignalValue> signalsPack(new SignalValue[BUFFERS_COUNT]); for (BufferId i = 0; i < BUFFERS_COUNT; ++i) signalsPack[i] = j; manager.push(j, signalsPack.get(), (void*)storage); } BufferPos expectedCurrentPos = 3; SignalValue expectedBuffers[] = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 }; QualityCode expectedQualityCodes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; TimeStamp expectedTimeStamps[] = {0, 1, 2, 3}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> expected(createStorage(BUFFERS_COUNT, BUFFER_SIZE, expectedCurrentPos, expectedBuffers, expectedQualityCodes, expectedTimeStamps, length)); EXPECT_TRUE(0 == std::memcmp(expected.get(), storage, length)); delete[] (char*)storage; }
TEST(LowLevelBufferHandler, GetBuffer) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 8, 5, 6, 7, 0, 9, 0, 0, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {4, 1, 2, 3}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); SignalValue expected1[] = {4, 3, 2, 1}; std::unique_ptr<SignalValue[]> actual1(manager.getRawBuffer(0, (void*)storage.get())); EXPECT_TRUE(0 == std::memcmp(expected1, actual1.get(), 4 * sizeof(SignalValue))); SignalValue expected2[] = {8, 7, 6, 5}; std::unique_ptr<SignalValue[]> actual2(manager.getRawBuffer(1, (void*)storage.get())); EXPECT_TRUE(0 == std::memcmp(expected2, actual2.get(), 4 * sizeof(SignalValue))); SignalValue expected3[] = {0, 0, 0, 9}; std::unique_ptr<SignalValue[]> actual3(manager.getRawBuffer(2, (void*)storage.get())); EXPECT_TRUE(0 == std::memcmp(expected3, actual3.get(), 4 * sizeof(SignalValue))); }
TEST(LowLevelBufferHandler, ParseQualityCode) { const BufferId BUFFERS_COUNT = 10; const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos currentPos = 0; SignalValue buffersDump[] = { 4, 1, 2, 3, 8, 5, 6, 7, 0, 9, 0, 0, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3 }; QualityCode qualityCodesDump[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; TimeStamp timeStampsDump[] = {9, 6, 7, 8}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, currentPos, buffersDump, qualityCodesDump, timeStampsDump, length)); EXPECT_EQ(0, manager.getQualityCode(0, storage.get())); EXPECT_EQ(1, manager.getQualityCode(1, storage.get())); EXPECT_EQ(2, manager.getQualityCode(2, storage.get())); EXPECT_EQ(3, manager.getQualityCode(3, storage.get())); EXPECT_EQ(4, manager.getQualityCode(4, storage.get())); EXPECT_EQ(5, manager.getQualityCode(5, storage.get())); EXPECT_EQ(6, manager.getQualityCode(6, storage.get())); EXPECT_EQ(7, manager.getQualityCode(7, storage.get())); EXPECT_EQ(8, manager.getQualityCode(8, storage.get())); EXPECT_EQ(9, manager.getQualityCode(9, storage.get())); }
TEST(LowLevelBufferHandler, Push) { static const BufferId BUFFERS_COUNT = 10; static const BufferPos BUFFER_SIZE = 4; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); BufferPos expectedCurrentPos = 0; SignalValue expectedBuffers[] = { 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 9, 0, 0, 0 }; QualityCode expectedQualityCodes[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; TimeStamp expectedTimeStamps[] = {1, 0, 0, 0}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> expected(createStorage(BUFFERS_COUNT, BUFFER_SIZE, expectedCurrentPos, expectedBuffers, expectedQualityCodes, expectedTimeStamps, length)); boost::scoped_array<SignalValue> signalsPackToPush(new SignalValue[BUFFERS_COUNT]); for (BufferId i = 0; i < BUFFERS_COUNT; ++i) signalsPackToPush[i] = i; void *storage = manager.createStorage(); manager.push(1, signalsPackToPush.get(), storage); EXPECT_TRUE(0 == std::memcmp(expected.get(), storage, length)); delete[] (char*)storage; }
TEST(LowLevelBufferHandler, GetMetaData) { const BufferId BUFFERS_COUNT = 1; const BufferPos BUFFER_SIZE = 1; LowLevelBufferHandler manager(BUFFERS_COUNT, BUFFER_SIZE); MetaData meta; meta.currentPos = 0; meta.buffersCount = 1; meta.bufferSize = 1; meta.clientCount = 10; SignalValue buffersDump[] = {0}; QualityCode qualityCodesDump[] = {0}; TimeStamp timeStampsDump[] = {0}; const int length = manager.getDataLengthBytes(); boost::scoped_array<char> storage(createStorage(BUFFERS_COUNT, BUFFER_SIZE, meta, buffersDump, qualityCodesDump, timeStampsDump, length)); EXPECT_EQ(meta, manager.getMetaData(reinterpret_cast<void *>(storage.get()))); }
void AggregationProcessorMT::aggregate() { tp = Context::getContext()->getServer()->getThreadPool(); tg = tp->createThreadGroup(); double resultSize = aggregationPlan->getArea()->getSize(); initIntern(); const vector<PPlanNode> &sources = planNode->getChildren(); for (vector<PPlanNode>::const_iterator source = sources.begin(); source != sources.end(); ++source) { PCellStream sourceDataSP = engine->createProcessor(*source, false); reader = dynamic_cast<StorageCpu::Processor *>(sourceDataSP.get()); if (reader && (*source)->getType() == SOURCE) { minJump = (size_t)reader->pageList->maxPageSize() * 20; reader->mtCallback = this; if (!storage) { createStorage(resultSize); } if (newAlg && hashStorage) { reader->aggregate(hashStorage, parentMaps); } else { while (reader->nextIntern()) { if (!storage) { createStorage(resultSize); } aggregateCell(reader->getKey(), reader->getValue().getNumeric()); } } } else { CellValueStream *sourceData = sourceDataSP.get(); while (sourceData->next()) { if (!storage) { createStorage(resultSize); } aggregateCell(sourceData->getKey(), sourceData->getValue().getNumeric()); } } } tp->join(tg); tp->destroyThreadGroup(tg); if (threadStorage) { if (storage) { storageReader = dynamic_cast<ICellMapStream *>(threadStorage.get())->getValues(); while (storageReader->next()) { storage->add(storageReader->getKey(), storageReader->getDouble()); } } else { storage = threadStorage; } } if (!storage) { storage = CreateDoubleCellMap(aggregationPlan->getArea()->dimCount()); } if (resultSize > 1000 && (Logger::isDebug() || Logger::isTrace())) { Logger::debug << "Aggregated area of " << resultSize << " cells. " << storage->size() << " aggregations exists." << endl; } storageReader = dynamic_cast<ICellMapStream *>(storage.get())->getValues(); }
SINT4 storageSelfTest1(StgMode in_stgModeOpen, StgMode in_stgModeCreate) { SINT4 iRet = SSTG_OK; RootStorage* pRoot = NULL; Storage* pStorage1 = NULL; Storage* pStorage2 = NULL; Storage* pStorage3 = NULL; Stream* pStream1 = NULL; Stream* pStream2 = NULL; Stream* pStream3 = NULL; Stream* pStream4 = NULL; int cch = 0; unsigned long cchL = 0; wchar_t pwchBuf[] = L"Stuff to write into streams"; wchar_t pwchBuf2[60]; /* The main thing being tested here is the open list. If the calling * application fails to close some streams and storages before closing * the structured storage file, the structured storage library is supposed * to clean everything up automatically. */ /* Create a bunch of streams and storages */ iRet = createStructuredStorageEx (WSZ_TEST_FILENAME, in_stgModeCreate, &pRoot, 0); ASSERT (iRet == SSTG_OK && pRoot != NULL); iRet = getStorageFromRoot (pRoot, &pStorage1); ASSERT (iRet == SSTG_OK && pStorage1 != NULL); iRet = createStream (pStorage1, WSZ_TEST_STREAM_1, &pStream1); ASSERT (iRet == SSTG_OK && pStream1 != NULL); cch = 0; ASSERT (writeLEwstring(pStream1, pwchBuf, &cch) == SSTG_OK && cch == 28); iRet = createStorage (pStorage1, WSZ_TEST_STORAGE_2, &pStorage2); ASSERT (iRet == SSTG_OK && pStorage2 != NULL); iRet = createStorage (pStorage2, WSZ_TEST_STORAGE_3, &pStorage3); ASSERT (iRet == SSTG_OK && pStorage3 != NULL); iRet = createStream (pStorage2, WSZ_TEST_STREAM_2, &pStream2); ASSERT (iRet == SSTG_OK && pStream2 != NULL); cch = 0; ASSERT (writeLEwstring(pStream2, pwchBuf, &cch) == SSTG_OK && cch == 28); cchL = 28 * sizeof(wchar_t); iRet = flushStream(pStorage2, WSZ_TEST_STREAM_3, pwchBuf, &cchL); ASSERT(iRet == SSTG_OK && cchL == (28 * sizeof(wchar_t))); /* Test to ensure that destroying a mini stream works */ cchL = 28 * sizeof(wchar_t); iRet = flushStream(pStorage2, WSZ_TEST_STREAM_4, pwchBuf, &cchL); ASSERT(iRet == SSTG_OK && cchL == (28 * sizeof(wchar_t))); iRet = destroy(pStorage2, WSZ_TEST_STREAM_4); ASSERT(iRet == SSTG_OK); /* Test to make sure duplicates are not allowed */ iRet = createStream(pStorage2, WSZ_TEST_STREAM_3, &pStream4); ASSERT (iRet != SSTG_OK && pStream4 == NULL); /* Now close the entire compound file without closing any of the open * children */ iRet = closeStructuredStorage(&pRoot); ASSERT (iRet == SSTG_OK && pRoot == NULL); pStorage1 = NULL; pStorage2 = NULL; pStorage3 = NULL; pStream1 = NULL; pStream2 = NULL; pStream3 = NULL; /* Now do the same thing for reading. */ /* Open a bunch of streams and storages for reading. */ iRet = openStructuredStorageEx (WSZ_TEST_FILENAME, in_stgModeOpen, &pRoot); ASSERT (iRet == SSTG_OK); iRet = getStorageFromRoot (pRoot, &pStorage1); ASSERT (iRet == SSTG_OK && pStorage1 != NULL); iRet = openStream (pStorage1, WSZ_TEST_STREAM_1, &pStream1); ASSERT (iRet == SSTG_OK && pStream1 != NULL); cch = 28; iRet = readLEwstring(pStream1, &cch, pwchBuf2); ASSERT (iRet == SSTG_OK && cch == 28); ASSERT (memcmp(pwchBuf, pwchBuf2, wcslen(pwchBuf) + 1) == 0); memset(pwchBuf2, 0, sizeof(pwchBuf2)); iRet = openStorage (pStorage1, WSZ_TEST_STORAGE_2, &pStorage2); ASSERT (iRet == SSTG_OK && pStorage2 != NULL); iRet = openStorage (pStorage2, WSZ_TEST_STORAGE_3, &pStorage3); ASSERT (iRet == SSTG_OK && pStorage3 != NULL); iRet = openStream (pStorage2, WSZ_TEST_STREAM_2, &pStream2); ASSERT (iRet == SSTG_OK && pStream2 != NULL); cch = 28; ASSERT (readLEwstring(pStream2, &cch, pwchBuf2) == SSTG_OK && cch == 28); ASSERT (memcmp(pwchBuf, pwchBuf2, wcslen(pwchBuf) + 1) == 0); memset(pwchBuf2, 0, sizeof(pwchBuf2)); iRet = openStream (pStorage2, WSZ_TEST_STREAM_3, &pStream3); ASSERT (iRet == SSTG_OK && pStream3 != NULL); cch = 28 * sizeof(wchar_t); iRet = streamRead(pStream3, pwchBuf2, &cchL); ASSERT (iRet == SSTG_OK && cchL == (28 * sizeof(wchar_t))); ASSERT (memcmp(pwchBuf, pwchBuf2, wcslen(pwchBuf) + 1) == 0); memset(pwchBuf2, 0, sizeof(pwchBuf2)); /* Close the entire compound file without closing any of the open * children */ iRet = closeStructuredStorage(&pRoot); ASSERT (iRet == SSTG_OK && pRoot == NULL); /* Remove test file */ SSRW_WREMOVE (WSZ_TEST_FILENAME); return iRet; }