Changeset 58daf53 for src/libcfa/containers
- Timestamp:
- May 25, 2017, 3:29:25 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- f851015
- Parents:
- a4943d8c
- Location:
- src/libcfa/containers
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/containers/maybe
ra4943d8c r58daf53 8 8 // 9 9 // Author : Andrew Beach 10 // Created On : Wed May 2 514:43:00 201710 // Created On : Wed May 24 14:43:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed Apr 25 16:58:00 201712 // Last Modified On : Thr May 25 16:36:00 2017 13 13 // Update Count : 1 14 14 // … … 41 41 42 42 forall(otype T) 43 maybe(T) ?=?(maybe(T) * this, maybe(T) other); 44 45 forall(otype T) 43 46 bool ?!=?(maybe(T) this, zero_t); 44 47 … … 55 58 T get(maybe(T) * this); 56 59 60 forall(otype T) 61 void set(maybe(T) * this, T value); 62 63 forall(otype T) 64 void set_none(maybe(T) * this); 65 57 66 #endif // MAYBE_H -
src/libcfa/containers/maybe.c
ra4943d8c r58daf53 8 8 // 9 9 // Author : Andrew Beach 10 // Created On : Wed May 2 515:40:00 201710 // Created On : Wed May 24 15:40:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed May 25 17:00:00 201712 // Last Modified On : Thr May 25 15:24:00 2017 13 13 // Update Count : 1 14 14 // … … 26 26 void ?{}(maybe(T) * this, T value) { 27 27 this->has_value = true; 28 this->value = value;28 (&this->value){value}; 29 29 } 30 30 … … 33 33 this->has_value = other.has_value; 34 34 if (other.has_value) { 35 this->value = other.value; 35 (&this->value){other.value}; 36 } 37 } 38 39 forall(otype T) 40 maybe(T) ?=?(maybe(T) * this, maybe(T) that) { 41 if (this->has_value & that.has_value) { 42 this->value = that.value; 43 } else if (this->has_value) { 44 ^(&this->value){}; 45 this->has_value = false; 46 } else if (that.has_value) { 47 this->has_value = true; 48 (&this->value){that.value}; 36 49 } 37 50 } … … 46 59 forall(otype T) 47 60 bool ?!=?(maybe(T) this, zero_t) { 48 return !this.has_value;61 return this.has_value; 49 62 } 50 63 … … 69 82 return this->value; 70 83 } 84 85 forall(otype T) 86 void set(maybe(T) * this, T value) { 87 if (this->has_value) { 88 this->value = value; 89 } else { 90 this->has_value = true; 91 (&this->value){value}; 92 } 93 } 94 95 forall(otype T) 96 void set_none(maybe(T) * this) { 97 if (this->has_value) { 98 this->has_value = false; 99 ^(&this->value){}; 100 } 101 } -
src/libcfa/containers/result
ra4943d8c r58daf53 8 8 // 9 9 // Author : Andrew Beach 10 // Created On : Wed May 2 514:45:00 201710 // Created On : Wed May 24 14:45:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed May 25 16:57:00 201712 // Last Modified On : Thr May 25 16:39:00 2017 13 13 // Update Count : 1 14 14 // … … 50 50 51 51 forall(otype T, otype E) 52 result(T, E) ?=?(result(T, E) * this, result(T, E) other); 53 54 forall(otype T, otype E) 52 55 bool ?!=?(result(T, E) this, zero_t); 53 56 … … 67 70 E get_error(result(T, E) * this); 68 71 72 forall(otype T, otype E) 73 void set(result(T, E) * this, T value); 74 75 forall(otype T, otype E) 76 void set_error(result(T, E) * this, E error); 77 69 78 #endif // RESULT_H -
src/libcfa/containers/result.c
ra4943d8c r58daf53 8 8 // 9 9 // Author : Andrew Beach 10 // Created On : Wed May 2 515:40:00 201710 // Created On : Wed May 24 15:40:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed May 25 17:02:00 201712 // Last Modified On : Thr May 25 15:27:00 2017 13 13 // Update Count : 1 14 14 // … … 27 27 void ?{}(result(T, E) * this, one_t, T value) { 28 28 this->has_value = true; 29 this->value = value;29 (&this->value){value}; 30 30 } 31 31 … … 33 33 void ?{}(result(T, E) * this, zero_t, E error) { 34 34 this->has_value = false; 35 this->error = error;35 (&this->error){error}; 36 36 } 37 37 … … 40 40 this->has_value = other.has_value; 41 41 if (other.has_value) { 42 this->value = other.value;42 (&this->value){other.value}; 43 43 } else { 44 this->error = other.error; 44 (&this->error){other.error}; 45 } 46 } 47 48 forall(otype T, otype E) 49 result(T, E) ?=?(result(T, E) * this, result(T, E) that) { 50 if (this->has_value & that.has_value) { 51 this->value = that.value; 52 } else if (this->has_value) { 53 ^(&this->value){}; 54 this->has_value = false; 55 (&this->error){that.error}; 56 } else if (that.has_value) { 57 ^(&this->error){}; 58 this->has_value = true; 59 (&this->value){that.value}; 60 } else { 61 this->error = that.error; 45 62 } 46 63 } … … 86 103 return this->error; 87 104 } 105 106 forall(otype T, otype E) 107 void set(result(T, E) * this, T value) { 108 if (this->has_value) { 109 this->value = value; 110 } else { 111 ^(&this->error){}; 112 this->has_value = true; 113 (&this->value){value}; 114 } 115 } 116 117 forall(otype T, otype E) 118 void set_error(result(T, E) * this, E error) { 119 if (this->has_value) { 120 ^(&this->value){}; 121 this->has_value = false; 122 (&this->error){error}; 123 } else { 124 this->error = error; 125 } 126 }
Note: See TracChangeset
for help on using the changeset viewer.