Implementation of a random-access dataset class for the TerraLib In-Memory Data Access driver. More...
#include <DataSet.h>
Public Member Functions | |
void | add (DataSetItem *item) |
It adds a new item to the dataset and takes its ownership. More... | |
void | add (const std::string &propertyName, std::size_t propertyType, const te::dt::AbstractData *defaultValue=0) |
It adds a new property to the dataset schema and fills this new property with a default value. More... | |
void | clear () |
It clears all the dataset items. More... | |
void | copy (te::da::DataSet &src, std::size_t limit=0) |
It copies up to limit items from the source dataset. More... | |
void | copy (te::da::DataSet &src, const std::vector< std::size_t > &properties, std::size_t limit=0) |
It copies up to limit items from the source dataset (src). More... | |
DataSet (const te::da::DataSetType *const dt) | |
It constructs an empty dataset having the schema dt. More... | |
DataSet (te::da::DataSet &rhs) | |
Regular copy constructor. More... | |
DataSet (const DataSet &rhs, const bool deepCopy=false) | |
It creates a new In-Memory dataset with the items from the rhs dataset. More... | |
DataSet (te::da::DataSet &rhs, const std::vector< std::size_t > &properties, std::size_t limit=0) | |
Copy constructor with property restriction. More... | |
void | drop (std::size_t pos) |
It drops a property from the dataset. More... | |
void | remove () |
It removes the current dataset item. More... | |
void | remove (DataSetItem *item) |
It removes a specific dataset item. More... | |
void | update (te::dt::Property *prop) |
It update a property from the dataset. More... | |
~DataSet () | |
Destructor. More... | |
DataSet inherited methods | |
te::common::TraverseType | getTraverseType () const |
It returns the traverse type associated to the dataset. More... | |
te::common::AccessPolicy | getAccessPolicy () const |
It returns the read and write permission associated to the dataset. More... | |
std::size_t | getNumProperties () const |
It returns the number of properties that composes an item of the dataset. More... | |
int | getPropertyDataType (std::size_t pos) const |
It returns the underlying data type of the property at position pos. More... | |
void | setPropertyDataType (int dt, std::size_t pos) |
std::string | getPropertyName (std::size_t pos) const |
It returns the property name at position pos. More... | |
void | setPropertyName (const std::string &name, std::size_t pos) |
te::common::CharEncoding | getPropertyCharEncoding (std::size_t i) const |
It returns the property character encoding at position pos. More... | |
std::string | getDatasetNameOfProperty (std::size_t pos) const |
It returns the underlying dataset name of the property at position pos. More... | |
DataSetItem * | getItem () const |
bool | isEmpty () const |
It returns true if the collection is empty. More... | |
bool | isConnected () const |
It returns true if the dataset is connected and false if it is disconnected. A dataset can be connected or disconnected. A connected dataset, after its creation through the data source transactor, continues to depend on the connection given by its associated data source. Differently, a disconnected dataset, after its creation, no more depends of the connection given by the data source, and it continues to live after the connection has been released to the data source. More... | |
std::size_t | size () const |
It returns the collection size, if it is known. More... | |
std::auto_ptr< te::gm::Envelope > | getExtent (std::size_t i) |
It computes the bounding rectangle for a spatial property of the dataset. More... | |
bool | moveNext () |
It moves the internal pointer to the next item of the collection. More... | |
bool | movePrevious () |
It moves the internal pointer to the previous item of the collection. More... | |
bool | moveBeforeFirst () |
It moves the internal pointer to a position before the first item in the collection. More... | |
bool | moveFirst () |
It moves the internal pointer to the first item in the collection. More... | |
bool | moveLast () |
It sets the dataset internal pointer to the last item in the collection. More... | |
bool | move (std::size_t i) |
It moves the dataset internal pointer to a given position. More... | |
bool | isAtBegin () const |
It tells if the dataset internal pointer is on the first element of the collection or not. More... | |
bool | isBeforeBegin () const |
It tells if the dataset internal pointer is in a position before the first element of the collection or not. More... | |
bool | isAtEnd () const |
It tells if the dataset internal pointer is on the last element of the collection. More... | |
bool | isAfterEnd () const |
It tells if the dataset internal pointer is on the sentinel position after the last element of the collection or not. More... | |
char | getChar (std::size_t i) const |
Method for retrieving a signed character attribute value (1 byte long). More... | |
unsigned char | getUChar (std::size_t i) const |
Method for retrieving an unsigned character attribute value (1 byte long). More... | |
boost::int16_t | getInt16 (std::size_t i) const |
Method for retrieving a 16-bit integer attribute value (2 bytes long). More... | |
boost::int32_t | getInt32 (std::size_t i) const |
Method for retrieving a 32-bit integer attribute value (4 bytes long). More... | |
boost::int64_t | getInt64 (std::size_t i) const |
Method for retrieving a 64-bit integer attribute value (8 bytes long). More... | |
bool | getBool (std::size_t i) const |
Method for retrieving a boolean attribute value. More... | |
float | getFloat (std::size_t i) const |
Method for retrieving a float attribute value. More... | |
double | getDouble (std::size_t i) const |
Method for retrieving a double attribute value. More... | |
std::string | getNumeric (std::size_t i) const |
Method for retrieving a numeric attribute value. More... | |
std::string | getString (std::size_t i) const |
Method for retrieving a string value attribute. More... | |
std::auto_ptr< te::dt::ByteArray > | getByteArray (std::size_t i) const |
Method for retrieving a byte array. More... | |
std::auto_ptr< te::gm::Geometry > | getGeometry (std::size_t i) const |
Method for retrieving a geometric attribute value. More... | |
std::auto_ptr< te::rst::Raster > | getRaster (std::size_t i) const |
Method for retrieving a raster attribute value. More... | |
std::auto_ptr< te::dt::DateTime > | getDateTime (std::size_t i) const |
Method for retrieving a date and time attribute value. More... | |
std::auto_ptr< te::dt::Array > | getArray (std::size_t i) const |
Method for retrieving an array. More... | |
std::auto_ptr< te::dt::AbstractData > | getValue (std::size_t i) const |
Method for retrieving any other type of data value stored in the data source. More... | |
bool | isNull (std::size_t i) const |
It checks if the attribute value is NULL. More... | |
Methods to set values to the DataSet | |
These methods will take the ownership of the given pointers. | |
void | setChar (std::size_t i, char value) |
void | setChar (const std::string &name, char value) |
void | setUChar (std::size_t i, unsigned char value) |
void | setUChar (const std::string &name, unsigned char value) |
void | setInt16 (std::size_t i, boost::int16_t value) |
void | setInt16 (const std::string &name, boost::int16_t value) |
void | setInt32 (std::size_t i, boost::int32_t value) |
void | setInt32 (const std::string &name, boost::int32_t value) |
void | setInt64 (std::size_t i, boost::int64_t value) |
void | setInt64 (const std::string &name, boost::int64_t value) |
void | setBool (std::size_t i, bool value) |
void | setBool (const std::string &name, bool value) |
void | setFloat (std::size_t i, float value) |
void | setFloat (const std::string &name, float value) |
void | setDouble (std::size_t i, double value) |
void | setDouble (const std::string &name, double value) |
void | setNumeric (std::size_t i, const std::string &value) |
void | setNumeric (const std::string &name, const std::string &value) |
void | setString (std::size_t i, const std::string &value) |
void | setString (const std::string &name, const std::string &value) |
void | setByteArray (std::size_t i, te::dt::ByteArray *value) |
void | setByteArray (const std::string &name, te::dt::ByteArray *value) |
void | setGeometry (std::size_t i, te::gm::Geometry *value) |
void | setGeometry (const std::string &name, te::gm::Geometry *value) |
void | setRaster (std::size_t i, te::rst::Raster *value) |
void | setRaster (const std::string &name, te::rst::Raster *value) |
void | setDateTime (std::size_t i, te::dt::DateTime *value) |
void | setDateTime (const std::string &name, te::dt::DateTime *value) |
void | setValue (std::size_t i, te::dt::AbstractData *value) |
void | setValue (const std::string &name, te::dt::AbstractData *ad) |
DataSet Element Properties | |
Methods for retrieving/setting the dataset item component values without the need to explicitly instantiate an item via getItem method. | |
virtual char | getChar (const std::string &name) const |
Method for retrieving a signed character attribute value (1 byte long). More... | |
virtual unsigned char | getUChar (const std::string &name) const |
Method for retrieving an unsigned character attribute value (1 byte long). More... | |
virtual boost::int16_t | getInt16 (const std::string &name) const |
Method for retrieving a 16-bit integer attribute value (2 bytes long). More... | |
virtual boost::int32_t | getInt32 (const std::string &name) const |
Method for retrieving a 32-bit integer attribute value (4 bytes long). More... | |
virtual boost::int64_t | getInt64 (const std::string &name) const |
Method for retrieving a 64-bit integer attribute value (8 bytes long). More... | |
virtual bool | getBool (const std::string &name) const |
Method for retrieving a boolean attribute value. More... | |
virtual float | getFloat (const std::string &name) const |
Method for retrieving a float attribute value. More... | |
virtual double | getDouble (const std::string &name) const |
Method for retrieving a double attribute value. More... | |
virtual std::string | getNumeric (const std::string &name) const |
Method for retrieving a numeric attribute value. More... | |
virtual std::string | getString (const std::string &name) const |
Method for retrieving a string attribute value. More... | |
virtual std::auto_ptr< te::dt::ByteArray > | getByteArray (const std::string &name) const |
Method for retrieving a byte array. More... | |
virtual std::auto_ptr< te::gm::Geometry > | getGeometry (const std::string &name) const |
Method for retrieving a geometric attribute value. More... | |
virtual std::auto_ptr< te::rst::Raster > | getRaster (const std::string &name) const |
Method for retrieving a raster attribute value. More... | |
virtual std::auto_ptr< te::dt::DateTime > | getDateTime (const std::string &name) const |
Method for retrieving a date and time attribute value. More... | |
virtual std::auto_ptr< te::dt::Array > | getArray (const std::string &name) const |
Method for retrieving an array. More... | |
virtual std::auto_ptr< te::dt::AbstractData > | getValue (const std::string &name) const |
Method for retrieving any other type of data value stored in the data source. More... | |
virtual std::string | getAsString (std::size_t i, int precision=0) const |
Method for retrieving a data value as a string plain representation. More... | |
virtual std::string | getAsString (const std::string &name, int precision=0) const |
Method for retrieving a data value as a string plain representation. More... | |
virtual bool | isNull (const std::string &name) const |
It checks if the attribute value is NULL. More... | |
Protected Attributes | |
std::map< int, te::common::CharEncoding > | m_encodings |
The list of string properties char-encoding. More... | |
int | m_i |
The index of the current item. More... | |
boost::shared_ptr< boost::ptr_vector< DataSetItem > > | m_items |
The list of dataset items. More... | |
std::vector< std::string > | m_pnames |
The list of property names. More... | |
std::vector< int > | m_ptypes |
The list of property types. More... | |
Implementation of a random-access dataset class for the TerraLib In-Memory Data Access driver.
|
explicit |
It constructs an empty dataset having the schema dt.
dt | The DataSetType associated to the dataset. |
te::mem::DataSet::DataSet | ( | te::da::DataSet & | rhs | ) |
Regular copy constructor.
It creates a new In-Memory dataset with the items from the rhs dataset.
rhs | The dataset which will provide the items. |
|
explicit |
It creates a new In-Memory dataset with the items from the rhs dataset.
rhs | The dataset which will provide the items to copy from. |
deepCopy | If true the new dataset instance will clone all dataset items from the source dataset (rhs), otherwise it will share all items. |
te::mem::DataSet::DataSet | ( | te::da::DataSet & | rhs, |
const std::vector< std::size_t > & | properties, | ||
std::size_t | limit = 0 |
||
) |
Copy constructor with property restriction.
It creates a new memory data set with items from a source dataset (rhs) considering just some properties.
rhs | The data set whose data set items will be copied. |
properties | The list of properties which will be considered in the copy. |
limit | The number of items to be copied. Use 0 to copy all items. |
|
virtual |
Destructor.
Reimplemented from te::da::DataSet.
void te::mem::DataSet::add | ( | DataSetItem * | item | ) |
It adds a new item to the dataset and takes its ownership.
item | The item to be added to the dataset. |
void te::mem::DataSet::add | ( | const std::string & | propertyName, |
std::size_t | propertyType, | ||
const te::dt::AbstractData * | defaultValue = 0 |
||
) |
It adds a new property to the dataset schema and fills this new property with a default value.
prop | The new property that will be created. The dataset will take its ownership. |
defaultValue | The default value that will be used to fill the new property values. May be a NULL value. |
void te::mem::DataSet::clear | ( | ) |
It clears all the dataset items.
void te::mem::DataSet::copy | ( | te::da::DataSet & | src, |
std::size_t | limit = 0 |
||
) |
It copies up to limit items from the source dataset.
src | The source dataset with the items that will be copied. |
limit | The number of items to be copied. Use 0 to copy all items. |
void te::mem::DataSet::copy | ( | te::da::DataSet & | src, |
const std::vector< std::size_t > & | properties, | ||
std::size_t | limit = 0 |
||
) |
It copies up to limit items from the source dataset (src).
src | The source dataset with the items that will be copied. |
properties | The list of properties which will be considered in the copy. |
limit | The number of items to be copied. Use 0 to copy all items. |
void te::mem::DataSet::drop | ( | std::size_t | pos | ) |
It drops a property from the dataset.
prop | The property that will be dropped. |
|
virtual |
It returns the read and write permission associated to the dataset.
Implements te::da::DataSet.
|
virtual |
|
virtualinherited |
Method for retrieving an array.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtualinherited |
Method for retrieving a data value as a string plain representation.
i | The attribute index. |
precision | The precision in the conversion. |
|
virtualinherited |
Method for retrieving a data value as a string plain representation.
name | The attribute name. |
precision | The precision in the conversion. |
|
virtual |
Method for retrieving a boolean attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a boolean attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a byte array.
You can use this method in order to retrieve a BLOB data.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a byte array.
You can use this method in order to retrieve a BLOB data.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a signed character attribute value (1 byte long).
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a signed character attribute value (1 byte long).
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It returns the underlying dataset name of the property at position pos.
i | The property position of interest. |
Implements te::da::DataSet.
|
virtual |
Method for retrieving a date and time attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a date and time attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a double attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a double attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It computes the bounding rectangle for a spatial property of the dataset.
i | The position of a spatial property to get its bounding box. |
Exception | It throws an exception if something goes wrong during MBR search. |
Implements te::da::DataSet.
|
virtual |
Method for retrieving a float attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a float attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a geometric attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a geometric attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a 16-bit integer attribute value (2 bytes long).
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a 16-bit integer attribute value (2 bytes long).
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a 32-bit integer attribute value (4 bytes long).
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a 32-bit integer attribute value (4 bytes long).
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a 64-bit integer attribute value (8 bytes long).
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a 64-bit integer attribute value (8 bytes long).
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
DataSetItem* te::mem::DataSet::getItem | ( | ) | const |
|
virtual |
Method for retrieving a numeric attribute value.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a numeric attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It returns the number of properties that composes an item of the dataset.
Implements te::da::DataSet.
|
virtual |
It returns the property character encoding at position pos.
i | The property the position of interest. |
Exception | It throws an exception if the property at position pos is not a textual property. |
Implements te::da::DataSet.
|
virtual |
It returns the underlying data type of the property at position pos.
i | The property position of interest. |
Implements te::da::DataSet.
|
virtual |
It returns the property name at position pos.
i | The property name at the position of interest. |
Implements te::da::DataSet.
|
virtual |
Method for retrieving a raster attribute value.
i | The attribute index. |
Exception | It can throw an exception if:
|
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a raster attribute value.
name | The attribute name. |
Exception | It can throw an exception if:
|
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving a string value attribute.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving a string attribute value.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It returns the traverse type associated to the dataset.
Implements te::da::DataSet.
|
virtual |
Method for retrieving an unsigned character attribute value (1 byte long).
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
Method for retrieving an unsigned character attribute value (1 byte long).
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
Method for retrieving any other type of data value stored in the data source.
This method can be use for extensible datatypes.
i | The attribute index. |
Reimplemented from te::da::DataSet.
|
virtualinherited |
Method for retrieving any other type of data value stored in the data source.
This method can be use for extensible datatypes.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It tells if the dataset internal pointer is on the sentinel position after the last element of the collection or not.
Implements te::da::DataSet.
|
virtual |
It tells if the dataset internal pointer is on the first element of the collection or not.
Implements te::da::DataSet.
|
virtual |
It tells if the dataset internal pointer is on the last element of the collection.
Implements te::da::DataSet.
|
virtual |
It tells if the dataset internal pointer is in a position before the first element of the collection or not.
Implements te::da::DataSet.
|
virtual |
It returns true if the dataset is connected and false if it is disconnected. A dataset can be connected or disconnected. A connected dataset, after its creation through the data source transactor, continues to depend on the connection given by its associated data source. Differently, a disconnected dataset, after its creation, no more depends of the connection given by the data source, and it continues to live after the connection has been released to the data source.
Implements te::da::DataSet.
|
virtual |
It returns true if the collection is empty.
Implements te::da::DataSet.
|
virtual |
It checks if the attribute value is NULL.
i | The attribute index. |
Implements te::da::DataSet.
|
virtualinherited |
It checks if the attribute value is NULL.
name | The attribute name. |
Reimplemented in te::gdal::DataSet.
|
virtual |
It moves the dataset internal pointer to a given position.
i | The position the dataset internal pointer must be set up. |
Implements te::da::DataSet.
|
virtual |
It moves the internal pointer to a position before the first item in the collection.
Implements te::da::DataSet.
|
virtual |
It moves the internal pointer to the first item in the collection.
Implements te::da::DataSet.
|
virtual |
It sets the dataset internal pointer to the last item in the collection.
Implements te::da::DataSet.
|
virtual |
It moves the internal pointer to the next item of the collection.
You always has to call this method in order to move the internal pointer to the first item in the collection. This method can be used to traverse a dataset.
Implements te::da::DataSet.
|
virtual |
It moves the internal pointer to the previous item of the collection.
Implements te::da::DataSet.
void te::mem::DataSet::remove | ( | ) |
It removes the current dataset item.
void te::mem::DataSet::remove | ( | DataSetItem * | item | ) |
It removes a specific dataset item.
void te::mem::DataSet::setBool | ( | std::size_t | i, |
bool | value | ||
) |
void te::mem::DataSet::setBool | ( | const std::string & | name, |
bool | value | ||
) |
void te::mem::DataSet::setByteArray | ( | std::size_t | i, |
te::dt::ByteArray * | value | ||
) |
void te::mem::DataSet::setByteArray | ( | const std::string & | name, |
te::dt::ByteArray * | value | ||
) |
void te::mem::DataSet::setChar | ( | std::size_t | i, |
char | value | ||
) |
void te::mem::DataSet::setChar | ( | const std::string & | name, |
char | value | ||
) |
void te::mem::DataSet::setDateTime | ( | std::size_t | i, |
te::dt::DateTime * | value | ||
) |
void te::mem::DataSet::setDateTime | ( | const std::string & | name, |
te::dt::DateTime * | value | ||
) |
void te::mem::DataSet::setDouble | ( | std::size_t | i, |
double | value | ||
) |
void te::mem::DataSet::setDouble | ( | const std::string & | name, |
double | value | ||
) |
void te::mem::DataSet::setFloat | ( | std::size_t | i, |
float | value | ||
) |
void te::mem::DataSet::setFloat | ( | const std::string & | name, |
float | value | ||
) |
void te::mem::DataSet::setGeometry | ( | std::size_t | i, |
te::gm::Geometry * | value | ||
) |
void te::mem::DataSet::setGeometry | ( | const std::string & | name, |
te::gm::Geometry * | value | ||
) |
void te::mem::DataSet::setInt16 | ( | std::size_t | i, |
boost::int16_t | value | ||
) |
void te::mem::DataSet::setInt16 | ( | const std::string & | name, |
boost::int16_t | value | ||
) |
void te::mem::DataSet::setInt32 | ( | std::size_t | i, |
boost::int32_t | value | ||
) |
void te::mem::DataSet::setInt32 | ( | const std::string & | name, |
boost::int32_t | value | ||
) |
void te::mem::DataSet::setInt64 | ( | std::size_t | i, |
boost::int64_t | value | ||
) |
void te::mem::DataSet::setInt64 | ( | const std::string & | name, |
boost::int64_t | value | ||
) |
void te::mem::DataSet::setNumeric | ( | std::size_t | i, |
const std::string & | value | ||
) |
void te::mem::DataSet::setNumeric | ( | const std::string & | name, |
const std::string & | value | ||
) |
void te::mem::DataSet::setPropertyDataType | ( | int | dt, |
std::size_t | pos | ||
) |
void te::mem::DataSet::setPropertyName | ( | const std::string & | name, |
std::size_t | pos | ||
) |
void te::mem::DataSet::setRaster | ( | std::size_t | i, |
te::rst::Raster * | value | ||
) |
void te::mem::DataSet::setRaster | ( | const std::string & | name, |
te::rst::Raster * | value | ||
) |
void te::mem::DataSet::setString | ( | std::size_t | i, |
const std::string & | value | ||
) |
void te::mem::DataSet::setString | ( | const std::string & | name, |
const std::string & | value | ||
) |
void te::mem::DataSet::setUChar | ( | std::size_t | i, |
unsigned char | value | ||
) |
void te::mem::DataSet::setUChar | ( | const std::string & | name, |
unsigned char | value | ||
) |
void te::mem::DataSet::setValue | ( | std::size_t | i, |
te::dt::AbstractData * | value | ||
) |
void te::mem::DataSet::setValue | ( | const std::string & | name, |
te::dt::AbstractData * | ad | ||
) |
|
virtual |
It returns the collection size, if it is known.
It may return std::string::npos if the size is not known, or it would be too costly to compute it.
Implements te::da::DataSet.
void te::mem::DataSet::update | ( | te::dt::Property * | prop | ) |
It update a property from the dataset.
prop | The property that will be updated. |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |