libbio
Loading...
Searching...
No Matches
AtomicCow.h
Go to the documentation of this file.
1/*
2 * This file is a part of the Biology project by eons LLC.
3 * Biology (aka Develop Biology) is a framework for approaching software
4 * development from a natural sciences perspective.
5 *
6 * Copyright (C) 2026 Séon O'Shannon & eons LLC
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as
10 * published by the Free Software Foundation, either version 3 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
27
28namespace bio {
29namespace chemical {
30
53class AtomicCow :
54 public CowPtr< physical::Wave >
55{
56public:
67 )
68 :
69 CowPtr< physical::Wave >(CowPtr< physical::Wave >::Borrow(bondedSnapshot.Get())),
72 {
73 }
74
78 bool IsValid() const
79 {
80 return mSource != NULL;
81 }
82
83protected:
89 {
91 }
92
99 {
100 if (!mSource)
101 {
102 return NULL;
103 }
104 Pointer< physical::Wave > detached = mSource->ResolveBondedForWriteById(mBondId);
105 // Refresh our (borrowed, refcount-free) snapshot so a later Read sees the
106 // post-detach bonded rather than the now-stale pre-detach one.
107 *static_cast< CowPtr< physical::Wave >* >(this) =
109 return detached;
110 }
111
114};
115
116} // namespace chemical
117} // namespace bio
Definition CowPtr.h:91
const T * View() const
Definition CowPtr.h:200
static CowPtr Borrow(physical::Wave *borrowed)
Definition CowPtr.h:127
T * Get() const
Definition Pointer.h:271
Definition AtomicCow.h:55
const physical::Wave * ReadBonded() const
Definition AtomicCow.h:88
AtomicNumber mBondId
Definition AtomicCow.h:113
bool IsValid() const
Definition AtomicCow.h:78
Pointer< Atom > mSource
Definition AtomicCow.h:112
AtomicCow(Pointer< Atom > source, AtomicNumber bondId, Pointer< physical::Wave > bondedSnapshot)
Definition AtomicCow.h:63
Pointer< physical::Wave > WriteBonded()
Definition AtomicCow.h:98
Definition Wave.h:82
Definition FinalCell.h:29