summaryrefslogtreecommitdiff
path: root/indra/llcommon/tests/StringVec.h
blob: 761956a012345226a071b40c3e78d22533118e25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**
 * @file   StringVec.h
 * @author Nat Goodspeed
 * @date   2012-02-24
 * @brief  Extend TUT ensure_equals() to handle std::vector<std::string>
 * 
 * $LicenseInfo:firstyear=2012&license=viewerlgpl$
 * Copyright (c) 2012, Linden Research, Inc.
 * $/LicenseInfo$
 */

#if ! defined(LL_STRINGVEC_H)
#define LL_STRINGVEC_H

#include <vector>
#include <string>
#include <iostream>

typedef std::vector<std::string> StringVec;

#if defined(LL_LLTUT_H)
// Modern compilers require us to define operator<<(std::ostream&, StringVec)
// before the definition of the ensure() template that engages it. The error
// stating that the compiler can't find a viable operator<<() is so perplexing
// that even though I've obviously hit it a couple times before, a new
// instance still caused much head-scratching. This warning is intended to
// demystify any inadvertent future recurrence.
#warning "StringVec.h must be #included BEFORE lltut.h for ensure() to work"
#endif

std::ostream& operator<<(std::ostream& out, const StringVec& strings)
{
    out << '(';
    StringVec::const_iterator begin(strings.begin()), end(strings.end());
    if (begin != end)
    {
        out << '"' << *begin << '"';
        while (++begin != end)
        {
            out << ", \"" << *begin << '"';
        }
    }
    out << ')';
    return out;
}

#endif /* ! defined(LL_STRINGVEC_H) */