/** Function oyCMMapis_MoveIn * @memberof oyCMMapis_s * @brief add an element to a CMMapis list * * @param[in] list list * @param[in,out] obj list element * @param pos position * * @version Oyranos: 0.1.10 * @since 2010/07/05 (Oyranos: 0.1.10) * @date 2010/07/05 */ OYAPI int OYEXPORT oyCMMapis_MoveIn ( oyCMMapis_s * list, oyCMMapi_s ** obj, int pos ) { oyCMMapis_s_ * s = (oyCMMapis_s_*)list; int error = 0; if(!s) return -1; oyCheckType__m( oyOBJECT_CMM_APIS_S, return 1 ) if(obj && *obj && (*obj)->type_ >= oyOBJECT_CMM_API1_S && (*obj)->type_ <= oyOBJECT_CMM_API_MAX) { if(!s->list_) { s->list_ = oyStructList_Create( s->type_, 0, 0 ); error = !s->list_; } if(!error) error = oyStructList_MoveIn( s->list_, (oyStruct_s**)obj, pos, 0 ); } return error; }
/** Function oyStruct_ObserverAdd * @memberof oyObserver_s * @brief send a signal to a Observer object * * @param[in] model the to be observed model * @param[in] observer the in observation intereressted object * @param[in] user_data additional static informations * @param[in] signalFunc the signal handler; * defaults to oyStructSignalForward_ * @return 0 - fine; 1 - error * * @version Oyranos: 0.1.10 * @since 2009/10/26 (Oyranos: 0.1.10) * @date 2010/06/25 */ OYAPI int OYEXPORT oyStruct_ObserverAdd ( oyStruct_s * model, oyStruct_s * observer, oyStruct_s * user_data, oyObserver_Signal_f signalFunc ) { oyObserver_s * s = 0, * obs = 0; int error = !model || !observer; oyStructList_s * list = 0; int n,i, found; if(!signalFunc) signalFunc = oyStructSignalForward_; /* add to model */ if(!error) list = oyStruct_ObserverListGet_( model, OY_SIGNAL_OBSERVERS ); if(!error && list) { found = 0; n = oyStructList_Count( list ); for(i = 0; i < n; ++i) { obs = (oyObserver_s*) oyStructList_GetType( list, i, oyOBJECT_OBSERVER_S ); if(observer == obs->observer && obs->signal == signalFunc) ++found; } /* add new oyObserver_s */ if(found == 0) { s = oyObserver_New( 0 ); if(observer) s->observer = observer->copy( observer, 0 ); s->model = model->copy( model, 0 ); if(user_data) s->user_data = user_data->copy( user_data, 0 ); s->signal = signalFunc; if(oy_debug_objects >= 0) { if(s->observer) oyObjectDebugMessage_( s->observer->oy_, __func__, oyStructTypeToText(s->observer->type_) ); if(s->model) oyObjectDebugMessage_( s->model->oy_, __func__, oyStructTypeToText(s->model->type_) ); if(s->user_data) oyObjectDebugMessage_( s->user_data->oy_, __func__, oyStructTypeToText(s->user_data->type_) ); } oyStructList_MoveIn( list, (oyStruct_s**)&s, -1, 0 ); } } /* add to observer */ if(!error) list = oyStruct_ObserverListGet_( observer, OY_SIGNAL_MODELS ); if(!error && list) { found = 0; n = oyStructList_Count( list ); for(i = 0; i < n; ++i) { obs = (oyObserver_s*) oyStructList_GetType( list, i, oyOBJECT_OBSERVER_S ); if(model == obs->model && obs->signal == signalFunc) ++found; } /* add oyObserver_s */ if(found == 0 && !s) { s = oyObserver_New( 0 ); if(observer) s->observer = observer->copy( observer, 0 ); s->model = model->copy( model, 0 ); if(user_data) s->user_data = user_data->copy( user_data, 0 ); s->signal = signalFunc; } if(s) oyStructList_MoveIn( list, (oyStruct_s**)&s, -1, 0 ); } return error; }