2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-22 17:32:55 +00:00

Compare commits

..

4 Commits

Author SHA1 Message Date
Jonathan Brandmeyer
50385a46c4 Revert last change. It was the documentation that was in error.
[SVN r23328]
2004-07-03 17:25:41 +00:00
Jonathan Brandmeyer
3d8b4ffa15 Correct the documentation with regard to the default backend for the
numeric::array class.


[SVN r23327]
2004-07-03 17:25:14 +00:00
Jonathan Brandmeyer
78344bf0b8 Use Numeric.ArrayType in preference to numarray.NDArray in accordance
with the documentation.


[SVN r23321]
2004-07-03 04:55:54 +00:00
Jonathan Brandmeyer
486fff38c2 Merge changes from HEAD to:
Throw an IndexError when given an extended slice;
Clip bounds of slices in a mannar consistant with builtin containers;
Prevent undefined behavior within the STL when given certain kinds of
empty slices.


[SVN r22539]
2004-03-22 01:57:09 +00:00
3 changed files with 53 additions and 12 deletions

View File

@@ -83,9 +83,9 @@
interface applies to <code>array</code> instances as well.</p>
<p><a name="default_search"></a>The default behavior is to use
<code>Numeric.ArrayType</code> as the associated Python type if the
<code>Numeric</code> module is installed in the default location.
Otherwise it falls back to use <code>numarray.NDArray</code>. If neither
<code>numarray.NDArray</code> as the associated Python type if the
<code>numarray</code> module is installed in the default location.
Otherwise it falls back to use <code>Numeric.ArrayType</code>. If neither
extension module is installed, conversions to arguments of type
<code>numeric::array</code> will cause overload resolution to reject the
overload, and other attempted uses of <code>numeric::array</code> will <a

View File

@@ -570,15 +570,40 @@ namespace boost { namespace python { namespace detail {
base_get_slice_data(
Container& container, PySliceObject* slice, Index& from, Index& to)
{
if (Py_None != slice->step) {
PyErr_SetString( PyExc_IndexError, "slice step size not supported.");
throw_error_already_set();
}
Index min_index = DerivedPolicies::get_min_index(container);
Index max_index = DerivedPolicies::get_max_index(container);
if (Py_None == slice->start)
from = DerivedPolicies::get_min_index(container);
else
from = DerivedPolicies::convert_index(container, slice->start);
from = min_index;
else {
from = extract<long>( slice->start);
if (from < 0) // Negative slice index
from += max_index;
if (from < 0) // Clip lower bounds to zero
from = 0;
if (from > max_index) // Clip upper bounds to max_index.
from = max_index;
}
if (Py_None == slice->stop)
to = DerivedPolicies::get_max_index(container);
else
to = DerivedPolicies::convert_index(container, slice->stop);
else {
to = extract<long>( slice->stop);
if (to < 0)
to += max_index;
if (to < 0)
to = 0;
if (to > max_index)
to = max_index;
}
}
static void

View File

@@ -81,6 +81,8 @@ namespace boost { namespace python {
static object
get_slice(Container& container, index_type from, index_type to)
{
if (from > to)
return object(Container());
return object(Container(container.begin()+from, container.begin()+to));
}
@@ -94,8 +96,13 @@ namespace boost { namespace python {
set_slice(Container& container, index_type from,
index_type to, data_type const& v)
{
container.erase(container.begin()+from, container.begin()+to);
container.insert(container.begin()+from, v);
if (from > to) {
return;
}
else {
container.erase(container.begin()+from, container.begin()+to);
container.insert(container.begin()+from, v);
}
}
template <class Iter>
@@ -103,8 +110,13 @@ namespace boost { namespace python {
set_slice(Container& container, index_type from,
index_type to, Iter first, Iter last)
{
container.erase(container.begin()+from, container.begin()+to);
container.insert(container.begin()+from, first, last);
if (from > to) {
container.insert(container.begin()+from, first, last);
}
else {
container.erase(container.begin()+from, container.begin()+to);
container.insert(container.begin()+from, first, last);
}
}
static void
@@ -116,6 +128,10 @@ namespace boost { namespace python {
static void
delete_slice(Container& container, index_type from, index_type to)
{
if (from > to) {
// A null-op.
return;
}
container.erase(container.begin()+from, container.begin()+to);
}