void KaminoHistoryModule::PreInitialize(){ KaminoHistoryStack::start = NULL; KaminoHistoryStack::init_start = NULL; KaminoHistoryStack::end = NULL; KaminoHistoryStack::num = 0; KaminoHistoryStack::recent_history_json = NULL; KaminoHistoryStack::file_content = NULL; wchar_t *file_name = L"KaminoResource\\History.file"; int64 len = GetCurrentDirectory(0, NULL); KaminoHistoryStack::file_path = (wchar_t *)malloc((len + wcslen(file_name))*sizeof(wchar_t)); GetCurrentDirectory(len, KaminoHistoryStack::file_path); wcscpy(wcsrchr(KaminoHistoryStack::file_path, '\\')+1, file_name); base::FilePath path(KaminoHistoryStack::file_path); base::PlatformFile file = base::CreatePlatformFile(path, base::PLATFORM_FILE_OPEN_ALWAYS | base::PLATFORM_FILE_WRITE | base::PLATFORM_FILE_READ, NULL, NULL); base::PlatformFileInfo info; base::GetPlatformFileInfo(file, &info); KaminoHistoryStack::file_size = info.size; if(info.size != 0){ KaminoHistoryStack::file_content = (char *)malloc(info.size); base::ReadPlatformFile(file, 0, KaminoHistoryStack::file_content, info.size); } base::ClosePlatformFile(file); BuildStack(); }
int main( int argc, char* argv[] ) { /* ------------------ */ /* Parse command line */ /* ------------------ */ gArgs.SetCmdLine( argc, argv ); /* ----------- */ /* Build stack */ /* ----------- */ BuildStack(); /* ---- */ /* Done */ /* ---- */ fprintf( flog, "\n" ); fclose( flog ); return 0; }
vector<int> closestKValues(TreeNode* root, double target, int k) { TreeNode* start = ClosestNode(root, target); vector<TreeNode*> left_stack; BuildStack(root, start, left_stack); vector<TreeNode*> right_stack(left_stack.begin(), left_stack.end()); vector<int> result; result.push_back(start->val); TreeNode* larger_node = NULL; TreeNode* smaller_node = NULL; while(result.size() < k) { if(larger_node == NULL) { larger_node = LargerNode(right_stack); } if(smaller_node == NULL) { smaller_node = SmallerNode(left_stack); } if(larger_node == NULL) { result.push_back(smaller_node->val); smaller_node = NULL; continue; } if(smaller_node == NULL) { result.push_back(larger_node->val); larger_node = NULL; continue; } if(abs(smaller_node->val - target) < abs(larger_node->val - target)) { result.push_back(smaller_node->val); smaller_node = NULL; } else { result.push_back(larger_node->val); larger_node = NULL; } } return result; }