1
//-----------------------------------------------------------------------------
3
// Copyright (c) 1998 - 2007, The Regents of the University of California
4
// Produced at the Lawrence Livermore National Laboratory
5
// All rights reserved.
7
// This file is part of PyCXX. For details,see http://cxx.sourceforge.net/. The
8
// full copyright notice is contained in the file COPYRIGHT located at the root
9
// of the PyCXX distribution.
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are met:
14
// - Redistributions of source code must retain the above copyright notice,
15
// this list of conditions and the disclaimer below.
16
// - Redistributions in binary form must reproduce the above copyright notice,
17
// this list of conditions and the disclaimer (as noted below) in the
18
// documentation and/or materials provided with the distribution.
19
// - Neither the name of the UC/LLNL nor the names of its contributors may be
20
// used to endorse or promote products derived from this software without
21
// specific prior written permission.
23
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26
// ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OF THE UNIVERSITY OF
27
// CALIFORNIA, THE U.S. DEPARTMENT OF ENERGY OR CONTRIBUTORS BE LIABLE FOR
28
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
36
//-----------------------------------------------------------------------------
38
#include "CXX/Objects.hxx"
41
Py_UNICODE unicode_null_string[1] = { 0 };
43
Type Object::type () const
45
return Type (PyObject_Type (p), true);
48
String Object::str () const
50
return String (PyObject_Str (p), true);
53
String Object::repr () const
55
return String (PyObject_Repr (p), true);
58
std::string Object::as_string() const
60
return static_cast<std::string>(str());
63
List Object::dir () const
65
return List (PyObject_Dir (p), true);
68
bool Object::isType (const Type& t) const
70
return type ().ptr() == t.ptr();
73
Char::operator String() const
78
// TMM: non-member operaters for iterators - see above
79
// I've also made a bug fix in respect to the cxx code
80
// (dereffed the left.seq and right.seq comparison)
81
bool operator==(const Sequence::iterator& left, const Sequence::iterator& right)
83
return left.eql( right );
86
bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right)
88
return left.neq( right );
91
bool operator< (const Sequence::iterator& left, const Sequence::iterator& right)
93
return left.lss( right );
96
bool operator> (const Sequence::iterator& left, const Sequence::iterator& right)
98
return left.gtr( right );
101
bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right)
103
return left.leq( right );
106
bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right)
108
return left.geq( right );
111
// now for const_iterator
112
bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
114
return left.eql( right );
117
bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
119
return left.neq( right );
122
bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
124
return left.lss( right );
127
bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
129
return left.gtr( right );
132
bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
134
return left.leq( right );
137
bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
139
return left.geq( right );
143
bool operator==(const Mapping::iterator& left, const Mapping::iterator& right)
145
return left.eql( right );
148
bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right)
150
return left.neq( right );
153
// now for const_iterator
154
bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
156
return left.eql( right );
159
bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
161
return left.neq( right );
164
// TMM: 31May'01 - Added the #ifndef so I can exclude iostreams.
165
#ifndef CXX_NO_IOSTREAMS
168
std::ostream& operator<< (std::ostream& os, const Object& ob)
170
return (os << static_cast<std::string>(ob.str()));