00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "fennel/common/CommonPreamble.h"
00025 #include "fennel/exec/ErrorSource.h"
00026
00027 FENNEL_BEGIN_CPPFILE("$Id: //open/dev/fennel/exec/ErrorSource.cpp#5 $");
00028
00029 ErrorSource::ErrorSource()
00030 {
00031 pErrorTarget.reset();
00032 }
00033
00034 ErrorSource::ErrorSource(
00035 SharedErrorTarget pErrorTargetInit,
00036 const std::string &nameInit)
00037 {
00038 pErrorTarget.reset();
00039 initErrorSource(pErrorTargetInit, nameInit);
00040 }
00041
00042 ErrorSource::~ErrorSource()
00043 {
00044 pErrorTarget.reset();
00045 }
00046
00047 void ErrorSource::initErrorSource(
00048 SharedErrorTarget pErrorTargetInit,
00049 const std::string &nameInit)
00050 {
00051 pErrorTarget = pErrorTargetInit;
00052 name = nameInit;
00053 }
00054
00055 void ErrorSource::postError(
00056 ErrorLevel level, const std::string &message,
00057 void *address, long capacity, int index)
00058 {
00059 if (hasTarget()) {
00060 getErrorTarget().notifyError(
00061 name, level, message, address, capacity, index);
00062 }
00063 }
00064
00065 void ErrorSource::postError(
00066 ErrorLevel level, const std::string &message,
00067 const TupleDescriptor &errorDesc, const TupleData &errorTuple, int index)
00068 {
00069 if (!hasTarget()) {
00070 return;
00071 }
00072
00073 if (!pErrorBuf) {
00074 errorAccessor.compute(errorDesc);
00075 uint cbMax = errorAccessor.getMaxByteCount();
00076 pErrorBuf.reset(new FixedBuffer[cbMax]);
00077 }
00078
00079 uint cbTuple = errorAccessor.getByteCount(errorTuple);
00080 errorAccessor.marshal(errorTuple, pErrorBuf.get());
00081 postError(level, message, pErrorBuf.get(), cbTuple, index);
00082 }
00083
00084 void ErrorSource::disableTarget()
00085 {
00086 pErrorTarget.reset();
00087 }
00088
00089 FENNEL_END_CPPFILE("$Id: //open/dev/fennel/exec/ErrorSource.cpp#5 $");
00090
00091