コード例 #1
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 ;
}
コード例 #2
0
ファイル: framekit.C プロジェクト: ralfbrown/framepac
FrList *FramepaC_to_FrameKit(const FrFrame *frame)
{
   if (!frame)
      return 0 ;
   FrList *temp_FrameKit_slots = nullptr ;
   FrList *list = new FrList(FrSymbolTable::add(stringMAKEFRAME),
			 FrSymbolTable::add(frame->frameName()->symbolName()));

   if (do_slots(frame,FramepaC_to_FrameKit_slot,&temp_FrameKit_slots))
      return list->nconc(temp_FrameKit_slots) ;
   else
      {
      FrWarning("error encountered while converting frame to FrameKit format.") ;
      return 0 ;
      }
}
コード例 #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 ;
}