CStringListTemplates.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2016-2017 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "SubStrings.H"
29
30// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
31
32template<class ListType>
33int Foam::CStringList::resetContent(const ListType& input)
34{
35 clear();
36
37 if (input.empty())
38 {
39 // Special handling of an empty list
40 argv_ = new char*[1];
41 argv_[0] = nullptr; // Final nullptr terminator
42 return 0;
43 }
44
45 // Count overall required string length, including each trailing nul char
46 for (const auto& str : input)
47 {
48 nbytes_ += str.length() + 1;
49 }
50 --nbytes_; // Do not include final nul char in overall count
51
52 argv_ = new char*[input.size()+1]; // Extra +1 for terminating nullptr
53 data_ = new char[nbytes_+1]; // Extra +1 for terminating nul char
54
55 argv_[0] = data_; // Starts here
56
57 for (const auto& str : input)
58 {
59 char *next = stringCopy(argv_[argc_], str);
60 argv_[++argc_] = next; // The start of next string
61 }
62
63 argv_[argc_] = nullptr; // Final nullptr terminator
64
65 return argc_;
66}
67
68
69// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
70
71template<class StringType>
73Foam::CStringList::asList(int argc, const char * const argv[])
74{
75 List<StringType> list(argc);
76
77 for (int i=0; i < argc; ++i)
78 {
79 list[i] = argv[i];
80 }
81
82 return list;
83}
84
85
86template<class StringType>
88Foam::CStringList::asList(const char * const argv[])
89{
90 return asList<StringType>(count(argv), argv);
91}
92
93
94// ************************************************************************* //
static List< StringType > asList(int argc, const char *const argv[])
Create a list from argc/argv parameters.
void clear()
Clear contents and free memory.
Definition: CStringListI.H:100
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: List.H:77
static Istream & input(Istream &is, IntRange< T > &range)
Definition: IntRanges.C:55