PLearn 0.1
Public Member Functions | Private Attributes
PLearn::FieldRowRef Class Reference

#include <SimpleDB.h>

Collaboration diagram for PLearn::FieldRowRef:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 FieldRowRef (const RowIterator &it)
 operator FieldValue () const
 Conversion from / assignment into FieldValue.
FieldRowRefoperator= (const FieldValue &)
FieldRowRefoperator= (const FieldRowRef rhs)
RowIterator operator& () const
 Taking the address of a FieldRowRef returns a RowIterator.

Private Attributes

RowIterator it_
 of course, this just wraps an iterator

Detailed Description

A FieldRowRef represents a reference to a (polymorphic) field in a row. It can transparently convert itself into a FieldValue, or be assigned from a FieldValue.

Definition at line 1013 of file SimpleDB.h.


Constructor & Destructor Documentation

PLearn::FieldRowRef::FieldRowRef ( const RowIterator it) [inline]

Definition at line 1016 of file SimpleDB.h.

        : it_(it) {}

Member Function Documentation

PLearn::FieldRowRef::operator FieldValue ( ) const

Conversion from / assignment into FieldValue.

Definition at line 686 of file SimpleDB.cc.

References PLearn::RowIterator::asCharacter(), PLearn::RowIterator::asDate(), PLearn::RowIterator::asDouble(), PLearn::RowIterator::asFloat(), PLearn::RowIterator::asInt(), PLearn::RowIterator::asShort(), PLearn::RowIterator::asSignedChar(), PLearn::RowIterator::asString(), it_, and x.

{
    if (const char* x = it_.asString())
        return FieldValue(x);
    if (const unsigned char* x = it_.asCharacter())
        return FieldValue(*x);
    if (const signed char* x = it_.asSignedChar())
        return FieldValue(*x);
    if (const short* x = it_.asShort())
        return FieldValue(*x);
    if (const int* x = it_.asInt())
        return FieldValue(*x);
    if (const float* x = it_.asFloat())
        return FieldValue(*x);
    if (const double* x = it_.asDouble())
        return FieldValue(*x);
    if (const PDate* x = it_.asDate())
        return FieldValue(*x);
    return FieldValue();
}

Here is the call graph for this function:

RowIterator PLearn::FieldRowRef::operator& ( ) const [inline]

Taking the address of a FieldRowRef returns a RowIterator.

Definition at line 1192 of file SimpleDB.h.

{
    return it_;
}
FieldRowRef& PLearn::FieldRowRef::operator= ( const FieldRowRef  rhs) [inline]

Definition at line 1022 of file SimpleDB.h.

                                                  {
        return operator=(FieldValue(rhs));
    }
FieldRowRef & PLearn::FieldRowRef::operator= ( const FieldValue rhs)

Definition at line 710 of file SimpleDB.cc.

References PLearn::RowIterator::asCharacter(), PLearn::RowIterator::asDate(), PLearn::RowIterator::asDouble(), PLearn::RowIterator::asFloat(), PLearn::RowIterator::asInt(), PLearn::RowIterator::asShort(), PLearn::RowIterator::asSignedChar(), PLearn::RowIterator::asString(), PLearn::FieldValue::date_val_, PLearn::FieldValue::double_val_, PLearn::FieldValue::isDate(), PLearn::FieldValue::isFloating(), PLearn::FieldValue::isIntegral(), it_, PLearn::FieldValue::long_val_, PLERROR, PLearn::RowIterator::precision(), PLearn::FieldValue::toString(), and x.

{
    // Strings ==> convert anything into string form
    if (char* x = it_.asString()) {
        strncpy(x, rhs.toString().c_str(), it_.precision());
        x[it_.precision()-1] = '\0';
    }
    else if (unsigned char* x = it_.asCharacter()) {
        if (rhs.isIntegral())
            *x = (unsigned char)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (unsigned char)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into an unsigned character");
    }
    else if (signed char* x = it_.asSignedChar()) {
        if (rhs.isIntegral())
            *x = (signed char)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (signed char)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into a signed character");
    }
    else if (short* x = it_.asShort()) {
        if (rhs.isIntegral())
            *x = (short)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (short)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into a short");
    }
    else if (int* x = it_.asInt()) {
        if (rhs.isIntegral())
            *x = (int)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (int)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into an int");
    }
    else if (float* x = it_.asFloat()) {
        if (rhs.isIntegral())
            *x = (float)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (float)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into a float");
    }
    else if (double* x = it_.asDouble()) {
        if (rhs.isIntegral())
            *x = (double)rhs.long_val_;
        else if (rhs.isFloating())
            *x = (double)rhs.double_val_;
        else
            PLERROR("Cannot convert a string or a date into a double");
    }
    else if (PDate* x = it_.asDate()) {
        if (rhs.isDate())
            *x = PDate(rhs.date_val_.year, rhs.date_val_.month,
                       rhs.date_val_.day);
        else
            PLERROR("Cannot convert a non-date into a date");
    }
    else
        PLERROR("Unrecognized case in assignment in FieldRowRef from FieldValue");

    return *this;
}

Here is the call graph for this function:


Member Data Documentation

of course, this just wraps an iterator

Definition at line 1030 of file SimpleDB.h.

Referenced by operator FieldValue(), and operator=().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines