int main( int argc, char *argv[] ) { config conf; setup_config(&conf, argc, argv); init_progress(conf.progress_width, conf.nsteps, conf.progress_disabled); TYPE dx = 20.f; TYPE dt = 0.002f; // compute the pitch for perfect coalescing size_t dimx = conf.nx + 2*conf.radius; size_t dimy = conf.ny + 2*conf.radius; size_t nbytes = dimx * dimy * sizeof(TYPE); if (conf.verbose) { printf("x = %zu, y = %zu\n", dimx, dimy); printf("nsteps = %d\n", conf.nsteps); printf("radius = %d\n", conf.radius); } TYPE c_coeff[NUM_COEFF]; TYPE *curr = (TYPE *)malloc(nbytes); TYPE *next = (TYPE *)malloc(nbytes); TYPE *vsq = (TYPE *)malloc(nbytes); if (curr == NULL || next == NULL || vsq == NULL) { fprintf(stderr, "Allocations failed\n"); return 1; } config_sources(&conf.srcs, &conf.nsrcs, conf.nx, conf.ny, conf.nsteps); TYPE **srcs = sample_sources(conf.srcs, conf.nsrcs, conf.nsteps, dt); init_data(curr, next, vsq, c_coeff, dimx, dimy, dx, dt); double start = seconds(); for (int step = 0; step < conf.nsteps; step++) { for (int src = 0; src < conf.nsrcs; src++) { if (conf.srcs[src].t > step) continue; int src_offset = POINT_OFFSET(conf.srcs[src].x, conf.srcs[src].y, dimx, conf.radius); curr[src_offset] = srcs[src][step]; } fwd(next, curr, vsq, c_coeff, conf.nx, conf.ny, dimx, dimy, conf.radius); TYPE *tmp = next; next = curr; curr = tmp; update_progress(step + 1); } double elapsed_s = seconds() - start; finish_progress(); float point_rate = (float)conf.nx * conf.ny / (elapsed_s / conf.nsteps); fprintf(stderr, "iso_r4_2x: %8.10f s total, %8.10f s/step, %8.2f Mcells/s/step\n", elapsed_s, elapsed_s / conf.nsteps, point_rate / 1000000.f); if (conf.save_text) { save_text(curr, dimx, dimy, conf.ny, conf.nx, "snap.text", conf.radius); } free(curr); free(next); free(vsq); for (int i = 0; i < conf.nsrcs; i++) { free(srcs[i]); } free(srcs); return 0; }
void GncSqlBackend::load (QofBook* book, QofBackendLoadType loadType) { Account* root; g_return_if_fail (book != NULL); ENTER ("sql_be=%p, book=%p", this, book); m_loading = TRUE; if (loadType == LOAD_TYPE_INITIAL_LOAD) { assert (m_book == nullptr); m_book = book; /* Load any initial stuff. Some of this needs to happen in a certain order */ for (auto type : fixed_load_order) { auto obe = m_backend_registry.get_object_backend(type); if (obe) { update_progress(); obe->load_all(this); } } for (auto type : business_fixed_load_order) { auto obe = m_backend_registry.get_object_backend(type); if (obe) { update_progress(); obe->load_all(this); } } root = gnc_book_get_root_account( book ); gnc_account_foreach_descendant(root, (AccountCb)xaccAccountBeginEdit, nullptr); m_backend_registry.load_remaining(this); gnc_account_foreach_descendant(root, (AccountCb)xaccAccountCommitEdit, nullptr); } else if (loadType == LOAD_TYPE_LOAD_ALL) { // Load all transactions auto obe = m_backend_registry.get_object_backend (GNC_ID_TRANS); obe->load_all (this); } m_loading = FALSE; std::for_each(m_postload_commodities.begin(), m_postload_commodities.end(), [](gnc_commodity* comm) { gnc_commodity_begin_edit(comm); gnc_commodity_commit_edit(comm); }); m_postload_commodities.empty(); /* Mark the sessoion as clean -- though it should never be marked * dirty with this backend */ qof_book_mark_session_saved (book); finish_progress(); LEAVE (""); }
void GncSqlBackend::sync_all(QofBook* book) { g_return_if_fail (book != NULL); reset_version_info(); ENTER ("book=%p, sql_be->book=%p", book, m_book); update_progress(); /* Create new tables */ m_is_pristine_db = true; create_tables(); /* Save all contents */ m_book = book; auto is_ok = m_conn->begin_transaction(); // FIXME: should write the set of commodities that are used // write_commodities(sql_be, book); if (is_ok) { auto obe = m_backend_registry.get_object_backend(GNC_ID_BOOK); is_ok = obe->commit (this, QOF_INSTANCE (book)); } if (is_ok) { is_ok = write_accounts(); } if (is_ok) { is_ok = write_transactions(); } if (is_ok) { is_ok = write_template_transactions(); } if (is_ok) { is_ok = write_schedXactions(); } if (is_ok) { for (auto entry : m_backend_registry) std::get<1>(entry)->write (this); } if (is_ok) { is_ok = m_conn->commit_transaction(); } if (is_ok) { m_is_pristine_db = false; /* Mark the session as clean -- though it shouldn't ever get * marked dirty with this backend */ qof_book_mark_session_saved(book); } else { if (!qof_backend_check_error (&qof_be)) qof_backend_set_error (&qof_be, ERR_BACKEND_SERVER_ERR); is_ok = m_conn->rollback_transaction (); } finish_progress(); LEAVE ("book=%p", book); }
void msg_list_window::add_msgs_page(const msgs_filter* f, bool if_results _UNUSED_) { m_filter = new msgs_filter(*f); QFont body_font; QFont list_font; QByteArray headerview_setup; msgs_page* current = m_pages->current_page(); // current may be null if we're instantiating the first page if (current) { body_font = m_msgview->font(); list_font = m_qlist->font(); if (m_qlist->sender_recipient_swapped()) m_qlist->swap_sender_recipient(false); headerview_setup = m_qlist->header()->saveState(); } // new splitter QStackedWidget* stackw = m_pages->stacked_widget(); QSplitter* l=new QSplitter(Qt::Vertical, this); stackw->addWidget(l); m_qlist = new mail_listview(l); m_qlist->set_threaded(display_vars.m_threaded); m_qlist->m_msg_window=this; if (current) m_qlist->setFont(list_font); m_qlist->init_columns(); if (current) m_qlist->header()->restoreState(headerview_setup); if (!m_filter->m_fetched) m_filter->fetch(m_qlist); else m_filter->make_list(m_qlist); msg_list_postprocess(); m_msgview = new message_view(l, this); if (current) m_msgview->setFont(body_font); connect(m_msgview, SIGNAL(on_demand_show_request()), this, SLOT(display_msg_contents())); connect(m_msgview, SIGNAL(popup_body_context_menu()), this, SLOT(body_menu())); connect(m_msgview, SIGNAL(page_back()), this, SLOT(move_backward())); connect(m_msgview, SIGNAL(page_forward()), this, SLOT(move_forward())); m_qAttch = new attch_listview(l); connect(m_qAttch, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(attch_selected(QTreeWidgetItem*,int))); connect(m_qAttch, SIGNAL(init_progress(const QString)), this, SLOT(install_progressbar(const QString))); connect(m_qAttch, SIGNAL(progress(int)), this, SLOT(show_progress(int))); connect(m_qAttch, SIGNAL(finish_progress()), this, SLOT(uninstall_progressbar())); connect(this, SIGNAL(abort_progress()), m_qAttch, SLOT(download_aborted())); // splitter for 3 panes: list of messages / body / attachments list static const int splitter_default_sizes[3] = {100,400,25}; QList<int> lsizes; if (current) { lsizes = current->m_page_splitter->sizes(); // don't allow any zero size for panels. This is necessary to avoid having the // attachment list being almost invisible to the user for (int i=0; i<3; i++) { if (lsizes.at(i)==0) { lsizes.replace(i, splitter_default_sizes[i]); } } } else { for (int i=0; i<3; i++) { int sz; QString key; key.sprintf("display/msglist/panel%d_size", i+1); if (get_config().exists(key)) { sz=get_config().get_number(key); if (sz==0) sz=splitter_default_sizes[i]; } else sz=splitter_default_sizes[i]; lsizes.append(sz); } } /* avoid changing the listview's height each time the attachments view is shown or hidden */ l->setStretchFactor(l->indexOf(m_qlist), 0); l->setStretchFactor(l->indexOf(m_msgview), 1); l->setStretchFactor(l->indexOf(m_qAttch), 0); l->setSizes(lsizes); m_qAttch->hide(); m_wSearch=NULL; connect(m_qlist,SIGNAL(selection_changed()), this,SLOT(mails_selected())); connect(m_qlist,SIGNAL(doubleClicked(const QModelIndex&)), this,SLOT(mail_reply_all())); connect(m_qlist, SIGNAL(clicked(const QModelIndex&)), this, SLOT(action_click_msg_list(const QModelIndex&))); connect(m_qlist, SIGNAL(scroll_page_down()), m_msgview, SLOT(page_down())); if (m_pages->next_page()) { // we're in the middle of a page list, and asked to go forward. // let's remove all the pages that are after the current position m_pages->cut_pages(m_pages->next_page()); } int max_pages=get_config().get_number("msg_window_pages"); if (max_pages<2) max_pages=2; if (m_pages->count() >= max_pages) { free_msgs_page(); if (m_pages->count() >= max_pages) { // Still no room for a new page? OK, forget it DBG_PRINTF(5,"not enough pages!"); return; } } // allocate and use a new page msgs_page* page = new msgs_page(); page->m_page_filter = m_filter; page->m_page_msgview = m_msgview; page->m_page_attach = m_qAttch; page->m_page_qlist = m_qlist; page->m_page_current_item = NULL; page->m_page_splitter = l; page->m_msgs_window = this; page->m_query_lvitem_id = m_query_lv->current_id(); m_pages->add_page(page); m_pages->raise_page(page); m_tags_box->reset_tags(); enable_forward_backward(); }