コード例 #1
0
ファイル: frtxtspn.C プロジェクト: ralfbrown/framepac
bool FrTextSpans::insertMetaData(FrSymbol *key, FrObject *value,
				 bool copy)
{
   FrStructField *field = m_metadata.getField(key) ;
   if (!field)
      return setMetaData(key,value,copy) ;
   FrObject *oldvalue = field->get() ;
   if (oldvalue)
      {
      if (!oldvalue->consp())
	 {
	 oldvalue = new FrList(oldvalue) ;
	 field->set(oldvalue) ;
	 }
      FrList *list = (FrList*)oldvalue ;
      if (!list->member(value,::equal))
	 {
	 pushlist(value&&copy?value->deepcopy():value,list) ;
	 field->set(list) ;
	 }
      }
   else if (value && value->consp())
      field->set(copy?value->deepcopy():value) ;
   else
      field->set(new FrList((value&&copy)?value->deepcopy():value)) ;
   return true ;
}
コード例 #2
0
ファイル: frtxtspn.C プロジェクト: ralfbrown/framepac
bool FrTextSpans::addMetaData(FrSymbol *key, const FrObject *value)
{
   FrStructField *field = m_metadata.getField(key) ;
   if (!field)
      return setMetaData(key,value) ;
   FrObject *oldvalue = field->get() ;
   if (oldvalue)
      {
      if (oldvalue->consp())
	 {
	 FrList *list = (FrList*)oldvalue ;
	 if (value && value->consp())
	    {
	    FrList *newvalue = ((FrList*)value)->difference(list) ;
	    list = newvalue->nconc(list) ;
	    }
	 else if (!list->member(value,::equal))
	    pushlist(value?value->deepcopy():0,list) ;
	 field->set(list) ;
	 }
      else
	 return false ;
      }
   else if (value && value->consp())
      field->set(value->deepcopy()) ;
   else
      field->set(new FrList(value?value->deepcopy():0)) ;
   return true ;
}
コード例 #3
0
ファイル: frtxtspn.C プロジェクト: ralfbrown/framepac
bool FrTextSpan::addMetaData(FrSymbol *key, const FrObject *value)
{
   if (!metaData())
      {
      setMetaData(new FrStruct(FrSymbolTable::add(METADATA_TYPENAME))) ;
      if (!metaData())
	 return false ;
      }
   FrObject *oldvalue = m_metadata->get(key) ;
   if (oldvalue)
      {
      if (oldvalue->consp())
	 {
	 FrList *list = (FrList*)oldvalue->deepcopy() ;
	 if (value && value->consp())
	    {
	    FrList *newvalue = ((FrList*)value)->difference(list) ;
	    list = newvalue->nconc(list) ;
	    m_metadata->put(key,list,false) ;
	    }
	 else if (!list->member(value,::equal))
	    {
	    pushlist(value?value->deepcopy():0,list) ;
	    m_metadata->put(key,list,false) ;
	    }
	 else
	    free_object(list) ;
	 }
      else
	 return false ;
      }
   else if (value && value->consp())
      m_metadata->put(key,value->deepcopy(),false) ;
   else
      m_metadata->put(key,new FrList(value?value->deepcopy():0),false) ;
   return true ;
}