int main() { Table table; InitTable(&table); AddTable(&table, 1, 0, 1); AddTable(&table, 1, 1, 2); AddTable(&table, 1, 2, 3); DisplayTable(&table); printf("\n"); int valid = 1; int dst_addr = 0; int out_link_id = 10; UpdateTable(&table, valid, dst_addr, out_link_id); DisplayTable(&table); /* int index = FindTableIndex(&table, dst_addr); if (index == ERROR) { printf("inserting new entry to table\n"); AddTable(&table, valid, dst_addr, out_link_id); } else { printf("updating entry %d\n", dst_addr); UpdateTableByIndex(&table, index, valid, out_link_id); } */ printf("OutLink for dst_addr = %d is %d\n", dst_addr, GetOutLink(&table, dst_addr)); return 0; }
TestDatabase::TestDatabase(std::shared_ptr<DatabaseDriver> & driver, int target_version): books(new TestTableBooks), authors(new TestTableAuthors) { // set the driver (currently just SQLite) SetDriver(driver); // set up our tables AddTable(books); AddTable(authors); // handle migrations after setting the driver CheckVersion(target_version); }
iwSaveLoad::iwSaveLoad(const unsigned short add_height, const std::string& window_title) : IngameWindow(CGI_SAVE, IngameWindow::posLastOrCenter, Extent(600, 400 + add_height), window_title, LOADER.GetImageN("resource", 41)) { AddTable(0, DrawPoint(20, 30), Extent(560, 300), TC_GREEN2, NormalFont, 5, _("Filename"), 270, ctrlTable::SRT_STRING, _("Map"), 250, ctrlTable::SRT_STRING, _("Time"), 250, ctrlTable::SRT_DATE, _("Start GF"), 320, ctrlTable::SRT_NUMBER, "", 0, ctrlTable::SRT_STRING); }
void UpdateTable(Table* table, int valid, int dst_addr, int out_link_id) { int index = FindTableIndex(table, dst_addr); if (index == ERROR) { AddTable(table, valid, dst_addr, out_link_id); } else { UpdateTableByIndex(table, index, valid, out_link_id); } }
/** * Konstruktor von @p iwLobbyRanking. * * @author Devil */ iwLobbyRanking::iwLobbyRanking(void) : IngameWindow(CGI_LOBBYRANKING, 0xFFFF, 0xFFFF, 440, 410, _("Internet Ranking"), LOADER.GetImageN("resource", 41), true) { AddTable(0, 20, 25, 400, 340, TC_GREY, NormalFont, 4, _("Name"), 360, ctrlTable::SRT_STRING, _("Points"), 185, ctrlTable::SRT_NUMBER, _("Lost"), 215, ctrlTable::SRT_NUMBER, _("Won"), 240, ctrlTable::SRT_NUMBER); AddTimer(1, 60000); AddTimer(2, 1000); // "Zurück" AddTextButton(3, 20, 370, 400, 20, TC_RED1, _("Back"),NormalFont); }
/** * Konstruktor von @p dskLobby. * * @author FloSoft * @author Devil */ dskLobby::dskLobby() : Desktop(LOADER.GetImageN("setup013", 0)), serverinfo(NULL), servercreate(NULL) { // Version AddVarText(0, 0, 600, _("Return To The Roots - v%s-%s"), COLOR_YELLOW, 0 | glArchivItem_Font::DF_BOTTOM, NormalFont, 2, GetWindowVersion(), GetWindowRevisionShort()); // URL AddText(1, 400, 600, _("http://www.siedler25.org"), COLOR_GREEN, glArchivItem_Font::DF_CENTER | glArchivItem_Font::DF_BOTTOM, NormalFont); // Copyright AddVarText(2, 800, 600, _("© 2005 - %s Settlers Freaks"), COLOR_YELLOW, glArchivItem_Font::DF_RIGHT | glArchivItem_Font::DF_BOTTOM, NormalFont, 1, GetCurrentYear()); // "Zurück" AddTextButton(3, 530, 530, 250, 22, TC_RED1, _("Back"), NormalFont); // "Verbinden" AddTextButton(4, 530, 470, 250, 22, TC_GREEN2, _("Connect"), NormalFont); // "Internet Ranking" AddTextButton(5, 530, 500, 250, 22, TC_GREEN2, _("Internet Ranking"), NormalFont); // "Server hinzufügen" AddTextButton(6, 530, 440, 250, 22, TC_GREEN2, _("Add Server"), NormalFont); // Gameserver-Tabelle - "ID", "Server", "Karte", "Spieler", "Version", "Ping" AddTable(10, 20, 20, 500, 262, TC_GREY, NormalFont, 6, _("ID"), 0, ctrlTable::SRT_NUMBER, _("Server"), 300, ctrlTable::SRT_STRING, _("Map"), 300, ctrlTable::SRT_STRING, _("Player"), 200, ctrlTable::SRT_NUMBER, _("Version"), 100, ctrlTable::SRT_STRING, _("Ping"), 100, ctrlTable::SRT_NUMBER); // Spieler-Tabelle - "Name", "Punkte", "Version" AddTable(11, 530, 20, 250, 410, TC_GREY, NormalFont, 3, _("Name"), 500, ctrlTable::SRT_STRING, _("Points"), 250, ctrlTable::SRT_STRING, _("Version"), 250, ctrlTable::SRT_STRING); // Chatfenster AddChatCtrl(20, 20, 290, 500, 238, TC_GREY, NormalFont); // Chatfenster-Edit AddEdit(21, 20, 530, 500, 22, TC_GREY, NormalFont); AddTimer(30, 5000); UpdateServerList(true); UpdatePlayerList(true); LOBBYCLIENT.SetInterface(this); LOBBYCLIENT.SendServerListRequest(); LOBBYCLIENT.SendPlayerListRequest(); GAMECLIENT.SetInterface(this); }
iwPlayReplay::iwPlayReplay() : IngameWindow(CGI_PLAYREPLAY, 0xFFFF, 0xFFFF, 600, 330, _("Play Replay"), LOADER.GetImageN("resource", 41)) { AddTable(0, 20, 30, 560, 220, TC_GREEN2, NormalFont, 5, _("Filename"), 300, ctrlTable::SRT_STRING, _("Stocktaking date"), 220, ctrlTable::SRT_DATE, _("Player"), 360, ctrlTable::SRT_STRING, _("Length"), 120, ctrlTable::SRT_NUMBER, "", 0, ctrlTable::SRT_DEFAULT); AddTextButton(2, 20, 260, 100, 22, TC_RED1, _("Clear"), NormalFont); AddTextButton(5, 130, 260, 160, 22, TC_RED1, "Delete Invalid", NormalFont, _("Removes all replays that cannot be loaded with the current game version")); AddTextButton(3, 20, 290, 160, 22, TC_RED1, _("Delete selected"), NormalFont); AddTextButton(4, 190, 290, 190, 22, TC_RED1, _("Back"), NormalFont); AddTextButton(1, 390, 290, 190, 22, TC_GREEN2, _("Start"), NormalFont); PopulateTable(); GAMECLIENT.SetInterface(NULL); }
uint32 DbHandler::CreateDatabase(BString& name, const BString& table) { int err = 0; err = sqlite3_open(name.LockBuffer(name.Length() + 1), &db); name.UnlockBuffer(); if(err) { return err; } else { err = AddTable(table); } this->db_name = name; return 0; }
/** * Konstruktor von @p dskSelectMap. * * @param[in] type Typ des Servers * @param[in] name Server-Name * @param[in] pass Server-Passwort */ dskSelectMap::dskSelectMap(const CreateServerInfo& csi) : Desktop(LOADER.GetImageN("setup015", 0)), csi(csi) { // Die Tabelle für die Maps AddTable( 1, 110, 35, 680, 400, TC_GREY, NormalFont, 6, _("Name"), 250, ctrlTable::SRT_STRING, _("Author"), 216, ctrlTable::SRT_STRING, _("Player"), 170, ctrlTable::SRT_NUMBER, _("Type"), 180, ctrlTable::SRT_STRING, _("Size"), 134, ctrlTable::SRT_MAPSIZE, "", 0, ctrlTable::SRT_STRING); // "Karten Auswahl" AddText( 2, 400, 5, _("Selection of maps"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, LargeFont); // "Zurück" AddTextButton(3, 380, 560, 200, 22, TC_RED1, _("Back"), NormalFont); // "Spiel laden..." AddTextButton(4, 590, 530, 200, 22, TC_GREEN2, _("Load game..."), NormalFont); // "Weiter" AddTextButton(5, 590, 560, 200, 22, TC_GREEN2, _("Continue"), NormalFont); ctrlOptionGroup* optiongroup = AddOptionGroup(10, ctrlOptionGroup::CHECK, scale_); // "Alte" optiongroup->AddTextButton(0, 10, 35, 90, 22, TC_GREY, _("Old maps"), NormalFont); // "Neue" optiongroup->AddTextButton(1, 10, 60, 90, 22, TC_GREY, _("New maps"), NormalFont); // "Eigene" optiongroup->AddTextButton(2, 10, 85, 90, 22, TC_GREY, _("Own maps"), NormalFont); // "Kontinente" optiongroup->AddTextButton(3, 10, 110, 90, 22, TC_GREY, _("Continents"), NormalFont); // "Kampagne" optiongroup->AddTextButton(4, 10, 135, 90, 22, TC_GREY, _("Campaign"), NormalFont); // "RTTR" optiongroup->AddTextButton(5, 10, 160, 90, 22, TC_GREY, _("RTTR"), NormalFont); // "Andere" optiongroup->AddTextButton(6, 10, 185, 90, 22, TC_GREY, _("Other"), NormalFont); // "Andere" optiongroup->AddTextButton(7, 10, 210, 90, 22, TC_GREY, _("Sea"), NormalFont); // "Heruntergeladene" optiongroup->AddTextButton(8, 10, 235, 90, 22, TC_GREY, _("Played"), NormalFont); AddPreviewMinimap(11, 110, 445, 140, 140, NULL); AddText(12, 260, 470, _("Map: "), COLOR_YELLOW, glArchivItem_Font::DF_LEFT, NormalFont); AddText(13, 260, 490, _("Mapfile: "), COLOR_YELLOW, glArchivItem_Font::DF_LEFT, NormalFont); // "Eigene" auswählen optiongroup->SetSelection(5, true); LOBBYCLIENT.SetInterface(this); GAMECLIENT.SetInterface(this); }
void Document::Qtf0(const char *s, bool append, byte charset) { QtfParser parser(s); for(;;) { switch(parser.Parse()) { case QtfParser::PARAGRAPH: if(append) Cat(parser.GetParagraph()); else AddParagraph() = parser.PickParagraph(); break; case QtfParser::TABLE: AddTable() = parser.PickTable(); break; case QtfParser::END: return; } append = false; } }
dskLAN::dskLAN() : dskMenuBase(LOADER.GetImageN("setup013", 0)), discovery(LAN_DISCOVERY_CFG) { // "Server hinzufügen" AddTextButton(ID_btAddServer, DrawPoint(530, 250), Extent(250, 22), TC_GREEN2, _("Add Server"), NormalFont); // "Verbinden" AddTextButton(ID_btConnect, DrawPoint(530, 280), Extent(250, 22), TC_GREEN2, _("Connect"), NormalFont); // "Zurück" AddTextButton(ID_btBack, DrawPoint(530, 530), Extent(250, 22), TC_RED1, _("Back"), NormalFont); // Gameserver-Tabelle - "ID", "Server", "Karte", "Spieler", "Version" AddTable(ID_tblServer, DrawPoint(20, 20), Extent(500, 530), TC_GREY, NormalFont, 5, _("ID"), 0, ctrlTable::SRT_NUMBER, _("Server"), 300, ctrlTable::SRT_STRING, _("Map"), 300, ctrlTable::SRT_STRING, _("Player"), 200, ctrlTable::SRT_STRING, _("Version"), 100, ctrlTable::SRT_STRING); discovery.Start(); AddTimer(ID_tmrRefreshServers, 60000); // Servers broadcast changes, so force a full update only once a minute AddTimer(ID_tmrRefreshList, 2000); }
iwPlayReplay::iwPlayReplay(void) : IngameWindow(CGI_PLAYREPLAY, 0xFFFF, 0xFFFF, 600, 300, _("Play Replay"), LOADER.GetImageN("resource", 41)) { ctrlTable* table = AddTable(0, 20, 30, 560, 220, TC_GREEN2, NormalFont, 5, _("Filename"), 300, ctrlTable::SRT_STRING, _("Stocktaking date"), 220, ctrlTable::SRT_DATE, _("Player"), 360, ctrlTable::SRT_STRING, _("Length"), 120, ctrlTable::SRT_NUMBER, "", 0, ctrlTable::SRT_DEFAULT); // Starten AddTextButton(1, 195, 260, 100, 22, TC_GREEN2, _("Start"), NormalFont); // Aufräumen AddTextButton(2, 305, 260, 100, 22, TC_RED1, _("Clear"), NormalFont); // Verzeichnis auflisten std::string tmp = GetFilePath(FILE_PATHS[51]); tmp += "*.rpl"; ListDir(tmp, false, FillReplayTable, table); // Erst einmal nach Dateiname sortieren table->SortRows(0); GAMECLIENT.SetInterface(NULL); }
bool QuestProbabilityTable::LoadFromBinary(Serializer& serializer, bool bReload) { if (false == bReload) { Reset(); } BYTE byMargin = 1; serializer >> byMargin; bool bLoop = true; do { sQUEST_PROBABILITY_TBLDAT* pTableData = new sQUEST_PROBABILITY_TBLDAT; if (NULL == pTableData) { // Log : [11/29/2007 niam] Destroy(); return false; } if (false == pTableData->LoadFromBinary(serializer)) { delete pTableData; bLoop = false; break; } // [4/26/2008 zeroera] : 설명 : 실패하더라도 Load의 종료여부는 File Loading에서 결정한다 if (false == AddTable(pTableData, bReload)) { delete pTableData; } } while (false != bLoop); return true; }
bool HelpTable::LoadFromBinary(Serializer& serializer, bool bReload) { if (false == bReload) { Reset(); } BYTE byMargin = 1; serializer >> byMargin; bool bLoop = true; do { sHELP_TBLDAT* pTableData = new sHELP_TBLDAT; if (NULL == pTableData) { //- yoshiki : To log system! Destroy(); return false; } if (false == pTableData->LoadFromBinary(serializer)) { delete pTableData; bLoop = false; break; } // [4/26/2008 zeroera] : 설명 : 실패하더라도 Load의 종료여부는 File Loading에서 결정한다 if (false == AddTable(pTableData, bReload)) { delete pTableData; } } while (false != bLoop); return true; }
dskLAN::dskLAN() : Desktop(LOADER.GetImageN("setup013", 0)), discovery(LAN_DISCOVERY_CFG) { // Version AddVarText(0, 0, 600, _("Return To The Roots - v%s-%s"), COLOR_YELLOW, 0 | glArchivItem_Font::DF_BOTTOM, NormalFont, 2, GetWindowVersion(), GetWindowRevisionShort()); // URL AddText(1, 400, 600, _("http://www.siedler25.org"), COLOR_GREEN, glArchivItem_Font::DF_CENTER | glArchivItem_Font::DF_BOTTOM, NormalFont); // Copyright AddVarText(2, 800, 600, _("© 2005 - %s Settlers Freaks"), COLOR_YELLOW, glArchivItem_Font::DF_RIGHT | glArchivItem_Font::DF_BOTTOM, NormalFont, 1, GetCurrentYear()); // "Server hinzufügen" AddTextButton(btAddServerId, 530, 250, 250, 22, TC_GREEN2, _("Add Server"), NormalFont); // "Verbinden" AddTextButton(btConnectId, 530, 280, 250, 22, TC_GREEN2, _("Connect"), NormalFont); // "Zurück" AddTextButton(btBackId, 530, 530, 250, 22, TC_RED1, _("Back"), NormalFont); // Gameserver-Tabelle - "ID", "Server", "Karte", "Spieler", "Version" AddTable(tblServerId, 20, 20, 500, 530, TC_GREY, NormalFont, 5, _("ID"), 0, ctrlTable::SRT_NUMBER, _("Server"), 300, ctrlTable::SRT_STRING, _("Map"), 300, ctrlTable::SRT_STRING, _("Player"), 200, ctrlTable::SRT_STRING, _("Version"), 100, ctrlTable::SRT_STRING); discovery.Start(); AddTimer(tmrRefreshServersId, 60000); // Servers broadcast changes, so force a full update only once a minute AddTimer(tmrRefreshListId, 2000); }
void MultiViewerMain::OnTableAdd( wxCommandEvent& ) { Trace(emTraceProgramProcess, "UI Table Add"); AddTable(); }
/* * @ brief: 台号信息处理函数 * @ param: hwnd [in] 窗口句柄 * @ param: msg [in] 消息类型 **/ BOOL CALLBACK ChildTableInfoProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_INITDIALOG: { CListView table_list(hwnd, IDC_L_TABLE_INFO); table_list.SetSelectAndGrid(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); table_list.InsertColumn(1,80,"房间名称"); table_list.InsertColumn(2,100,"台 号"); table_list.InsertColumn(2,60,"人 数"); try { InitFloorName(hwnd, IDC_TABLE_FLOOR_COMBO);//初始化左边第一个“楼层”下拉列表 InitFloorName(hwnd, IDC_C_FLOOR_NAME);//初始化游标第二个“楼层”下拉列表 CComboBox floor_combo(hwnd, IDC_TABLE_FLOOR_COMBO); std::string floor_name; floor_combo.GetComboBoxText(floor_name); InitTableList(hwnd, IDC_L_TABLE_INFO, floor_name.c_str(), 0); InitRoomCombo(hwnd,floor_name.c_str(),IDC_C_ROOM_NAME);//根据楼层名,初始化房间下拉列表 } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理"), MB_ICONERROR); return FALSE; } return TRUE; } case WM_NOTIFY: { switch(LOWORD(wParam)) { case IDC_L_TABLE_INFO: { if (((LPNMHDR)lParam)->code == NM_CLICK){ // 点击列表中的一项 int index = -1; CEdit num, no; CComboBox room_name, floor_name; CListView table_list; table_list.Initialization(hwnd, IDC_L_TABLE_INFO); index = table_list.GetSelectionMark(); if (-1 == index) { MessageBox(hwnd, TEXT("请先在左侧选择一个台号!"), TEXT("基础信息管理"), MB_ICONINFORMATION); break; } room_name.Initialization(hwnd, IDC_C_ROOM_NAME); no.Initialization(hwnd, IDC_E_TABLE_NO); num.Initialization(hwnd, IDC_E_TABLE_NUM); CComboBox combo(hwnd, IDC_TABLE_FLOOR_COMBO); std::string name; combo.GetComboBoxText(name); floor_name.Initialization(hwnd, IDC_C_FLOOR_NAME); floor_name.DeleteAllString(); InitFloorName(hwnd,IDC_C_FLOOR_NAME); floor_name.SetCurSel(floor_name.FindString(name.c_str())); InitRoomCombo(hwnd,name.c_str(),IDC_C_ROOM_NAME); room_name.SetCurSel(room_name.FindString(table_list.GetItem(index, 0).c_str())); no.SetEditText(table_list.GetItem(index, 1).c_str()); num.SetEditText(table_list.GetItem(index, 2).c_str()); } break; } } return TRUE; } case WM_COMMAND: { switch (LOWORD(wParam)) { case IDC_B_ADD_TABLE: { try { if(AddTable(hwnd)) { MessageBox(hwnd, TEXT("添加台号信息成功"), TEXT("基础信息管理 "), MB_ICONINFORMATION); } } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理 "), MB_ICONERROR); return FALSE; } break; } case IDC_B_DISHPATCH_TABLE: { try { if (UpdateTable(hwnd)) { MessageBox(hwnd, TEXT("修改台号信息成功"), TEXT("基础信息管理"), MB_OK); } } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理"), MB_ICONERROR); } break; } case IDC_B_DELETE_TABLE: { try { if (DeleteTable(hwnd)) { MessageBox(hwnd, TEXT("删除台号信息成功"), TEXT("基础信息管理"), MB_OK); } } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理"), MB_ICONERROR); } break; } case IDC_TABLE_FLOOR_COMBO://点击左边第一个”楼层“下拉列表 { if (HIWORD(wParam) == CBN_SELCHANGE) { try { CComboBox combo(hwnd, IDC_TABLE_FLOOR_COMBO); std::string floor_name; combo.GetComboBoxText(floor_name); CComboBox room(hwnd, IDC_C_ROOM_NAME); room.DeleteAllString();//清空“房间”下拉列表,然后在插入新的数据 InitTableList(hwnd, IDC_L_TABLE_INFO, floor_name.c_str(), 0); } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理"), MB_ICONERROR); return FALSE; } CEdit edit; // 清空右侧编辑框数据 edit.Initialization(hwnd, IDC_E_TABLE_NO); edit.Empty(); edit.Initialization(hwnd, IDC_E_TABLE_NUM); edit.Empty(); } break; } case IDC_C_FLOOR_NAME://点击第二个“楼层”下拉列表 { if (HIWORD(wParam) == CBN_SELCHANGE) { try { CComboBox combo(hwnd, IDC_C_FLOOR_NAME); std::string floor_name_str; combo.GetComboBoxText(floor_name_str); CComboBox room_name(hwnd, IDC_C_ROOM_NAME); RoomInfo room_info; room_info.GetRoomName(floor_name_str.c_str()); // 获取楼层下的房间名称记录集 room_name.DeleteAllString(); while (!room_info.IsEOF()) { room_name.AddString(room_info.room_name()); } } catch (Err &err) { MessageBox(hwnd, err.what(), TEXT("基础信息管理"), MB_ICONERROR); return FALSE; } } break; } case IDC_B_TABLE_CANCLE: { EndDialog(hwnd,0); break; } } return TRUE; } case WM_CLOSE: { EndDialog(hwnd,0); return TRUE; } } return FALSE; }
bool TextTable::InitializeFromXmlDoc(XMLDoc* pXmlDoc, WCHAR* pwszFileName, bool bReload) { if (NULL == pXmlDoc) { return false; } BSTR rowXPathFormat; rowXPathFormat = ::SysAllocString(L"/dataroot/%s/F%d"); WCHAR wszXPath[MAX_UNICODE_XPATH_LENGTH + 1]; DWORD dwSheetIndex = 0; WCHAR** ppwszSheetList = GetSheetListInWChar(); BSTR bstr = NULL; while (ppwszSheetList[dwSheetIndex]) { swprintf_s<_countof(wszXPath)>(wszXPath, rowXPathFormat, ppwszSheetList[dwSheetIndex], m_nField); IXMLDOMNodeList* pIndexNodeList = NULL; pIndexNodeList = pXmlDoc->SelectNodeList(wszXPath); if (!pIndexNodeList) { ::SysFreeString(rowXPathFormat); return false; } LONG nIndexLength = 0; if (FAILED(pIndexNodeList->get_length(&nIndexLength))) { pIndexNodeList->Release(); ::SysFreeString(rowXPathFormat); return false; } swprintf_s<_countof(wszXPath)>(wszXPath, rowXPathFormat, ppwszSheetList[dwSheetIndex], m_nField + 1); IXMLDOMNodeList* pTextNodeList = NULL; pTextNodeList = pXmlDoc->SelectNodeList(wszXPath); if (!pTextNodeList) { pIndexNodeList->Release(); ::SysFreeString(rowXPathFormat); return false; } LONG nTextLength = 0; if (FAILED(pTextNodeList->get_length(&nTextLength))) { pIndexNodeList->Release(); pTextNodeList->Release(); ::SysFreeString(rowXPathFormat); return false; } if (nTextLength != nIndexLength) { pIndexNodeList->Release(); pTextNodeList->Release(); ::SysFreeString(rowXPathFormat); return false; } // 제목은 버린다. for (INT j = 1; j < nIndexLength; ++j) { VOID* pvTable = AllocNewTable(ppwszSheetList[dwSheetIndex], m_dwCodePage); if (!pvTable) { pIndexNodeList->Release(); pTextNodeList->Release(); ::SysFreeString(rowXPathFormat); return false; } IXMLDOMNode* pCellNode = NULL; IXMLDOMNode* pDataNode = NULL; if (FAILED(pIndexNodeList->get_item(j, &pCellNode))) { pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } if (!pCellNode) { DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); break; } if (FAILED(pCellNode->get_firstChild(&pDataNode))) { pCellNode->Release(); pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } if (!pDataNode) { pCellNode->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); break; } if (FAILED(pDataNode->get_text(&bstr))) { ::SysFreeString(bstr); pDataNode->Release(); pCellNode->Release(); pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } SetTableData(pvTable, ppwszSheetList[dwSheetIndex], INDEX, bstr); ::SysFreeString(bstr); pCellNode->Release(); pDataNode->Release(); pCellNode = NULL; pDataNode = NULL; if (FAILED(pTextNodeList->get_item(j, &pCellNode))) { pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } if (!pCellNode) { DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); break; } if (FAILED(pCellNode->get_firstChild(&pDataNode))) { //- yoshiki : TODO!(Get the field name) Table::CallErrorCallbackFunction("[File] : %S\n[Error] : Table data is null.(Row Index : %d, Field Name = %S)", pwszFileName, j - 1, L"FIELD_NAME!"); pCellNode->Release(); pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } if (!pDataNode) { //- yoshiki : TODO!(Get the field name) Table::CallErrorCallbackFunction("[File] : %S\n[Error] : Table data is null.(Row Index : %d, Field Name = %S)", pwszFileName, j - 1, L"FIELD_NAME!"); pCellNode->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); _ASSERT(0); // Index는 있고 Data는 공란인경우. break; } if (FAILED(pDataNode->get_text(&bstr))) { ::SysFreeString(bstr); pDataNode->Release(); pCellNode->Release(); pIndexNodeList->Release(); pTextNodeList->Release(); DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); ::SysFreeString(rowXPathFormat); return false; } SetTableData(pvTable, ppwszSheetList[dwSheetIndex], TEXT, bstr); ::SysFreeString(bstr); pCellNode->Release(); pDataNode->Release(); if (!AddTable(pvTable, bReload)) { DeallocNewTable(pvTable, ppwszSheetList[dwSheetIndex]); } } pIndexNodeList->Release(); pTextNodeList->Release(); ++dwSheetIndex; } ::SysFreeString(rowXPathFormat); return true; }
bool TextTable::LoadFromBinary(Serializer& serializer, bool bReload) { if (false == bReload) { Reset(); } BYTE byMargin = 1; serializer >> byMargin; while (0 < serializer.GetDataSize()) { sTEXT_TBLDAT* pTableData = new sTEXT_TBLDAT; if (NULL == pTableData) { //- yoshiki : To log system! Destroy(); return false; } WORD wTextLength = 0; if (serializer.GetDataSize() < sizeof(pTableData->tblidx) + sizeof(wTextLength)) { //- yoshiki : To log system! delete pTableData; Destroy(); return false; } serializer >> pTableData->tblidx; serializer >> wTextLength; if (serializer.GetDataSize() < (int)(wTextLength * sizeof(WCHAR))) { //- yoshiki : To log system! delete pTableData; Destroy(); return false; } WCHAR* pwszText = new WCHAR[wTextLength + 1]; if (NULL == pwszText) { //- yoshiki : To log system! delete pTableData; Destroy(); return false; } serializer.Out(pwszText, wTextLength * sizeof(WCHAR)); pwszText[wTextLength] = L'\0'; pTableData->wstrText = pwszText; delete[] pwszText; // [4/26/2008 zeroera] : 설명 : 실패하더라도 Load의 종료여부는 File Loading에서 결정한다 if (false == AddTable(pTableData, bReload)) { delete pTableData; } }; return true; }