| 1 | #include <cstdio> |
|---|
| 2 | #include <cstring> |
|---|
| 3 | #include <memory.h> |
|---|
| 4 | |
|---|
| 5 | #include <iostream> |
|---|
| 6 | |
|---|
| 7 | #include <arbdb.h> |
|---|
| 8 | #include <arbdbt.h> |
|---|
| 9 | |
|---|
| 10 | #include "arbdb++.hxx" |
|---|
| 11 | |
|---|
| 12 | // -------------------------------------------------------------------------------- |
|---|
| 13 | // class AD_SAI |
|---|
| 14 | |
|---|
| 15 | AD_SAI::AD_SAI() |
|---|
| 16 | { |
|---|
| 17 | |
|---|
| 18 | gb_main = 0; |
|---|
| 19 | } |
|---|
| 20 | |
|---|
| 21 | AD_SAI::~AD_SAI() |
|---|
| 22 | // callbacks nur innerhalb von transaktionen releasen ->exit |
|---|
| 23 | // gibt speicherplatz frei |
|---|
| 24 | { |
|---|
| 25 | if (ad_main) |
|---|
| 26 | new AD_ERR("AD_SAI: No exit() !!",CORE); |
|---|
| 27 | } |
|---|
| 28 | |
|---|
| 29 | AD_ERR * AD_SAI::exit() |
|---|
| 30 | { |
|---|
| 31 | if (ad_main) release(); |
|---|
| 32 | delete container; |
|---|
| 33 | ad_main = 0; |
|---|
| 34 | return 0; |
|---|
| 35 | } |
|---|
| 36 | |
|---|
| 37 | |
|---|
| 38 | AD_ERR * AD_SAI::init(AD_MAIN * gb_ptr) |
|---|
| 39 | // stellt verknuepfung mit ubergeordneter Klasse her |
|---|
| 40 | { |
|---|
| 41 | if (ad_main != 0) { |
|---|
| 42 | return new AD_ERR("AD_SAI: no reinit\n"); |
|---|
| 43 | } |
|---|
| 44 | if (gb_ptr->gbd) { |
|---|
| 45 | ad_main = gb_ptr; |
|---|
| 46 | gb_main = gb_ptr->gbd; |
|---|
| 47 | last = count = 0; |
|---|
| 48 | AD_READWRITE::gbdataptr = 0; |
|---|
| 49 | return 0; |
|---|
| 50 | } |
|---|
| 51 | else { |
|---|
| 52 | return new AD_ERR("SAI init (NULL)\n"); |
|---|
| 53 | } |
|---|
| 54 | } |
|---|
| 55 | |
|---|
| 56 | AD_ERR *AD_SAI::first() |
|---|
| 57 | { |
|---|
| 58 | if (ad_main) { |
|---|
| 59 | AD_SAI::release(); // speicherplatz freigeben |
|---|
| 60 | gb_species = GBT_first_SAI(gb_main); |
|---|
| 61 | //erstes extended |
|---|
| 62 | AD_SAI::initpntr(); |
|---|
| 63 | return 0; |
|---|
| 64 | } |
|---|
| 65 | return new AD_ERR("AD_extended first: NO AD_MAIN\n"); |
|---|
| 66 | } |
|---|
| 67 | |
|---|
| 68 | |
|---|
| 69 | |
|---|
| 70 | AD_ERR * AD_SAI::find(char *path) |
|---|
| 71 | // sucht nach extended mit namen = path |
|---|
| 72 | { |
|---|
| 73 | error(); |
|---|
| 74 | AD_SPECIES::release(); // speicherplatz freigeben` |
|---|
| 75 | gb_species = GBT_find_SAI_rel_SAI_data(ad_main->sai_data,path); |
|---|
| 76 | AD_SPECIES::initpntr(); |
|---|
| 77 | return 0; |
|---|
| 78 | } |
|---|
| 79 | |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | |
|---|
| 83 | AD_ERR * AD_SAI::create(char *sai_name) { |
|---|
| 84 | GBDATA *extended; |
|---|
| 85 | if (strlen(sai_name) < 2) |
|---|
| 86 | return new AD_ERR("AD_SAI::create ungueltige Parameter"); |
|---|
| 87 | extended = GBT_find_or_create_SAI(gb_main,sai_name); |
|---|
| 88 | gb_species = extended; |
|---|
| 89 | initpntr(); |
|---|
| 90 | return 0; |
|---|
| 91 | } |
|---|
| 92 | |
|---|
| 93 | |
|---|
| 94 | |
|---|
| 95 | char * AD_SAI::fullname() |
|---|
| 96 | { |
|---|
| 97 | return 0; |
|---|
| 98 | } |
|---|
| 99 | |
|---|
| 100 | AD_ERR * AD_SAI::next() |
|---|
| 101 | // initialisiert objekt auf naechstes extended oder erstes |
|---|
| 102 | { |
|---|
| 103 | error(); |
|---|
| 104 | |
|---|
| 105 | if (!gb_species && last == 0) |
|---|
| 106 | first(); |
|---|
| 107 | AD_SAI::release(); // speicherplatz freigeben |
|---|
| 108 | gb_species = GBT_next_SAI(gb_species); |
|---|
| 109 | AD_SAI::initpntr(); |
|---|
| 110 | return 0; |
|---|
| 111 | } |
|---|
| 112 | |
|---|
| 113 | /******** not yet in GBT |
|---|
| 114 | AD_ERR *AD_SAI::firstmarked() |
|---|
| 115 | { |
|---|
| 116 | if (ad_main ) |
|---|
| 117 | { |
|---|
| 118 | gb_extended = GBT_first_marked_extended(gb_exdata); |
|---|
| 119 | initpntr(); |
|---|
| 120 | return 0; |
|---|
| 121 | } |
|---|
| 122 | return new AD_ERR("AD_SAI::firstmarked() but no init()!",CORE); |
|---|
| 123 | } |
|---|
| 124 | |
|---|
| 125 | AD_ERR * AD_SAI::nextmarked() |
|---|
| 126 | // naechstes markiertes extended oder erstes markiertes |
|---|
| 127 | { |
|---|
| 128 | if ((!gb_extended && (last ==0))) |
|---|
| 129 | { |
|---|
| 130 | gb_extended = GBT_first_marked_extended(gb_exdata); |
|---|
| 131 | initpntr(); |
|---|
| 132 | return 0; |
|---|
| 133 | } |
|---|
| 134 | else { |
|---|
| 135 | release(); |
|---|
| 136 | gb_extended = GBT_next_marked_extended(gb_extended); |
|---|
| 137 | initpntr(); |
|---|
| 138 | return 0; |
|---|
| 139 | } |
|---|
| 140 | } |
|---|
| 141 | ************/ |
|---|
| 142 | |
|---|
| 143 | |
|---|
| 144 | void AD_SAI::operator =(const AD_SAI& right) |
|---|
| 145 | { |
|---|
| 146 | gb_main = right.gb_main; |
|---|
| 147 | (AD_SPECIES &) *this = (AD_SPECIES&) right; |
|---|
| 148 | } |
|---|
| 149 | |
|---|
| 150 | |
|---|
| 151 | |
|---|