std::string now only intercepted if STRING_VERIFY_ON

This commit is contained in:
John Wiegley 2009-11-05 02:24:39 -05:00
parent 3dc200983d
commit 817f1ae161
3 changed files with 24 additions and 6 deletions

View file

@ -74,11 +74,13 @@ typedef register_python_conversion<bool, bool_to_python, bool_from_python>
bool_python_conversion;
#if defined(STRING_VERIFY_ON)
struct string_to_python
{
static PyObject* convert(const string& str)
static PyObject* convert(const ledger::string& str)
{
return incref(object(*boost::polymorphic_downcast<const std::string *>(&str)).ptr());
return incref(object(static_cast<const std::string&>(str)).ptr());
}
};
@ -95,15 +97,17 @@ struct string_from_python
const char* value = PyString_AsString(obj_ptr);
if (value == 0) throw_error_already_set();
void* storage =
reinterpret_cast<converter::rvalue_from_python_storage<string> *>(data)->storage.bytes;
new (storage) string(value);
reinterpret_cast<converter::rvalue_from_python_storage<ledger::string> *>(data)->storage.bytes;
new (storage) ledger::string(value);
data->convertible = storage;
}
};
typedef register_python_conversion<string, string_to_python, string_from_python>
typedef register_python_conversion<ledger::string, string_to_python, string_from_python>
string_python_conversion;
#endif // STRING_VERIFY_ON
struct istream_to_python
{
@ -209,7 +213,9 @@ void export_utils()
;
bool_python_conversion();
#if defined(STRING_VERIFY_ON)
string_python_conversion();
#endif
istream_python_conversion();
ostream_python_conversion();
}

View file

@ -407,6 +407,8 @@ void report_memory(std::ostream& out, bool report_all)
}
#if defined(STRING_VERIFY_ON)
string::string() : std::string() {
TRACE_CTOR(string, "");
}
@ -443,6 +445,8 @@ string::~string() throw() {
TRACE_DTOR(string);
}
#endif // STRING_VERIFY_ON
} // namespace ledger
#endif // VERIFY_ON

View file

@ -62,6 +62,10 @@
#define TIMERS_ON 1
#endif
#if defined(VERIFY_ON)
//#define STRING_VERIFY_ON 1
#endif
/*@}*/
/**
@ -72,7 +76,7 @@
namespace ledger {
using namespace boost;
#if defined(VERIFY_ON)
#if defined(STRING_VERIFY_ON)
class string;
#else
typedef std::string string;
@ -158,6 +162,8 @@ void trace_dtor_func(void * ptr, const char * cls_name, std::size_t cls_size);
void report_memory(std::ostream& out, bool report_all = false);
#if defined(STRING_VERIFY_ON)
/**
* @brief Brief
*
@ -236,6 +242,8 @@ inline bool operator!=(const char* __lhs, const string& __rhs)
inline bool operator!=(const string& __lhs, const char* __rhs)
{ return __lhs.compare(__rhs) != 0; }
#endif // STRING_VERIFY_ON
} // namespace ledger
#else // ! VERIFY_ON