summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-12-30 18:45:56 +0100
committerTyge Løvset <[email protected]>2022-12-30 18:45:56 +0100
commite124d8c7377de1dfce45790a196312596f6b9be5 (patch)
tree528ebcc735cdb5d958b987c886d369bc02a11320 /include
parent4f0f45422fb58e9b134445ad6a4ea96d806214e8 (diff)
downloadSTC-modified-e124d8c7377de1dfce45790a196312596f6b9be5.tar.gz
STC-modified-e124d8c7377de1dfce45790a196312596f6b9be5.zip
Fixed carc and cbox docs. Added cbox_X_assign() : transfer ownership between cboxes.
Diffstat (limited to 'include')
-rw-r--r--include/stc/carc.h8
-rw-r--r--include/stc/cbox.h14
2 files changed, 15 insertions, 7 deletions
diff --git a/include/stc/carc.h b/include/stc/carc.h
index 7f7789ab..f14fdd65 100644
--- a/include/stc/carc.h
+++ b/include/stc/carc.h
@@ -157,17 +157,17 @@ STC_INLINE _cx_self _cx_memb(_clone)(_cx_self ptr) {
return ptr;
}
-STC_INLINE void _cx_memb(_copy)(_cx_self* self, _cx_self ptr) {
+STC_INLINE void _cx_memb(_assign)(_cx_self* self, _cx_self ptr) {
if (ptr.use_count)
_i_atomic_inc(ptr.use_count);
_cx_memb(_drop)(self);
*self = ptr;
}
-STC_INLINE void _cx_memb(_take)(_cx_self* self, _cx_self ptr) {
- if (self->get != ptr.get)
+STC_INLINE void _cx_memb(_take)(_cx_self* self, _cx_self unowned) {
+ if (self->get != unowned.get)
_cx_memb(_drop)(self);
- *self = ptr;
+ *self = unowned;
}
#ifndef i_no_cmp
diff --git a/include/stc/cbox.h b/include/stc/cbox.h
index a0966fcc..b8a61375 100644
--- a/include/stc/cbox.h
+++ b/include/stc/cbox.h
@@ -142,10 +142,18 @@ STC_INLINE _cx_self _cx_memb(_from)(_cx_value val)
}
#endif // !i_no_clone
-STC_INLINE void _cx_memb(_take)(_cx_self* self, _cx_self other) {
- if (other.get != self->get)
+STC_INLINE void _cx_memb(_take)(_cx_self* self, _cx_self unowned) {
+ if (unowned.get != self->get)
_cx_memb(_drop)(self);
- *self = other;
+ *self = unowned;
+}
+/* transfer ownership; set dying to NULL */
+STC_INLINE void _cx_memb(_assign)(_cx_self* self, _cx_self* dying) {
+ if (dying->get == self->get)
+ return;
+ _cx_memb(_drop)(self);
+ *self = *dying;
+ dying->get = NULL;
}
#ifndef i_no_cmp