1aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Copyright 2005, Google Inc.
2aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// All rights reserved.
3aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
4aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Redistribution and use in source and binary forms, with or without
5aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// modification, are permitted provided that the following conditions are
6aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// met:
7aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
8aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Redistributions of source code must retain the above copyright
9aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// notice, this list of conditions and the following disclaimer.
10aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Redistributions in binary form must reproduce the above
11aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// copyright notice, this list of conditions and the following disclaimer
12aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// in the documentation and/or other materials provided with the
13aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// distribution.
14aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//     * Neither the name of Google Inc. nor the names of its
15aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// contributors may be used to endorse or promote products derived from
16aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// this software without specific prior written permission.
17aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
18aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
30aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A sample program demonstrating using Google C++ testing framework.
31aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter//
32aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// Author: wan@google.com (Zhanyong Wan)
33aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
34aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#ifndef GTEST_SAMPLES_SAMPLE2_H_
35aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#define GTEST_SAMPLES_SAMPLE2_H_
36aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
37aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#include <string.h>
38aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
39aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
40aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter// A simple string class.
41aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchterclass MyString {
42aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter private:
43aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const char* c_string_;
44aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const MyString& operator=(const MyString& rhs);
45aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
46aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter public:
47aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // Clones a 0-terminated C string, allocating memory using new.
48aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  static const char* CloneCString(const char* a_c_string);
49aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
50aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ////////////////////////////////////////////////////////////
51aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  //
52aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // C'tors
53aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
54aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // The default c'tor constructs a NULL string.
55aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  MyString() : c_string_(NULL) {}
56aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
57aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // Constructs a MyString by cloning a 0-terminated C string.
58aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  explicit MyString(const char* a_c_string) : c_string_(NULL) {
59aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Set(a_c_string);
60aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
61aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
62aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // Copy c'tor
63aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  MyString(const MyString& string) : c_string_(NULL) {
64aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    Set(string.c_string_);
65aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
66aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
67aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ////////////////////////////////////////////////////////////
68aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  //
69aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // D'tor.  MyString is intended to be a final class, so the d'tor
70aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // doesn't need to be virtual.
71aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  ~MyString() { delete[] c_string_; }
72aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
73aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // Gets the 0-terminated C string this MyString object represents.
74aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  const char* c_string() const { return c_string_; }
75aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
76aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  size_t Length() const {
77aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter    return c_string_ == NULL ? 0 : strlen(c_string_);
78aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  }
79aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
80aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  // Sets the 0-terminated C string this MyString object represents.
81aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter  void Set(const char* c_string);
82aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter};
83aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
84aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter
85aa46da279e2426caf1e103eb079dfec8124c5feeCourtney Goeltzenleuchter#endif  // GTEST_SAMPLES_SAMPLE2_H_
86