Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
IDSupplier.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
20// A class that generates enumerated and prefixed string-ids
21/****************************************************************************/
22#include <config.h>
23
24#include <string>
25#include <sstream>
26#include <iostream>
27#include "StdDefs.h"
28#include "IDSupplier.h"
29
30
31// ===========================================================================
32// method definitions
33// ===========================================================================
34IDSupplier::IDSupplier(const std::string& prefix, long long int begin)
35 : myCurrent(begin), myPrefix(prefix) {}
36
37
38
39IDSupplier::IDSupplier(const std::string& prefix, const std::vector<std::string>& knownIDs)
40 : myCurrent(0), myPrefix(prefix) {
41 for (std::vector<std::string>::const_iterator id_it = knownIDs.begin(); id_it != knownIDs.end(); ++id_it) {
42 avoid(*id_it);
43 }
44}
45
46
48
49
50std::string
52 std::ostringstream strm;
53 strm << myPrefix << myCurrent++;
54 return strm.str();
55}
56
57
58void
59IDSupplier::avoid(const std::string& id) {
60 // does it start with prefix?
61 if (id.find(myPrefix) == 0) {
62 long long int number;
63 std::istringstream buf(id.substr(myPrefix.size()));
64 buf >> number;
65 // does it continue with a number?
66 if (!buf.fail()) {
67 myCurrent = MAX2(myCurrent, number + 1);
68 }
69 }
70}
71
72
73/****************************************************************************/
T MAX2(T a, T b)
Definition StdDefs.h:82
long long int myCurrent
The current index.
Definition IDSupplier.h:58
std::string myPrefix
The prefix to use.
Definition IDSupplier.h:61
std::string getNext()
Returns the next id.
IDSupplier(const std::string &prefix="", long long int begin=0)
Constructor.
~IDSupplier()
Destructor.
void avoid(const std::string &id)
make sure that the given id is never supplied