diff --git a/src/db/db/dbShapes3.cc b/src/db/db/dbShapes3.cc index 090feb347..52c116cf3 100644 --- a/src/db/db/dbShapes3.cc +++ b/src/db/db/dbShapes3.cc @@ -45,7 +45,7 @@ iterator_from_shape (const db::layer &layer, const d { // compute the iterator by some pointer arithmetics assuming that layer uses an contiguous container // in unstable mode ... - return layer.begin () + (shape.basic_ptr (typename Sh::tag ()) - &*layer.begin ()); + return layer.begin () + (shape.basic_ptr (typename Sh::tag ()) - layer.begin ().operator-> ()); } template @@ -60,7 +60,7 @@ template inline bool iterator_from_shape_is_valid (const db::layer &layer, const db::Shape &shape) { - return layer.size () < (shape.basic_ptr (typename Sh::tag ()) - &*layer.begin ()); + return layer.size () > size_t (shape.basic_ptr (typename Sh::tag ()) - layer.begin ().operator-> ()); } // ------------------------------------------------------------------------------- @@ -272,14 +272,21 @@ bool Shapes::is_valid_shape_by_tag (Tag /*tag*/, const shape_type &shape) const { if (! is_editable ()) { - throw tl::Exception (tl::to_string (tr ("Function 'is_valid' is permitted only in editable mode"))); - } - if (! shape.has_prop_id ()) { - typedef typename Tag::object_type s_type; - return iterator_from_shape_is_valid (get_layer (), shape); + if (! shape.has_prop_id ()) { + typedef typename Tag::object_type s_type; + return iterator_from_shape_is_valid (get_layer (), shape); + } else { + typedef db::object_with_properties swp_type; + return iterator_from_shape_is_valid (get_layer (), shape); + } } else { - typedef db::object_with_properties swp_type; - return iterator_from_shape_is_valid (get_layer (), shape); + if (! shape.has_prop_id ()) { + typedef typename Tag::object_type s_type; + return iterator_from_shape_is_valid (get_layer (), shape); + } else { + typedef db::object_with_properties swp_type; + return iterator_from_shape_is_valid (get_layer (), shape); + } } }