virtual bool SetUp(MkDataNode& sharingNode) { // [ data 형태 정의 ] //------------------------------------------------------------------------------------------------// // int a; // float b; // MkVec3 c; // wchar_t d[64]; //------------------------------------------------------------------------------------------------// // srcArray 생성 MkInterfaceForDataWriting dwInterface; dwInterface.SetInputSize(ePDT_Int, SIZE_COUNT); dwInterface.SetInputSize(ePDT_Float, SIZE_COUNT); dwInterface.SetInputSize(ePDT_Vec3, SIZE_COUNT); dwInterface.SetInputSize(ePDT_Str, SIZE_COUNT); dwInterface.UpdateInputSize(); for (int i=0; i<SIZE_COUNT; ++i) { float f = static_cast<float>(i); dwInterface.Write(static_cast<int>(i)); dwInterface.Write(static_cast<float>(f * -10.f)); dwInterface.Write(MkVec3(f, f * -2.f, f * 3.f)); dwInterface.Write(MkStr(L"잘생겨서 죄송요~")); } MkByteArray srcArray; dwInterface.Flush(srcArray); dwInterface.Clear(); // srcArray -> 파일로 출력 MkInterfaceForFileWriting fwInterface; fwInterface.SetUp(L"test.data", true, true); fwInterface.Write(srcArray, MkArraySection(0)); fwInterface.Clear(); srcArray.Clear(); // 파일을 destBuffer에 읽음 MkByteArray destBuffer; MkInterfaceForFileReading frInterface; frInterface.SetUp(L"test.data"); frInterface.Read(destBuffer, MkArraySection(0)); frInterface.Clear(); MK_DEV_PANEL.MsgToLog(MkStr::EMPTY); // 빈 칸 하나 넣고, // 읽어들인 결과 출력. 첫번째와 마지막 unit 대상 MkInterfaceForDataReading drInterface; drInterface.SetUp(destBuffer, 0); for (int i=0; i<SIZE_COUNT; ++i) { int a = 0; drInterface.Read(a); float b = 0.f; drInterface.Read(b); MkVec3 c = MkVec3::Zero; drInterface.Read(c); MkStr d; drInterface.Read(d); if (i == 0) { MK_DEV_PANEL.MsgToLog(L"[ First unit ]"); MK_DEV_PANEL.MsgToLog(L" a : " + MkStr(a)); MK_DEV_PANEL.MsgToLog(L" b : " + MkStr(b)); MK_DEV_PANEL.MsgToLog(L" c : " + MkStr(c)); MK_DEV_PANEL.MsgToLog(L" d : " + MkStr(d)); } else if (i == (SIZE_COUNT - 1)) { MK_DEV_PANEL.MsgToLog(L"[ Last unit ]"); MK_DEV_PANEL.MsgToLog(L" a : " + MkStr(a)); MK_DEV_PANEL.MsgToLog(L" b : " + MkStr(b)); MK_DEV_PANEL.MsgToLog(L" c : " + MkStr(c)); MK_DEV_PANEL.MsgToLog(L" d : " + MkStr(d)); } } destBuffer.Clear(); // 출력 폴더 열기 MkPathName::GetRootDirectory().OpenDirectoryInExplorer(); return true; }
virtual bool SetUp(MkDataNode& sharingNode) { // [ data 형태 정의 ] //------------------------------------------------------------------------------------------------// // int a; // float b; // MkVec3 c; // wchar_t d[64]; //------------------------------------------------------------------------------------------------// // data 크기 계산 const unsigned int sizeOfUnit = sizeof(int) // a + sizeof(float) // b + sizeof(MkVec3) // c + sizeof(wchar_t) * 64; // d const unsigned int sizeOfData = sizeOfUnit * SIZE_COUNT; // chunk data 생성 unsigned char* chunkData = new unsigned char[sizeOfData]; ZeroMemory(chunkData, sizeOfData); unsigned int recordPosition = 0; for (int i=0; i<SIZE_COUNT; ++i) { float f = static_cast<float>(i); // a const int a = i; memcpy_s(&chunkData[recordPosition], sizeof(int), reinterpret_cast<const unsigned char*>(&a), sizeof(int)); recordPosition += sizeof(int); // b const float b = f * -10.f; memcpy_s(&chunkData[recordPosition], sizeof(float), reinterpret_cast<const unsigned char*>(&b), sizeof(float)); recordPosition += sizeof(float); // c const MkVec3 c = MkVec3(f, f * -2.f, f * 3.f); memcpy_s(&chunkData[recordPosition], sizeof(MkVec3), reinterpret_cast<const unsigned char*>(&c), sizeof(MkVec3)); recordPosition += sizeof(MkVec3); // d wcscpy_s(reinterpret_cast<wchar_t*>(&chunkData[recordPosition]), 64, L"잘생겨서 죄송요~"); recordPosition += sizeof(wchar_t) * 64; } // chunkData -> 파일로 출력 std::ofstream ostream; ostream.open(L"test.data", std::ios::out | std::ios::binary | std::ios::trunc); if (ostream.is_open()) { ostream.write(reinterpret_cast<const char*>(chunkData), sizeOfData); ostream.close(); } delete [] chunkData; // chunk data 버퍼 생성 및 초기화 unsigned char* chunkBuffer = new unsigned char[sizeOfData]; ZeroMemory(chunkBuffer, sizeOfData); // 파일에서 읽기 -> chunkBuffer std::ifstream rstream; rstream.open(L"test.data", std::ios::in | std::ios::binary); if (rstream.is_open()) { rstream.read(reinterpret_cast<char*>(chunkBuffer), sizeOfData); rstream.close(); } MK_DEV_PANEL.MsgToLog(MkStr::EMPTY); // 빈 칸 하나 넣고, // 읽어들인 결과 출력. 첫번째와 마지막 unit 대상 unsigned int readPosition = 0; // 첫번째 unit int a = 0; memcpy_s(reinterpret_cast<unsigned char*>(&a), sizeof(int), &chunkBuffer[readPosition], sizeof(int)); readPosition += sizeof(int); float b = 0.f; memcpy_s(reinterpret_cast<unsigned char*>(&b), sizeof(float), &chunkBuffer[readPosition], sizeof(float)); readPosition += sizeof(float); MkVec3 c = MkVec3::Zero; memcpy_s(reinterpret_cast<unsigned char*>(&c), sizeof(MkVec3), &chunkBuffer[readPosition], sizeof(MkVec3)); readPosition += sizeof(MkVec3); wchar_t d[64] = {0, }; memcpy_s(reinterpret_cast<unsigned char*>(d), sizeof(wchar_t) * 64, &chunkBuffer[readPosition], sizeof(wchar_t) * 64); MK_DEV_PANEL.MsgToLog(L"[ First unit ]"); MK_DEV_PANEL.MsgToLog(L" a : " + MkStr(a)); MK_DEV_PANEL.MsgToLog(L" b : " + MkStr(b)); MK_DEV_PANEL.MsgToLog(L" c : " + MkStr(c)); MK_DEV_PANEL.MsgToLog(L" d : " + MkStr(d)); // 마지막 unit readPosition = sizeOfUnit * (SIZE_COUNT - 1); a = 0; memcpy_s(reinterpret_cast<unsigned char*>(&a), sizeof(int), &chunkBuffer[readPosition], sizeof(int)); readPosition += sizeof(int); b = 0.f; memcpy_s(reinterpret_cast<unsigned char*>(&b), sizeof(float), &chunkBuffer[readPosition], sizeof(float)); readPosition += sizeof(float); c = MkVec3::Zero; memcpy_s(reinterpret_cast<unsigned char*>(&c), sizeof(MkVec3), &chunkBuffer[readPosition], sizeof(MkVec3)); readPosition += sizeof(MkVec3); ZeroMemory(d, sizeof(wchar_t) * 64); memcpy_s(reinterpret_cast<unsigned char*>(d), sizeof(wchar_t) * 64, &chunkBuffer[readPosition], sizeof(wchar_t) * 64); MK_DEV_PANEL.MsgToLog(L"[ Last unit ]"); MK_DEV_PANEL.MsgToLog(L" a : " + MkStr(a)); MK_DEV_PANEL.MsgToLog(L" b : " + MkStr(b)); MK_DEV_PANEL.MsgToLog(L" c : " + MkStr(c)); MK_DEV_PANEL.MsgToLog(L" d : " + MkStr(d)); delete [] chunkBuffer; // 출력 폴더 열기 MkPathName targetDir = MkPathName::GetRootDirectory() + L"..\\..\\"; // project foler targetDir.OpenDirectoryInExplorer(); return true; }