| 8108 | } |
| 8109 | |
| 8110 | struct llama_grammar * llama_grammar_copy(const struct llama_grammar * grammar) { |
| 8111 | llama_grammar * result = new llama_grammar{ grammar->rules, grammar->stacks, grammar->partial_utf8 }; |
| 8112 | |
| 8113 | // redirect elements in stacks to point to new rules |
| 8114 | for (size_t is = 0; is < result->stacks.size(); is++) { |
| 8115 | for (size_t ie = 0; ie < result->stacks[is].size(); ie++) { |
| 8116 | for (size_t ir0 = 0; ir0 < grammar->rules.size(); ir0++) { |
| 8117 | for (size_t ir1 = 0; ir1 < grammar->rules[ir0].size(); ir1++) { |
| 8118 | if (grammar->stacks[is][ie] == &grammar->rules[ir0][ir1]) { |
| 8119 | result->stacks[is][ie] = &result->rules[ir0][ir1]; |
| 8120 | } |
| 8121 | } |
| 8122 | } |
| 8123 | } |
| 8124 | } |
| 8125 | |
| 8126 | return result; |
| 8127 | } |
| 8128 | |
| 8129 | // |
| 8130 | // sampling |
no test coverage detected