Line data Source code
1 : // The libMesh Finite Element Library. 2 : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 : 4 : // This library is free software; you can redistribute it and/or 5 : // modify it under the terms of the GNU Lesser General Public 6 : // License as published by the Free Software Foundation; either 7 : // version 2.1 of the License, or (at your option) any later version. 8 : 9 : // This library is distributed in the hope that it will be useful, 10 : // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 : // Lesser General Public License for more details. 13 : 14 : // You should have received a copy of the GNU Lesser General Public 15 : // License along with this library; if not, write to the Free Software 16 : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 : 18 : 19 : 20 : #ifndef LIBMESH_NULL_OUTPUT_ITERATOR_H 21 : #define LIBMESH_NULL_OUTPUT_ITERATOR_H 22 : 23 : // Local includes 24 : 25 : // C++ includes 26 : #include <iterator> 27 : 28 : namespace libMesh 29 : { 30 : 31 : /** 32 : * A do-nothing class for templated methods that expect output 33 : * iterator arguments. 34 : * 35 : * \author Roy Stogner 36 : * \date 2012 37 : * \brief A do-nothing output iterator implementation. 38 : */ 39 : template <typename T> 40 : struct null_output_iterator 41 : { 42 : using iterator_category = std::output_iterator_tag; 43 : using value_type = T; 44 : using difference_type = std::ptrdiff_t; 45 : using pointer = T*; 46 : using reference = T&; 47 : 48 : template <typename T2> 49 101163 : void operator=(const T2&) {} 50 : 51 : null_output_iterator & operator++() 52 : { 53 : return *this; 54 : } 55 : 56 101163 : null_output_iterator operator++(int) 57 : { 58 101163 : return null_output_iterator(*this); 59 : } 60 : 61 : // We don't return a reference-to-T here because we don't want to 62 : // construct one or have any of its methods called. 63 101163 : null_output_iterator & operator*() { return *this; } 64 : }; 65 : 66 : } // namespace libMesh 67 : 68 : 69 : #endif // LIBMESH_NULL_OUTPUT_ITERATOR_H