/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Copyright (C) 2011-2024 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Class Foam::DynamicField Description Dynamically sized Field. SourceFiles DynamicFieldI.H DynamicField.C \*---------------------------------------------------------------------------*/ #ifndef DynamicField_H #define DynamicField_H #include "Field.H" #include "DynamicFieldFwd.H" #include // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Forward declaration of friend functions and operators template Ostream& operator<< ( Ostream&, const DynamicField& ); template Istream& operator>> ( Istream&, DynamicField& ); /*---------------------------------------------------------------------------*\ Class DynamicField Declaration \*---------------------------------------------------------------------------*/ template class DynamicField : public Field { static_assert ( (SizeInc || SizeMult) && SizeDiv, "Avoid invalid sizing parameters" ); // Private Data //- The capacity (allocated size) of the underlying field. label capacity_; public: // Static Member Functions //- Return a null field inline static const DynamicField& null() { return *reinterpret_cast < DynamicField* >(0); } // Constructors //- Construct null inline DynamicField(); //- Construct given size. explicit inline DynamicField(const label); //- Construct given size and initial value inline DynamicField(const label, const T&); //- Construct given size and initialised to zero inline DynamicField(const label, const zero); //- Construct from UList. Size set to UList size. // Also constructs from DynamicField with different sizing parameters. explicit inline DynamicField(const UList&); //- Move constructor transferring the list contents explicit inline DynamicField(List&&); //- Construct by 1 to 1 mapping from the given field inline DynamicField ( const UList& mapF, const labelList& mapAddressing ); //- Construct by interpolative mapping from the given field inline DynamicField ( const UList& mapF, const labelListList& mapAddressing, const scalarListList& weights ); //- Copy constructor inline DynamicField(const DynamicField&); //- Copy constructor or re-use as specified inline DynamicField ( DynamicField&, const bool ); //- Move constructor inline DynamicField(DynamicField&&); //- Construct from Istream. Size set to size of list read. explicit DynamicField(Istream&); //- Construct from a dictionary entry DynamicField(const word& keyword, const dictionary&, const label size); //- Construct from a dictionary entry with unit conversion DynamicField ( const word& keyword, const unitConversion&, const dictionary&, const label size ); //- Clone tmp> clone() const; // Member Functions // Access //- Size of the underlying storage. inline label capacity() const; // Edit //- Alter the size of the underlying storage. // The addressed size will be truncated if needed to fit, but will // remain otherwise untouched. // Use this or reserve() in combination with append(). inline void setCapacity(const label); //- Alter the addressed list size. // New space will be allocated if required. // Use this to resize the list prior to using the operator[] for // setting values (as per List usage). inline void setSize(const label); //- Alter the addressed list size and fill new space with a // constant. inline void setSize(const label, const T&); //- Alter the addressed list size. // New space will be allocated if required. // Use this to resize the list prior to using the operator[] for // setting values (as per List usage). inline void resize(const label); //- Alter the addressed list size and fill new space with a // constant. inline void resize(const label, const T&); //- Reserve allocation space for at least this size. // Never shrinks the allocated size, use setCapacity() for that. inline void reserve(const label); //- Clear the addressed list, i.e. set the size to zero. // Allocated size does not change inline void clear(); //- Clear the list and delete storage. inline void clearStorage(); //- Shrink the allocated space to the number of elements used. // Returns a reference to the DynamicField. inline DynamicField& shrink(); // Member Operators //- Append an element at the end of the list inline DynamicField& append ( const T& ); //- Append a List at the end of this list inline DynamicField& append ( const UList& ); //- Remove and return the top element inline T remove(); //- Return non-const access to an element, resizing list if // necessary inline T& operator()(const label); //- Assignment of all addressed entries to the given value inline void operator=(const T&); //- Assignment operator inline void operator= ( const DynamicField& ); //- Move assignment operator inline void operator= ( DynamicField&& ); //- Assignment to UList inline void operator=(const UList&); //- Move assignment to List inline void operator=(List&&); // IOstream Operators // Write DynamicField to Ostream. friend Ostream& operator<< ( Ostream&, const DynamicField& ); //- Read from Istream, discarding contents of existing DynamicField. friend Istream& operator>> ( Istream&, DynamicField& ); }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #include "DynamicFieldI.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository #include "DynamicField.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //