14e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// -*- mode: C++ -*- 24e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 34e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// Copyright (c) 2012, Google Inc. 44e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// All rights reserved. 54e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// 64e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// Redistribution and use in source and binary forms, with or without 74e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// modification, are permitted provided that the following conditions are 84e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// met: 94e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// 104e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// * Redistributions of source code must retain the above copyright 114e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// notice, this list of conditions and the following disclaimer. 124e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// * Redistributions in binary form must reproduce the above 134e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// copyright notice, this list of conditions and the following disclaimer 144e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// in the documentation and/or other materials provided with the 154e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// distribution. 164e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// * Neither the name of Google Inc. nor the names of its 174e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// contributors may be used to endorse or promote products derived from 184e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// this software without specific prior written permission. 194e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// 204e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 214e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 224e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 234e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 244e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 254e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 264e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 274e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 284e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 294e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 304e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 314e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 324e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// Original author: Ivan Penkov 334e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 344e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// using_std_string.h: Allows building this code in environments where 354e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// global string (::string) exists. 364e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// 374e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// The problem: 384e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// ------------- 394e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// Let's say you want to build this code in an environment where a global 404e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// string type is defined (i.e. ::string). Now, let's suppose that ::string 414e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// is different that std::string and you'd like to have the option to easily 424e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// choose between the two string types. Ideally you'd like to control which 434e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// string type is chosen by simply #defining an identifier. 444e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// 454e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// The solution: 464e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// ------------- 474e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// #define HAS_GLOBAL_STRING somewhere in a global header file and then 484e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// globally replace std::string with string. Then include this header 494e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// file everywhere where string is used. If you want to revert back to 504e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// using std::string, simply remove the #define (HAS_GLOBAL_STRING). 514e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 524e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#ifndef THIRD_PARTY_BREAKPAD_SRC_COMMON_USING_STD_STRING_H_ 534e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#define THIRD_PARTY_BREAKPAD_SRC_COMMON_USING_STD_STRING_H_ 544e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 554e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#ifdef HAS_GLOBAL_STRING 564e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com typedef ::string google_breakpad_string; 574e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#else 584e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com using std::string; 594e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com typedef std::string google_breakpad_string; 604e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#endif 614e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 624e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com// Inicates that type google_breakpad_string is defined 634e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#define HAS_GOOGLE_BREAKPAD_STRING 644e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com 654e518a4357a2d1c379d4a91df6d4e153ee791101ivan.penkov@gmail.com#endif // THIRD_PARTY_BREAKPAD_SRC_COMMON_USING_STD_STRING_H_ 66