Commit Graph

6048 Commits

Author SHA1 Message Date
660f3e5492 ENH: cleanup autoPtr class (issue #639)
Improve alignment of its behaviour with std::unique_ptr

  - element_type typedef
  - release() method - identical to ptr() method
  - get() method to get the pointer without checking and without releasing it.
  - operator*() for dereferencing

Method name changes

  - renamed rawPtr() to get()
  - renamed rawRef() to ref(), removed unused const version.

Removed methods/operators

  - assignment from a raw pointer was deleted (was rarely used).
    Can be convenient, but uncontrolled and potentially unsafe.
    Do allow assignment from a literal nullptr though, since this
    can never leak (and also corresponds to the unique_ptr API).

Additional methods

  - clone() method: forwards to the clone() method of the underlying
    data object with argument forwarding.

  - reset(autoPtr&&) as an alternative to operator=(autoPtr&&)

STYLE: avoid implicit conversion from autoPtr to object type in many places

- existing implementation has the following:

     operator const T&() const { return operator*(); }

  which means that the following code works:

       autoPtr<mapPolyMesh> map = ...;
       updateMesh(*map);    // OK: explicit dereferencing
       updateMesh(map());   // OK: explicit dereferencing
       updateMesh(map);     // OK: implicit dereferencing

  for clarity it may preferable to avoid the implicit dereferencing

- prefer operator* to operator() when deferenced a return value
  so it is clearer that a pointer is involve and not a function call
  etc    Eg,   return *meshPtr_;  vs.  return meshPtr_();
2018-02-26 12:00:00 +01:00
bcabe827f6 ENH: dedicated HashSetOps, HashTableOps namespaces
- relocated HashSetPlusEqOp and HashTablePlusEqOp to
  HashSetOps::plusEqOp and HashTableOps::plusEqOp, respectively

- additional functions for converting between a labelHashSet
  and a PackedBoolList or List<bool>:

  From lists selections to labelHashSet indices:

      HashSetOps::used(const PackedBoolList&);
      HashSetOps::used(const UList<bool>&);

  From labelHashSet to list forms:

      PackedBoolList bitset(const labelHashSet&);
      List<bool> bools(const labelHashSet&);
2018-03-06 11:41:34 +01:00
15f7260884 ENH: cleanup of ListOps, ListListOps. Adjustments to List, PackedList.
- relocated ListAppendEqOp and ListUniqueEqOp to ListOps::appendEqOp
  and ListOps::UniqueEqOp, respectively for better code isolation and
  documentation of purpose.

- relocated setValues to ListOps::setValue() with many more
  alternative selectors possible

- relocated createWithValues to ListOps::createWithValue
  for better code isolation. The default initialization value is itself
  now a default parameter, which allow for less typing.

  Negative indices in the locations to set are now silently ignored,
  which makes it possible to use an oldToNew mapping that includes
  negative indices.

- additional ListOps::createWithValue taking a single position to set,
  available both in copy assign and move assign versions.
  Since a negative index is ignored, it is possible to combine with
  the output of List::find() etc.

STYLE: changes for PackedList

- code simplication in the PackedList iterators, including dropping
  the unused operator() on iterators, which is not available in plain
  list versions either.

- improved sizing for PackedBoolList creation from a labelUList.

ENH: additional List constructors, for handling single element list.

- can assist in reducing constructor ambiguity, but can also helps
  memory optimization when creating a single element list.
  For example,

    labelListList labels(one(), identity(mesh.nFaces()));
2018-03-01 14:12:51 +01:00
ffd7b00ad5 ENH: fvMatrix::setReferences() single value variant 2018-03-02 13:27:34 +01:00
53ab527b45 ENH: added constexpr, noexcept for bool, Switch
- rationalized some method naming.
  Eg, c_str() instead of asText()
2018-03-03 20:32:49 +01:00
b4703f4a08 ENH: pre-cleanup of Xfer class (issue #639)
- This class is largely a pre-C++11 holdover, prior to having movable
  references.

- align internals with autoPtr instead of always unconditionally
  allocating memory. The valid() method can be used to check for a null
  pointer.

- Consolidate into a single file, in anticipation of future removal.
2018-03-04 21:38:33 +01:00
081783db6c ENH: add Xfer rvalue(), valid() methods
- rvalue() is a (transitional) means of converting Xfer content to a
  reference for move construct, move assign semantics.

- valid() method for consistency with autoPtr and tmp classes
2018-02-28 09:30:31 +01:00
25339a5b49 ENH: minor cleanup of the Xfer class
- simplify structure, removed unused constuctors.

- transfer from base objects via '=' assignment removed as being too
  non-transparent

- add New factory method with perfect forwarding.
2018-01-26 15:53:57 +01:00
db1c1e89be ENH: avoid xfer on simple data types
- in many places can use move construcors or rely on RVO
2018-01-26 12:50:06 +01:00
fa3acc9955 ENH: make CompactListList swapable and move construct/assignable 2018-01-26 12:19:48 +01:00
d029f4c5c9 ENH: improved swap/transfer methods for FixedList
- the transfer method was previously a copy

- use std::reverse_iterator adaptors in FixedList
  This greatly reduces the amount of code and now avoids the array-bounds
  warning for FixedList::rend()

- use pointer arithmetic instead of dereferencing the internal array
2018-01-25 18:23:11 +01:00
8fc27e0ec8 ENH: make hashedWordList movable 2018-01-25 15:00:25 +01:00
915e8c9f35 ENH: remove Foam::Swap specializations for HashSet, HashTable
- without these will use the normal move construct + move assign.
  This is similarly efficient, but avoids the inadvertently having the
  incorrect Swap being used for derived classes.

STYLE: remove unused xfer methods for HashTable, HashSet

- unneeded since move construct and move assignment are possible
2018-01-25 12:13:16 +01:00
7ee93afe9e ENH: allow early completion in PackedBoolList::used()
- can stop producing content when the target number of entries has
  been reached.

- change return type to labelList instead an Xfer container.
  This allows return-value-optimization and avoids a surrounding
  allocation. This potentially breaks existing code.

- make PackedList and PackedBoolList moveable. Drop xfer wrappers.
2018-01-25 10:16:23 +01:00
2f32b586b5 ENH: PtrList, UPtrList cleanup
- rationalize iterators, reduce code duplication,
  improve assignment behaviour, moveable construct and assignment.
2018-01-09 13:15:50 +01:00
cc5f30f25e ENH: several improvements for linked-lists
- support move construct/assignment for linked-lists themselves
  and when moving into a 'normal' list

- better consistency with begin/end signatures and the various
  iterators.

- for indirect linked-lists, provide iterator access to the underlying
  data element address:   iter.get()  vs  &(iter())

- add standard '->' indirection for iterators (as per normal STL
  definitions)
2017-11-27 14:11:25 +01:00
37e248c74b STYLE: consistent use of wordHashSet instead of HashSet<word>
- the wordHashSet typedef is always available when HashSet has been
  included.

- use default HashTable key (word) instead of explicitly mentioning it
2018-02-22 11:19:47 +01:00
ec38e7a408 ENH: prevent conversion of string to regExp in stringListOps (closes #739)
* For most cases, this conversion would be largely unintentional
  and also less efficient. If the regex is desirable, the caller
  should invoke it explicitly.
  For example,

      findStrings(regExp(str), listOfStrings);

  Or use one of the keyType, wordRe, wordRes variants instead.
  If string is to be used as a plain (non-regex) matcher,
  this can be directly invoked

      findMatchingStrings(str, listOfStrings);

  or using the ListOps instead:

      findIndices(listOfStrings, str);

* provide function interfaces for keyType.
2018-02-22 09:28:03 +01:00
f959927910 ENH: improve consistency of ListOps and stringListOps
- subsetList, inplaceSubsetList with optional inverted logic.

- use moveable elements where possible.

- allow optional starting offset for the identity global function.
  Eg,  'identity(10, start)' vs 'identity(10) + start'
2018-02-21 12:58:00 +01:00
3ee2f3293e STYLE: avoid global findIndex() in favour of UList::find() 2018-02-21 11:50:34 +01:00
c126464d1c ENH: change wordRes to be a List of wordRe instead of a wrapper (issue #259)
- this permits direct storage of a list with additional matcher
  capabilities

- provide wordRes::matcher class for similar behaviour as previously
2018-02-21 10:05:30 +01:00
03b287ed24 COMP: adjust tests to compile with current code base 2018-02-20 17:24:08 +01:00
87b1bbacd8 ENH: support writeLagrangianPositions in redistributePar (issue #702) 2018-02-20 15:22:47 +01:00
cbbb9753eb STYLE: consolidate positionsCompat1706 structure (issue #721) 2018-02-19 11:57:57 +01:00
8033592eb1 Merge branch 'develop' of develop.openfoam.com:Development/OpenFOAM-plus into develop 2018-02-14 10:17:32 +00:00
ad3d5020f7 ENH: foamDictionary. Added comment. Fixes #316. 2018-02-14 10:17:13 +00:00
3e3c97397e STYLE: simplify hashing to use struct instead of class
- more consistent with STL practices for function classes.

- string::hash function class now operates on std::string rather
  than Foam::string since we have now avoided inadvertent use of
  string conversion from int in more places.
2018-02-09 15:34:59 +01:00
09a6e94073 BUG: incorrect HashTable / HashSet instances
- Eg instead of using labelHashSet, used HashSet<label> which uses
  the string::hash for hashing. Other places inadvertently using the
  string::hash instead of Hash<label> for hashing.

STYLE: use Map<..> instead of HashTable<.., label, Hash<label>>

- reduces clutter
2018-02-09 09:30:02 +01:00
806b668418 STYLE: two-parameter Foam::name replaced by word::printf (issue #724)
- reduces some ambiguity and clarifies the expected output and
  behaviour.

STYLE: reduce some automatic conversions of char to string
2018-02-08 12:00:54 +01:00
e42c228155 ENH: cleanup List constructors (issue #725)
- add copy construct from UList

- remove copy construct from dissimilar types.

  This templated constructor was too generous in what it accepted.
  For the special cases where a copy constructor is required with
  a change in the data type, now use the createList factory method,
  which accepts a unary operator. Eg,

      auto scalars = scalarList::createList
      (
          labels,
          [](const label& val){ return 1.5*val; }
      );
2018-02-08 08:53:14 +01:00
e2332d6bd2 COMP: better handling of versioned cmake libraries
- sentinel was not working properly when building user-space routines
2018-01-31 08:35:56 +01:00
1b9aec2a3d CONP: suppress register warnings for clang only 2018-01-30 06:49:32 +01:00
e13f8a38a9 COMP: suppress warning about deprecated register keyword (Flex) 2018-01-29 09:13:28 +01:00
9bd7ea593e ENH: added fileName::relative() method
- this currently just strips off the leading parent directory name

     "/this/path/and/subdirs/name"

     relative("/this/path")  -> "and/subdirs/name"
     relative("/this")       -> "path/and/subdirs/name"
2018-01-23 18:25:55 +01:00
39ee5d5079 ENH: add HashTable += operation (combines HashTables)
- adjust return values of HashSet operators.
2018-01-23 16:35:43 +01:00
7f3d4b3554 Merge branch 'master' into develop 2018-01-23 16:11:28 +01:00
294a3d05ba BUG: problems converting clouds to ensight or vtk format (closes #708)
- problems when the cloud was not available on all processors.

- NB: ensight measured data only allows a single cloud, but
  foamToEnsight writes all clouds.
2018-01-23 15:39:45 +01:00
23c9dd716d ENH: coding cleanup for memory streams
- simplify structure.
- protect against nullptr when resetting memory streams
- make UIListStream swappable
- add uiliststream as an example of using a plain std::istream
2018-01-22 09:42:06 +01:00
0a5e4cf1b0 ENH: define stdFoam::min(), stdFoam::max() as constexpr as per C++14 2018-01-19 17:13:03 +01:00
17b82e5e7e Merge remote-tracking branch 'origin/master' into develop 2018-01-17 14:08:11 +01:00
2ebcb74dd2 BUG: reconstructPar ignores writeLagrangianPositions (fixes #702)
- The central InfoSwitch "writeLagrangianPositions" allows writing an
  additional Lagrangian "positions" file, but these were not being
  written by reconstructPar. These are now also written in reconstructPar
  if the central writeLagrangianPositions InfoSwitch is enabled.

NOTES

- "positions" are reconstructed from the processors "coordinates" file

- decomposePar will not attempt to create or redistribute any
  "positions" files
2018-01-17 13:38:24 +01:00
12aa2d3c30 ENH: SubStrings::str(int) method for similarity with std::smatch
- define regExp::results_type using SubStrings container for handling
  groups. This makes a later shift to std::smatch easier, but changes
  the regExp API for matching with groups. Previously had list element
  0 for regex group 1, now list element 0 is the entire match and list
  element 1 is regex group 1.

  Old:
      List<std::string> mat;
      if (re.match(text, mat))  Info<< "group 1: " << mat[0] << nl;

  New:
      regExp::results_type mat;
      if (re.match(text, mat))  Info<< "group 1: " << mat.str(1) << nl;
2018-01-17 00:15:36 +01:00
1510c0aeb5 ENH: interIsoFoam - added linkage against wave modelling library 2018-01-11 14:30:26 +00:00
adbbd0e678 ENH: add argList option ignoring for compatibility upgrades
- can be used to handle when options become redundant, but it is
  undesirable to treat its presence as an error. Can now tag it as
  being ignored.

     argList::ignoreOptionCompat({"oldOption", 1706}, true);
     argList::ignoreOptionCompat({"oldBoolOpttion", 1706}, false);

     command  -oldOption xyz -oldBoolOpttion
2018-01-08 16:25:27 +01:00
345a2a42f1 ENH: simplify method names for reading argList options and arguments
- use succincter method names that more closely resemble dictionary
  and HashTable method names. This improves method name consistency
  between classes and also requires less typing effort:

    args.found(optName)        vs.  args.optionFound(optName)
    args.readIfPresent(..)     vs.  args.optionReadIfPresent(..)
    ...
    args.opt<scalar>(optName)  vs.  args.optionRead<scalar>(optName)
    args.read<scalar>(index)   vs.  args.argRead<scalar>(index)

- the older method names forms have been retained for code compatibility,
  but are now deprecated
2018-01-08 15:35:18 +01:00
2feb11dbeb ENH: add testing for directory lister class 2018-01-10 15:01:12 +01:00
9dc361dae9 STYLE: avoid unnecessary use of optionLookup
- direct parsing of -funcs to ITstream.
- use direct lookup when the option is a word/string
2018-01-08 12:38:53 +01:00
199dc3376c STYLE: missing comma in Test-decomposePar 2018-01-08 11:57:54 +01:00
4fd32bfdf2 COMP: incorrect executable path sphereSurfactantFoam (closes #695) 2018-01-08 10:51:00 +01:00
f55a42a835 ENH: improve robustness of scalarRanges from string (fixes #673)
- now avoid Istream and token mechanism in favour of a simpler string
  parser. This makes the code clearer, smaller, robuster.

- provide convenience ge/gt/le/lt static constructors for scalarRange
  for using bounds directly with specifying via a string parameter.

- scalarRange, scalarRanges now follow the unary predicate pattern
  (using an operator() for testing). This allows their reuse in
  other contexts. Eg, for filtering operations:

      myHash.filterValues(scalarRange::ge(100));

- remove unused scalarRanges methods that were specific to handling
  lists of time values. These were superseded by timeSelector methods
  several versions ago.
2018-01-08 09:59:04 +01:00