1#include "llama-memory.h"
 2
 3llama_memory_status llama_memory_status_combine(llama_memory_status s0, llama_memory_status s1) {
 4    bool has_update = false;
 5
 6    switch (s0) {
 7        case LLAMA_MEMORY_STATUS_SUCCESS:
 8            {
 9                has_update = true;
10                break;
11            }
12        case LLAMA_MEMORY_STATUS_NO_UPDATE:
13            {
14                break;
15            }
16        case LLAMA_MEMORY_STATUS_FAILED_PREPARE:
17        case LLAMA_MEMORY_STATUS_FAILED_COMPUTE:
18            {
19                return s0;
20            }
21    }
22
23    switch (s1) {
24        case LLAMA_MEMORY_STATUS_SUCCESS:
25            {
26                has_update = true;
27                break;
28            }
29        case LLAMA_MEMORY_STATUS_NO_UPDATE:
30            {
31                break;
32            }
33        case LLAMA_MEMORY_STATUS_FAILED_PREPARE:
34        case LLAMA_MEMORY_STATUS_FAILED_COMPUTE:
35            {
36                return s1;
37            }
38    }
39
40    // if either status has an update, then the combined status has an update
41    return has_update ? LLAMA_MEMORY_STATUS_SUCCESS : LLAMA_MEMORY_STATUS_NO_UPDATE;
42}
43
44bool llama_memory_status_is_fail(llama_memory_status status) {
45    switch (status) {
46        case LLAMA_MEMORY_STATUS_SUCCESS:
47        case LLAMA_MEMORY_STATUS_NO_UPDATE:
48            {
49                return false;
50            }
51        case LLAMA_MEMORY_STATUS_FAILED_PREPARE:
52        case LLAMA_MEMORY_STATUS_FAILED_COMPUTE:
53            {
54                return true;
55            }
56    }
57
58    return false;
59}