/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd. ------------------------------------------------------------------------------- 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 . Application Description \*---------------------------------------------------------------------------*/ #include "OSspecific.H" #include "IOstreams.H" #include "SLList.H" #include "List.H" #include "FlatOutput.H" #include "ListOps.H" using namespace Foam; template void printAddress(const UList& list) { Info<< "list addr: " << long(&list) << " data addr: " << long(list.cdata()) << nl; } template void printAddresses(const SLList>& sll) { for (const auto& elem : sll) { printAddress(elem); } } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Main program: int main(int argc, char *argv[]) { SLList myList{2.1, 3.4}; myList = {2.1, 3.4, 4.3}; for (int i = 0; i<10; i++) { myList.append(1.3*i); } myList.append(100.3); myList.append(500.3); Info<< "SLList" << myList << nl; Info<< nl << "flat-output: " << flatOutput(myList) << nl; Info<< nl << "range-for:" << nl; for (const auto& val : myList) { Info<< " " << val << nl; } Info<< nl << "const_iterator:" << nl; const SLList& const_myList = myList; forAllConstIters(const_myList, iter) { Info<< " " << *iter << endl; } Info<< nl << "Remove elements:" << nl; forAllIters(myList, iter) { Info<< " remove " << *iter; myList.remove(iter); Info<< " => " << flatOutput(myList) << nl; } for (int i = 0; i<10; i++) { myList.append(1.3*i); } myList.append(100.3); myList.append(500.3); Info<< nl << "Transfer: " << nl; Info<< "original: " << flatOutput(myList) << endl; SLList newList; newList.transfer(myList); Info<< nl << "source: " << flatOutput(myList) << nl << "target: " << flatOutput(newList) << nl; Info<< nl << "Move Construct: " << nl; SLList list2(std::move(newList)); Info<< nl << "in : " << flatOutput(newList) << nl << "out: " << flatOutput(list2) << nl; // Move back Info<< nl << "Move Assignment: " << nl; newList = std::move(list2); Info<< nl << "in : " << flatOutput(newList) << nl << "out: " << flatOutput(list2) << nl; // Try delete data recovery { SLList> labList; for (int i = 0; i<5; i++) { labList.append(identity(6)); } Info<< nl << "SLList : " << labList << nl; printAddresses(labList); auto elem = labList.removeHead(); Info<< " removed head" << nl; printAddress(elem); elem = labList.removeHead(); Info<< " removed head" << nl; printAddress(elem); List