Boost logo

Boost :

From: David B. Held (dheld_at_[hidden])
Date: 2003-02-14 16:56:40


"Philippe A. Bouchard" <philippeb_at_[hidden]> wrote in message
news:b2jlq6$92u$1_at_main.gmane.org...
> David B. Held wrote:
> > unsigned Count_;
> > char Value_[sizeof(T)];
> > };
>
> Another little thing...
>
> Value_ will have to be aligned just like an object of type T.

;) On my platform, the Count_ variable will ensure this alignment. I
don't pretend that this code is particularly portable. Also, my
platform doesn't have any alignment requirements anyway. ;)

> Wouldn't it be possible to derive TCounted_Record<T> from
> TRecord<T>, removing Value_ at the same time?

No, I don't want to do that derivation, because sometimes I will only
have a record ID to store. If I derive from the actual record type, the
c'tor will need to default construct the record, and then I'll have to
populate it later, which is wasteful (and expensive, if I never actually
need the full record). This way, I can store just the ID. Consider this
example:

struct TLocation : public Record
{
    std::string Address1_;
    std::string Address2_;
    std::string City_;
    PState State_;
    std::string MailCode_;
};
typedef boost::intrusive_ptr<TCountedRecord<TLocation> > PLocation;

struct TEmployee : public TRecord
{
    std::string Name_;
    std::string SSN_;
    PLocation Location_;
};
typedef boost::intrusive_ptr<TCountedRecord<TEmployee> > PEmployee;

std::vector<PEmployee> results;

results.push_back(new TCountedRecord<TEmployee>(3242));
results.push_back(new TCountedRecord<TEmployee>(4232));
results.push_back(new TCountedRecord<TEmployee>(7929));
results.push_back(new TCountedRecord<TEmployee>(3459));

Now, like I explained in the serial_ptr post, in my design, the server
only returns a list of record id's. That way, if I already have some of
the records cached (from previous queries), I don't have to send all
the data over the wire again. In that case, I don't want to store an
entire default record, because even the default c'tor called many
times is going to be slower than the default c'tor for a simple TRecord.
Since performing queries can be a frequent operation with large
result sets, it's important to avoid unnecessary operations.

Dave


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk