| 64 | using namespace df::enums; |
| 65 | |
| 66 | df::job *DFHack::Job::cloneJobStruct(df::job *job, bool keepEverything) |
| 67 | { |
| 68 | CHECK_NULL_POINTER(job); |
| 69 | |
| 70 | df::job *pnew = new df::job(*job); |
| 71 | |
| 72 | if ( !keepEverything ) { |
| 73 | // Clean out transient fields |
| 74 | pnew->flags.whole = 0; |
| 75 | pnew->flags.bits.repeat = job->flags.bits.repeat; |
| 76 | pnew->flags.bits.suspend = job->flags.bits.suspend; |
| 77 | |
| 78 | pnew->completion_timer = -1; |
| 79 | pnew->posting_index = -1; |
| 80 | } |
| 81 | pnew->list_link = NULL; |
| 82 | |
| 83 | //pnew->items.clear(); |
| 84 | //pnew->specific_refs.clear(); |
| 85 | pnew->general_refs.clear(); |
| 86 | //pnew->job_items.elements.clear(); |
| 87 | |
| 88 | if ( keepEverything ) { |
| 89 | for ( size_t a = 0; a < pnew->items.size(); a++ ) |
| 90 | pnew->items[a] = new df::job_item_ref(*pnew->items[a]); |
| 91 | for ( size_t a = 0; a < pnew->specific_refs.size(); a++ ) |
| 92 | pnew->specific_refs[a] = new df::specific_ref(*pnew->specific_refs[a]); |
| 93 | } else { |
| 94 | pnew->items.clear(); |
| 95 | pnew->specific_refs.clear(); |
| 96 | } |
| 97 | |
| 98 | for ( size_t a = 0; a < pnew->job_items.elements.size(); a++ ) |
| 99 | pnew->job_items.elements[a] = new df::job_item(*pnew->job_items.elements[a]); |
| 100 | |
| 101 | for ( size_t a = 0; a < job->general_refs.size(); a++ ) |
| 102 | if ( keepEverything || job->general_refs[a]->getType() != general_ref_type::UNIT_WORKER ) |
| 103 | pnew->general_refs.push_back(job->general_refs[a]->clone()); |
| 104 | |
| 105 | return pnew; |
| 106 | } |
| 107 | |
| 108 | void DFHack::Job::deleteJobStruct(df::job *job, bool keptEverything) |
| 109 | { |