[Rcpp-devel] [Rcpp-commits] r346 - in pkg: inst src src/Rcpp
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Mon Jan 11 22:03:58 CET 2010
Author: romain
Date: 2010-01-11 22:03:55 +0100 (Mon, 11 Jan 2010)
New Revision: 346
Modified:
pkg/inst/ChangeLog
pkg/src/CharacterVector.cpp
pkg/src/ComplexVector.cpp
pkg/src/ExpressionVector.cpp
pkg/src/GenericVector.cpp
pkg/src/IntegerVector.cpp
pkg/src/LogicalVector.cpp
pkg/src/NumericVector.cpp
pkg/src/RawVector.cpp
pkg/src/Rcpp/CharacterVector.h
pkg/src/Rcpp/ComplexVector.h
pkg/src/Rcpp/ExpressionVector.h
pkg/src/Rcpp/GenericVector.h
pkg/src/Rcpp/IntegerVector.h
pkg/src/Rcpp/LogicalVector.h
pkg/src/Rcpp/NumericVector.h
pkg/src/Rcpp/RawVector.h
Log:
*Vector::operator[] throw index out of bounds (FR#770)
Modified: pkg/inst/ChangeLog
===================================================================
--- pkg/inst/ChangeLog 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/inst/ChangeLog 2010-01-11 21:03:55 UTC (rev 346)
@@ -1,5 +1,9 @@
2010-01-11 Romain Francois <francoisromain at free.fr>
+ * src/Rcpp/*Vector.h: operator[] now throws index out of bounds
+ exception when needed (FR#770)
+ * src/*Vector.cpp: same
+
* src/Rcpp/Environment.h: operator[](string) for environment
allowing to get/set values of a binding in this environment.
The Environment::Binding class has been created to act as
Modified: pkg/src/CharacterVector.cpp
===================================================================
--- pkg/src/CharacterVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/CharacterVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -113,11 +113,13 @@
return *this ;
}
-const CharacterVector::StringProxy CharacterVector::operator[](int i) const {
+const CharacterVector::StringProxy CharacterVector::operator[](int i) const throw(index_out_of_bounds){
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return StringProxy(const_cast<CharacterVector&>(*this), i) ;
}
-CharacterVector::StringProxy CharacterVector::operator[](int i) {
+CharacterVector::StringProxy CharacterVector::operator[](int i) throw(index_out_of_bounds) {
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return StringProxy(*this, i ) ;
}
Modified: pkg/src/ComplexVector.cpp
===================================================================
--- pkg/src/ComplexVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/ComplexVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -55,7 +55,8 @@
}
#endif
-Rcomplex& ComplexVector::operator[]( int i ) const {
+Rcomplex& ComplexVector::operator[]( int i ) const throw(index_out_of_bounds){
+ if( i<0 || i>= length()) throw index_out_of_bounds() ;
return COMPLEX(m_sexp)[i] ;
}
Rcomplex* ComplexVector::begin() const {
Modified: pkg/src/ExpressionVector.cpp
===================================================================
--- pkg/src/ExpressionVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/ExpressionVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -89,11 +89,13 @@
return *this ;
}
-const ExpressionVector::Proxy ExpressionVector::operator[](int i) const {
+const ExpressionVector::Proxy ExpressionVector::operator[](int i) const throw(index_out_of_bounds){
+ if( i<0 || i>= length()) throw index_out_of_bounds() ;
return Proxy(const_cast<ExpressionVector&>(*this), i) ;
}
-ExpressionVector::Proxy ExpressionVector::operator[](int i) {
+ExpressionVector::Proxy ExpressionVector::operator[](int i) throw(index_out_of_bounds){
+ if( i<0 || i>= length()) throw index_out_of_bounds() ;
return Proxy(*this, i ) ;
}
Modified: pkg/src/GenericVector.cpp
===================================================================
--- pkg/src/GenericVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/GenericVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -89,11 +89,13 @@
return *this ;
}
-const GenericVector::Proxy GenericVector::operator[](int i) const {
+const GenericVector::Proxy GenericVector::operator[](int i) const throw(index_out_of_bounds){
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return Proxy(const_cast<GenericVector&>(*this), i) ;
}
-GenericVector::Proxy GenericVector::operator[](int i) {
+GenericVector::Proxy GenericVector::operator[](int i) throw(index_out_of_bounds){
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return Proxy(*this, i ) ;
}
Modified: pkg/src/IntegerVector.cpp
===================================================================
--- pkg/src/IntegerVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/IntegerVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -60,7 +60,8 @@
}
#endif
-int& IntegerVector::operator[]( int i ) const {
+int& IntegerVector::operator[]( int i ) const throw(index_out_of_bounds) {
+ if( i < 0 || i >= length() ) throw index_out_of_bounds() ;
return INTEGER(m_sexp)[i] ;
}
int* IntegerVector::begin() const {
Modified: pkg/src/LogicalVector.cpp
===================================================================
--- pkg/src/LogicalVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/LogicalVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -66,7 +66,8 @@
}
#endif
-int& LogicalVector::operator[]( int i ) const {
+int& LogicalVector::operator[]( int i ) const throw(index_out_of_bounds){
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return LOGICAL(m_sexp)[i] ;
}
int* LogicalVector::begin() const {
Modified: pkg/src/NumericVector.cpp
===================================================================
--- pkg/src/NumericVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/NumericVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -59,7 +59,8 @@
}
#endif
-double& NumericVector::operator[]( int i ) const {
+double& NumericVector::operator[]( int i ) const throw(index_out_of_bounds){
+ if( i<0 || i>=length()) throw index_out_of_bounds() ;
return REAL(m_sexp)[i] ;
}
double* NumericVector::begin() const {
Modified: pkg/src/RawVector.cpp
===================================================================
--- pkg/src/RawVector.cpp 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/RawVector.cpp 2010-01-11 21:03:55 UTC (rev 346)
@@ -62,7 +62,8 @@
}
#endif
-Rbyte& RawVector::operator[]( int i ) const {
+Rbyte& RawVector::operator[]( int i ) const throw(index_out_of_bounds){
+ if( i<0 || i>= length() ) throw index_out_of_bounds() ;
return RAW(m_sexp)[i] ;
}
Rbyte* RawVector::begin() const {
Modified: pkg/src/Rcpp/CharacterVector.h
===================================================================
--- pkg/src/Rcpp/CharacterVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/CharacterVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -79,8 +79,8 @@
SEXP* begin();
SEXP* end() ;
- const StringProxy operator[]( int i ) const ;
- StringProxy operator[]( int i ) ;
+ const StringProxy operator[]( int i ) const throw(index_out_of_bounds);
+ StringProxy operator[]( int i ) throw(index_out_of_bounds);
friend class StringProxy;
Modified: pkg/src/Rcpp/ComplexVector.h
===================================================================
--- pkg/src/Rcpp/ComplexVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/ComplexVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -52,7 +52,7 @@
*/
inline int size() const { return Rf_length( m_sexp ) ; }
- Rcomplex& operator[]( int i ) const ;
+ Rcomplex& operator[]( int i ) const throw(index_out_of_bounds) ;
Rcomplex* begin() const ;
Rcomplex* end() const ;
Modified: pkg/src/Rcpp/ExpressionVector.h
===================================================================
--- pkg/src/Rcpp/ExpressionVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/ExpressionVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -78,8 +78,8 @@
SEXP* begin();
SEXP* end() ;
- const Proxy operator[]( int i ) const ;
- Proxy operator[]( int i ) ;
+ const Proxy operator[]( int i ) const throw(index_out_of_bounds);
+ Proxy operator[]( int i ) throw(index_out_of_bounds) ;
friend class Proxy;
Modified: pkg/src/Rcpp/GenericVector.h
===================================================================
--- pkg/src/Rcpp/GenericVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/GenericVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -76,11 +76,11 @@
*/
inline int size() const { return Rf_length( m_sexp ) ; }
- SEXP* begin();
- SEXP* end() ;
+ // SEXP* begin();
+ // SEXP* end() ;
- const Proxy operator[]( int i ) const ;
- Proxy operator[]( int i ) ;
+ const Proxy operator[]( int i ) const throw(index_out_of_bounds);
+ Proxy operator[]( int i ) throw(index_out_of_bounds) ;
friend class Proxy;
Modified: pkg/src/Rcpp/IntegerVector.h
===================================================================
--- pkg/src/Rcpp/IntegerVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/IntegerVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -53,7 +53,7 @@
*/
inline int size() const { return Rf_length( m_sexp ) ; }
- int& operator[]( int i ) const ;
+ int& operator[]( int i ) const throw(index_out_of_bounds) ;
int* begin() const ;
int* end() const ;
Modified: pkg/src/Rcpp/LogicalVector.h
===================================================================
--- pkg/src/Rcpp/LogicalVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/LogicalVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -57,7 +57,7 @@
typedef Rboolean* iterator ;
typedef Rboolean value_type ;
- int& operator[]( int i ) const ;
+ int& operator[]( int i ) const throw(index_out_of_bounds) ;
int* begin() const ;
int* end() const ;
Modified: pkg/src/Rcpp/NumericVector.h
===================================================================
--- pkg/src/Rcpp/NumericVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/NumericVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -53,7 +53,7 @@
*/
inline int size() const { return Rf_length( m_sexp ) ; }
- double& operator[]( int i ) const ;
+ double& operator[]( int i ) const throw(index_out_of_bounds) ;
double* begin() const ;
double* end() const ;
Modified: pkg/src/Rcpp/RawVector.h
===================================================================
--- pkg/src/Rcpp/RawVector.h 2010-01-11 20:35:19 UTC (rev 345)
+++ pkg/src/Rcpp/RawVector.h 2010-01-11 21:03:55 UTC (rev 346)
@@ -53,7 +53,7 @@
*/
inline int size() const { return Rf_length( m_sexp ) ; }
- Rbyte& operator[]( int i ) const ;
+ Rbyte& operator[]( int i ) const throw(index_out_of_bounds) ;
Rbyte* begin() const ;
Rbyte* end() const ;
_______________________________________________
Rcpp-commits mailing list
Rcpp-commits at lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-commits
More information about the Rcpp-devel
mailing list