~evarlast/ubuntu/utopic/mongodb/upstart-workaround-debian-bug-718702

« back to all changes in this revision

Viewing changes to src/mongo/bson/stringdata.h

  • Committer: Package Import Robot
  • Author(s): James Page, James Page, Robie Basak
  • Date: 2013-05-29 17:44:42 UTC
  • mfrom: (44.1.7 sid)
  • Revision ID: package-import@ubuntu.com-20130529174442-z0a4qmoww4y0t458
Tags: 1:2.4.3-1ubuntu1
[ James Page ]
* Merge from Debian unstable, remaining changes:
  - Enable SSL support:
    + d/control: Add libssl-dev to BD's.
    + d/rules: Enabled --ssl option.
    + d/mongodb.conf: Add example SSL configuration options.
  - d/mongodb-server.mongodb.upstart: Add upstart configuration.
  - d/rules: Don't strip binaries during scons build for Ubuntu.
  - d/control: Add armhf to target archs.
  - d/p/SConscript.client.patch: fixup install of client libraries.
  - d/p/0010-install-libs-to-usr-lib-not-usr-lib64-Closes-588557.patch:
    Install libraries to lib not lib64.
* Dropped changes:
  - d/p/arm-support.patch: Included in Debian.
  - d/p/double-alignment.patch: Included in Debian.
  - d/rules,control: Debian also builds with avaliable system libraries
    now.
* Fix FTBFS due to gcc and boost upgrades in saucy:
  - d/p/0008-ignore-unused-local-typedefs.patch: Add -Wno-unused-typedefs
    to unbreak building with g++-4.8.
  - d/p/0009-boost-1.53.patch: Fixup signed/unsigned casting issue.

[ Robie Basak ]
* d/p/0011-Use-a-signed-char-to-store-BSONType-enumerations.patch: Fixup
  build failure on ARM due to missing signed'ness of char cast.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// stringdata.h
2
 
 
3
 
/*    Copyright 2010 10gen Inc.
4
 
 *
5
 
 *    Licensed under the Apache License, Version 2.0 (the "License");
6
 
 *    you may not use this file except in compliance with the License.
7
 
 *    You may obtain a copy of the License at
8
 
 *
9
 
 *    http://www.apache.org/licenses/LICENSE-2.0
10
 
 *
11
 
 *    Unless required by applicable law or agreed to in writing, software
12
 
 *    distributed under the License is distributed on an "AS IS" BASIS,
13
 
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 
 *    See the License for the specific language governing permissions and
15
 
 *    limitations under the License.
16
 
 */
17
 
 
18
 
#pragma once
19
 
 
20
 
#include <cstring>
21
 
#include <string>
22
 
 
23
 
namespace mongo {
24
 
 
25
 
    using std::string;
26
 
 
27
 
    /** A StringData object wraps a 'const string&' or a 'const char*' without
28
 
     * copying its contents. The most common usage is as a function argument that
29
 
     * takes any of the two forms of strings above. Fundamentally, this class tries
30
 
     * go around the fact that string literals in C++ are char[N]'s.
31
 
     *
32
 
     * Note that the object StringData wraps around must be alive while the StringData
33
 
     * is.
34
 
    */
35
 
    class StringData {
36
 
    public:
37
 
        /** Construct a StringData, for the case where the length of
38
 
         * string is not known. 'c' must be a pointer to a null-terminated string.
39
 
         */
40
 
        StringData( const char* c )
41
 
            : _data(c), _size(string::npos){}
42
 
 
43
 
        /** Construct a StringData explicitly, for the case where the length of the string
44
 
         * is already known. 'c' must be a pointer to a null-terminated string, and strlenOfc
45
 
         * must be the length that strlen(c) would return, a.k.a the index of the
46
 
         * terminator in c.
47
 
         */
48
 
        StringData( const char* c, size_t len )
49
 
            : _data(c), _size(len) {}
50
 
 
51
 
        /** Construct a StringData, for the case of a string. */
52
 
        StringData( const std::string& s )
53
 
            : _data(s.c_str()), _size(s.size()) {}
54
 
 
55
 
        // Construct a StringData explicitly, for the case of a literal whose size is
56
 
        // known at compile time.
57
 
        struct LiteralTag {};
58
 
        template<size_t N>
59
 
        StringData( const char (&val)[N], LiteralTag )
60
 
            : _data(&val[0]), _size(N-1) {}
61
 
 
62
 
        // accessors
63
 
        const char* data() const { return _data; }
64
 
        size_t size() const { 
65
 
            if ( _size == string::npos )
66
 
                _size = strlen( _data );
67
 
            return _size; 
68
 
        }
69
 
 
70
 
    private:
71
 
        const char* const _data;  // is always null terminated
72
 
        mutable size_t _size;  // 'size' does not include the null terminator
73
 
    };
74
 
 
75
 
} // namespace mongo