source: tags/arb_5.1/ARBDB/arbdbpp.cxx

Last change on this file was 5635, checked in by westram, 15 years ago
  • class GB_transaction:
    • replaced abort() by close(error). close() is similar to GB_end_transaction()
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 1.2 KB
Line 
1#include <stdio.h>
2#include "arbdb.h"
3#include "arbdbt.h"
4
5
6GB_transaction::GB_transaction(GBDATA *gb_main)
7    : ta_main(gb_main)
8    , ta_open(false)
9    , ta_err(NULL)
10{
11    if (ta_main) {
12        ta_err = GB_push_transaction(ta_main);
13        if (!ta_err) {
14            ta_open = true;
15        }
16    }
17    else {
18        ta_err = "NULL-Transaction";
19    }
20}
21
22GB_ERROR GB_transaction::close(GB_ERROR error) {
23    // abort transaction if error != NULL
24
25    if (error) {
26        if (ta_err) {
27            ta_err = GBS_global_string("%s\n(previous error: %s)", error, ta_err);
28        }
29        else {
30            ta_err = error;
31        }
32    }
33
34#if defined(DEVEL_RALF)
35#warning check for exported error here (when GB_export_error gets redesigned)
36#endif // DEVEL_RALF
37   
38    if (ta_open) {
39        ta_err  = GB_end_transaction(ta_main, ta_err);
40        ta_open = false;
41    }
42
43    return ta_err;
44}
45
46GB_transaction::~GB_transaction() {
47    if (ta_open) {
48        GB_ERROR error = close(NULL);
49        if (error) {
50            fprintf(stderr, "Error while closing transaction: %s\n", error);
51            gb_assert(0); // you need to manually use close()
52    }
53}
54}
55
56
57int GB_info(struct gb_data_base_type2 *gbd){
58    return GB_info((GBDATA *)gbd);
59}
Note: See TracBrowser for help on using the repository browser.