Changeset 171 for cpp/frams/util


Ignore:
Timestamp:
03/13/14 01:00:33 (10 years ago)
Author:
sz
Message:

getObjectTarget is now the recommended way to retrieve object from ExtValue?, can post the standard warning message about missing object

Location:
cpp/frams/util
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/util/extvalue.cpp

    r144 r171  
    5656if (!(subtype&1)) return false;
    5757if (dbobject->refcount==1) return false;
    58 VectorObject* v=VectorObject::fromObject(*this);
     58VectorObject* v=VectorObject::fromObject(*this,false);
    5959if (v)
    6060        {
     
    7272}
    7373
    74 void* ExtObject::getTarget(const char* classname, bool through_barrier) const
     74void* ExtObject::getTarget(const char* classname, bool through_barrier, bool warn) const
    7575{
    7676if (!strcmp(interfaceName(),classname))
     
    8181        BarrierObject *bo=BarrierObject::fromObject(*this);
    8282        if (bo)
    83                 return bo->getSourceObject().getTarget(classname);
     83                return bo->getSourceObject().getTarget(classname,true,warn);
    8484        }
    8585#endif
     86
     87if (warn)
     88        {
     89        FMprintf("ExtValue","getObjectTarget",FMLV_WARN,"%s object expected, %s found",classname,interfaceName());
     90        }
     91
    8692return NULL;
    8793}
     
    173179
    174180if (isEmpty()) return SString();
    175 VectorObject *vec=VectorObject::fromObject(*this);
     181VectorObject *vec=VectorObject::fromObject(*this,false);
    176182if (vec)
    177183        return vec->serialize();
    178 DictionaryObject *dic=DictionaryObject::fromObject(*this);
     184DictionaryObject *dic=DictionaryObject::fromObject(*this,false);
    179185if (dic)
    180186        return dic->serialize();
     
    215221///////////////////////////////////////
    216222
     223void *ExtValue::getObjectTarget(const char* classname,bool warn) const
     224{
     225if (type!=TObj)
     226        {
     227        if (warn)
     228                {
     229                SString tmp=getString();
     230                if (tmp.len()>30) tmp=tmp.substr(0,30)+"...";
     231                if (type==TString) tmp=SString("\"")+tmp+SString("\"");
     232                FMprintf("ExtValue","getObjectTarget",FMLV_WARN,"%s object expected, %s found",classname,(const char*)tmp);
     233                }
     234        return NULL;
     235        }
     236
     237return getObject().getTarget(classname,true,warn);
     238}
     239
    217240void ExtValue::set(const ExtValue& src)
    218241{
     
    326349        case TObj:
    327350                {
    328                 VectorObject *vec=VectorObject::fromObject(getObject());
    329                 VectorObject *vec2=VectorObject::fromObject(src.getObject());
     351                VectorObject *vec=VectorObject::fromObject(getObject(),false);
     352                VectorObject *vec2=VectorObject::fromObject(src.getObject(),false);
    330353                if (vec && vec2)
    331354                        {
     
    368391        case TObj:
    369392                {
    370                 VectorObject *vec=VectorObject::fromObject(getObject());
     393                VectorObject *vec=VectorObject::fromObject(getObject(),false);
    371394                if (vec)
    372395                        {
     
    532555        case TString:
    533556        {
    534         VectorObject *vec=VectorObject::fromObject(src.getObject());
     557        VectorObject *vec=VectorObject::fromObject(src.getObject(),false);
    535558        if (vec)
    536559                sdata()=format(sdata(),(const ExtValue**)&vec->data.getref(0),vec->data.size());
     
    815838        if (cls && (tmp.getType()!=TUnknown) && (tmp.getType()!=TInvalid))
    816839                {
    817                 VectorObject *vec=VectorObject::fromObject(tmp.getObject());
     840                VectorObject *vec=VectorObject::fromObject(tmp.getObject(),false);
    818841                if (vec)
    819842                        {
     
    826849                                }
    827850                        }
    828                 DictionaryObject *dic=DictionaryObject::fromObject(tmp.getObject());
     851                DictionaryObject *dic=DictionaryObject::fromObject(tmp.getObject(),false);
    829852                if (dic)
    830853                        {
  • cpp/frams/util/extvalue.h

    r144 r171  
    5858bool matchesInterfaceName(ParamInterface* pi) const {return !strcmp(interfaceName(),pi->getName());}
    5959void* getTarget() const {return (subtype&1)?dbobject:object;}
    60 void* getTarget(const char* classname, bool through_barrier=true) const;
     60void* getTarget(const char* classname, bool through_barrier=true, bool warn=true) const;
    6161void setEmpty() {decref();subtype=0;param=NULL;object=NULL;}
    6262int isEmpty() const {return !param;}
     
    142142bool makeUnique() {return (type==TObj) && odata().makeUnique();} //< @return false if nothing has changed
    143143ExtPType getType() {return type;}
    144 void *getObjectTarget(const char* classname) {return (type==TObj)?getObject().getTarget(classname):0;}
     144void *getObjectTarget(const char* classname,bool warn=true) const;
    145145void setInt(long v) {if (type!=TInt) setri(v); else idata()=v;}
    146146void setDouble(double v) {if (type!=TDouble) setrd(v); else ddata()=v;}
Note: See TracChangeset for help on using the changeset viewer.