Code revision
TODO list for the code revison:
* renaming _impl.h files to .hpp
* change boolean return type to exception throwing
- [x] fix exception catching by-reference: #29
- [x] use `ASSERT_NO_THROW( map.save( "multimap-test.tnl" ) );` instead of `ASSERT_TRUE( map.save( "multimap-test.tnl" ) );` etc. in tests (see https://github.com/google/googletest/blob/master/googletest/docs/advanced.md#exception-assertions)
* change boolean flag style parameters into enum class
* use operators << and >> insteal of File.read and File.write where it makes sense
* [x] add exception `NotImplementedError` and use it instead of codes like this:
```cpp
std::cerr << "Type conversion during saving is not implemented for MIC." << std::endl;
abort();
```
Or this:
```cpp
TNL_ASSERT( false, std::cerr << "TODO: implement" );
```
* [x] Documentation: indicate which functions/methods throw which exceptions
* Remove useless types from the public interface of classes:
- [x] `ThisType` - useless for the outside of the class, and the implementation of methods can simply use the class name
* [x] switch to C++14
----
- [x] String
- [x] Timer
- [x] Object
- [x] change bool save and load to void
- [x] File
- [x] Update examples, add data conversion.
- [x] use TransferBufferSize from Devices::Cuda
- [x] Remove `File::Mode` enum, use [std::ios_base::openmode](https://en.cppreference.com/w/cpp/io/ios_base/openmode) directly
- [x] Remove specific exceptions (`ArrayWrongSize`, `MeshFunctionDataMismatch`, `NotTNLFile`, `ObjectTypeDetectionFailure`, `ObjectTypeMismatch`) - all `save`/`load` methods should throw only `FileSerializationError`/`FileDeserializationError`
- [x] FileName
- [x] Array
- [x] Add method for setting array elements using lambda function
- [x] Copy constructor have to make deep copy - DOES NOT WORK with MultiMap yet
- [x] Add copy constructors from `std::list`, `std::vector` and `std::initializer_list`
- [x] Replace bind methods with ArrayView - after refactoring MeshFunction
- [x] Avoid binding in `Array( const Array&, const Index begin, const Index size );`
- [x] Remove `boundLoad` (used only in `Array` and derived objects, loading via `ArrayView` can be used instead: `array.getView().load( file );`)
- [x] Use `operator<<` and `operator>>` instead of `save` and `load` methods
- [x] Delete `operator bool ()`
- [x] ArrayView
- [x] what about `__cuda_callable__` ArrayView assignment?
- [x] Use `operator<<` and `operator>>` instead of `save` and `load` methods
- [x] StaticVector
- [x] Replace all for loops with static loops, i.e. templated for
- [x] u * v should not be dot product but element-wisi multiplication
- [x] use (u,v) for dot product
- [x] Vector
- [x] `Vector` should have the same serialization type as `Array` so that arrays can be loaded into vectors and vice versa
- [x] Delete methods for vector operations which are used in linear solvers - the replacement in the solvers must be tested carefuly
- [x] Implement DistributedVectorExpressions and DistributedVectorViewExpressions
- [x] On some places the method getView() is used because DistributedVectorExpressions are not implemented yet (mainly linear solvers and BLAS benchmark) - all occurences can be deleted later
- [x] Add constructor from expression template
- [x] Remove MultiVector and MultiArray - after refactoring Cameo - summer 2019
- [x] Parallel reduction
- [x] Use auto in lambdas to avoid volatileReduction - it does not work with CUDA 10.0
- [x] Rewrite multi-reduction with lambdas
- [x] ConfigDescription
- [x] ParameterContainer
- allow any types (currently only `int`, `double`, `bool`, `String`)
- allow easy instantiation without the command-line parser (e.g. to pass a dict from python)
- exceptions when accessing unknown parameters
- [x] Logger
- moved to https://mmg-gitlab.fjfi.cvut.cz/gitlab/tnl/tnl-dev/-/issues/98
- [x] Pointers
- moved to https://mmg-gitlab.fjfi.cvut.cz/gitlab/tnl/tnl-dev/-/issues/97
- [x] Matrices
- [x] fix getSerializationType the same way as in Array
- [x] rename the method setCompressedRowLengths to setRowCapacities
- [x] implement sparse matrices using Segments
- [x] implement CSR matrix and Ellpack matrix using the Segments, use existing unit tests for debugging
- [ ] implement set/addRow using VectorView and lambda functions
- [x] implement "Lambda matrix" - the element values are given by a lambda function
- [x] implement constructor from initializer list to DenseMatrix
- [x] implement method for setting elements from initializer list to sparse matrix
- [x] implement constructor and method for setting elements from std::map similar to initializer list to sparse matrix
- [ ] update dense matrix multiplication with the new dense matrix implementation
- [ ] update dense matrix transposition with the new dense matrix implementation
- [x] move methods for matrux coloring outside the matrices
- [ ] finish DenseMatrixView::getRowVectorProduct
- [x] implement opertor == for matrices
- [x] Add constructor of matrix views from vector views
- [x] Allocators
- moved to !33
issue