- Jul 28, 2020
-
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Mark OLESEN authored
- using HashPtrTable::set() with the same key twice did not guarantee proper cleanup of memory since it simply used the underlying HashTable::set() without doing anything about the old memory. Now check for pre-existing storage and delete it when it does not correspond to the newly stored pointer. This problem is independent of potential memory slicing previously flagged (#1286) and only partially resolved.
-
Mark OLESEN authored
- naming similarity with autoPtr, unique_ptr and other containers. For UPtrList derivatives, this is equivalent to the existing operator(). The read-only variant is also equivalent to the single-parameter 'set(label)' method. With PtrList<T> list(...) : const T* ptr = list.get(10); if (ptr) { ptr->method(); } vs. if (list.set(10)) { list[10].method(); } For HashPtrTable there is only a read-only variant which is equivalent to testing for existence and for value. With HashPtrTable<T> hash(...) : const T* ptr = list.get("key"); if (ptr) { ptr->method(); } vs. if (list.found("key")) { // Fails on null pointer!! list["key"].method(); } Use of get() is largely a matter of taste or local coding requirements
-
Mark OLESEN authored
- emplace methods Eg, m.internalCoeffs().emplace(patchi, fc.size(), Zero); vs. m.internalCoeffs().set(patchi, new Field<Type>(fc.size(), Zero)); - handle insert/append of refPtr wherever tmp was already supported COMP: incorrect variable names in PtrListOpsTemplates.C
-
Mark OLESEN authored
- forwarding like the emplace() method, but overwriting existing entries as required - propagate similar changes to HashPtrTable For example, with HashPtrTable<labelList> table(...) : With 'insert' semantics table.emplace("list1", 1000); vs if (!table.found("list1")) { table.set("list1", new labelList(1000)); } or table.insert("list1", autoPtr<labelList>::New(1000)); Note that the last example invokes an unnecessary allocation/deletion if the insertion is unsuccessful. With 'set' semantics: table.emplace_set("list1", 15); vs table.set("list1", new labelList(15));
-
Mark OLESEN authored
- constructs such as the following will no longer worked, but that is also a good thing. ptrlist.set(i, scalarField(nFaces, Zero)); this called set(.., const tmp<scalarField>&), which meant under the hood: - create local temporary const scalarField& - wrap as const tmp& - use tmp::ptr(), to clone the const-ref This implies an additional allocation (for the const scalarField&) which is immediately discarded. Doubtful that compiler optimization would do anything.
- Jul 27, 2020
-
-
Mark OLESEN authored
-
Mark OLESEN authored
- backported fix from develop COMP: incorrect variable names in PtrListOpsTemplates.C
-
Mark OLESEN authored
-
Mark OLESEN authored
-
Mark OLESEN authored
STYLE: use global operator instead of HashSet -= operator
-
Mark OLESEN authored
-
Mark OLESEN authored
- offers similarity with bitSet STYLE: remove remnant parent::operator= from HashSet STYLE: code formatting in HashTables
-
- Jul 24, 2020
-
-
Mark OLESEN authored
The fakeError function object emits FatalError at different stages (or does nothing), which is useful for testing purposes (issue #1779). Can request errors from constructor, execute and write methods.
-
- Jul 23, 2020
-
-
Mark OLESEN authored
-
Mark OLESEN authored
-
- Jul 22, 2020
-
-
Mark OLESEN authored
- previously setting FOAM_ABORT would preempt checks for throwing exceptions. Now check for throwing first, to allow try/catch code to do its job. However, ignore exception throwing for abort(). These are used infrequently in the code, but indicate that recovery is deemed impossible. STYLE: use unique_ptr for internal stream buffer management
-
Mark OLESEN authored
-
- Jul 23, 2020
- Jul 21, 2020
-
-
sergio authored
The function evaluate was returning true every outer loop, triggering the re-calculation of ddt0 in every outer loop. The evaluation of the term ddt0 should be performed once per time step. The corrected function updates the timeIndex of ddt0 to avoid the re-evaluation of this term in the outer loops.
-
Mark OLESEN authored
- improves flexibility. Can tag a tmp as allowing non-const access to the reference and skip additional const_cast in following code. For example, tmp<volScalarField> tfld(nullptr); auto* ptr = getObjectPtr<volScalarField>("field"); if (ptr) { tfld.ref(*ptr); } else { tfld.reset(volScalarField::New(...)); } auto& fld = tfld.ref(); ENH: renamed tmpNrc to refPtr - the name 'refPtr' (reference|pointer) should be easier to remember than tmpNrc (tmp, but non-ref-counted). - provide tmpNrc typedef and header for code compatibility NOTE - in some places refPtr and tmp can be used instead of a std::reference_wrapper for handling external references. Unlike std::reference_wrapper, it can be default constructed (holding nothing), whereas reference_wrapper may need a dummy reference. However, the lifetime extension of references _may_ be better with reference_wrapper.
-
- Jul 20, 2020
-
-
Mark OLESEN authored
-
Andrew Heather authored
-
- Jul 17, 2020
-
-
Andrew Heather authored
autoPtr/tmp cleanup See merge request !378
-
Andrew Heather authored
-
- Jul 16, 2020
-
-
Mark OLESEN authored
- Cannot call ptr_->clone() with a null pointer!
-
Mark OLESEN authored
- autoPtr: less clutter using plain tests with the bool operator (!ptr) vs (ptr.empty()) (ptr) vs (!ptr.empty()) - tmp: was entirely unused.
-
Mark OLESEN authored
- previously this was marked as '= delete' for consistency with assignment from an empty pointer being a runtime error. However, these can be considered semantically different and it makes sense to permit this as equivalent to reset(nullptr). This change does not break existing code since the operator was previously unavailable (deleted). STYLE: refactor tmp operator=(T*) - delegate to reset() after initial checks
-
Mark OLESEN authored
- Previously considered to be valid() if it was any reference (null or non-null) or a non-null pointer. This appears to be a holdover from old code (pre-2015) where reinterpret_cast<..>(0) was used instead of the NullObject. A reference via a null pointer isn't really possible anywhere. Even for things like labelList::null(), they now use the NullObject, which has a non-zero memory location. - now simply check for a non-zero memory address. Regardless of pointer or referenced object.
-
Mark OLESEN authored
- combine reset() methods by adding a default parameter - improve top-level visibility of empty/valid/get methods for symmetry symmetry with autoPtr, future adjustment
-
Mark OLESEN authored
- cleaner code, more similarity with unique_ptr Now if (ptr) if (!ptr) instead if (ptr.valid()) if (!ptr.valid())
-
Mark OLESEN authored
- with '&&' conditions, often better to check for non-null autoPtr first (it is cheap) - check as bool instead of valid() method for cleaner code, especially when the wrapped item itself has a valid/empty or good. Also when handling multiple checks. Now if (ptr && ptr->valid()) if (ptr1 || ptr2) instead if (ptr.valid() && ptr->valid()) if (ptr1.valid() || ptr2.valid())
-
Mark OLESEN authored
- less clutter using plain tests with the bool operator: (!ptr) vs (ptr.empty()) (ptr) vs (!ptr.empty())
-
- Jul 15, 2020
-
-
Mark OLESEN authored
- same as FixedList<bool,3> for I/O
-
Mark OLESEN authored
- since only pointers are stored, autoPtr is better fit than tmp
-
- Jul 14, 2020
-
-
Andrew Heather authored
Feature dynamic library - issue #1737 See merge request !375
-