1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
//---------------------------------------------------------------------------//
// Copyright 1998 The Regents of the University of California.
// All rights reserved. See Legal.htm for full text and disclaimer.
//---------------------------------------------------------------------------//
#include "Objects.hxx"
namespace Py {
Py_UNICODE unicode_null_string[1] = { 0 };
Type Object::type () const
{
return Type (PyObject_Type (p), true);
}
String Object::str () const
{
return String (PyObject_Str (p), true);
}
String Object::repr () const
{
return String (PyObject_Repr (p), true);
}
std::string Object::as_string() const
{
return static_cast<std::string>(str());
}
List Object::dir () const
{
return List (PyObject_Dir (p), true);
}
bool Object::isType (const Type& t) const
{
return type ().ptr() == t.ptr();
}
Char::operator String() const
{
return String(ptr());
}
// TMM: non-member operaters for iterators - see above
// I've also made a bug fix in respect to the cxx code
// (dereffed the left.seq and right.seq comparison)
bool operator==(const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.eql( right );
}
bool operator!=(const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.neq( right );
}
bool operator< (const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.lss( right );
}
bool operator> (const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.gtr( right );
}
bool operator<=(const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.leq( right );
}
bool operator>=(const Sequence::iterator& left, const Sequence::iterator& right)
{
return left.geq( right );
}
// now for const_iterator
bool operator==(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.eql( right );
}
bool operator!=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.neq( right );
}
bool operator< (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.lss( right );
}
bool operator> (const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.gtr( right );
}
bool operator<=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.leq( right );
}
bool operator>=(const Sequence::const_iterator& left, const Sequence::const_iterator& right)
{
return left.geq( right );
}
// For mappings:
bool operator==(const Mapping::iterator& left, const Mapping::iterator& right)
{
return left.eql( right );
}
bool operator!=(const Mapping::iterator& left, const Mapping::iterator& right)
{
return left.neq( right );
}
// now for const_iterator
bool operator==(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
{
return left.eql( right );
}
bool operator!=(const Mapping::const_iterator& left, const Mapping::const_iterator& right)
{
return left.neq( right );
}
// TMM: 31May'01 - Added the #ifndef so I can exclude iostreams.
#ifndef CXX_NO_IOSTREAMS
// output
std::ostream& operator<< (std::ostream& os, const Object& ob)
{
return (os << static_cast<std::string>(ob.str()));
}
#endif
} // Py
|