/** Function oyFilterNode_ShowConnector * @memberof oyFilterNode_s * @brief Get a connector description from a filter module * * The path to obtain a new connector. * The filter can say it has more connectors to provide for a certain kind of * static connector eigther described in oyCMMapi4_s::inputs or * oyCMMapi4_s::outputs. * * @param[in] node the module filter node * @param[in] as_pos the according oyConnector_s * @param[in] is_plug select from 0 - plugs or 1 - sockets * @return the new oyConnector_s * * @version Oyranos: 0.1.10 * @since 2008/07/28 (Oyranos: 0.1.8) * @date 2008/12/27 */ OYAPI oyConnector_s * OYEXPORT oyFilterNode_ShowConnector ( oyFilterNode_s * node, int as_pos, int is_plug ) { oyConnector_s * pattern = 0; oyObject_s object = 0; oyFilterNode_s_ ** node_ = (oyFilterNode_s_**)&node; if(!node || !(*node_)->core || node->type_ != oyOBJECT_FILTER_NODE_S || !(*node_)->api7_) return 0; object = oyObject_New (); if(is_plug) { if((*node_)->api7_->plugs_n <= (size_t)as_pos && as_pos < oyFilterNode_EdgeCount( node, 1, 0 )) as_pos = (*node_)->api7_->plugs_n - 1; if((*node_)->api7_->plugs_n > (size_t)as_pos) { if((*node_)->api7_->plugs[as_pos] && (*node_)->api7_->plugs[as_pos]->copy) { pattern = (oyConnector_s*) (*node_)->api7_->plugs[as_pos]->copy( (oyStruct_s*) (*node_)->api7_->plugs[as_pos], object ); if(oy_debug_objects >= 0) oyObjectDebugMessage_( (*node_)->api7_->plugs[as_pos]->oy_, __func__, oyStructTypeToText((*node_)->api7_->plugs[as_pos]->type_) ); } else { pattern = oyConnector_Copy( (*node_)->api7_->plugs[as_pos], object ); } } } else { if((*node_)->api7_->sockets_n <= (size_t)as_pos && as_pos < oyFilterNode_EdgeCount( node, 0, 0 )) as_pos = (*node_)->api7_->sockets_n - 1; if((*node_)->api7_->sockets_n > (size_t)as_pos) { if((*node_)->api7_->sockets[as_pos] && (*node_)->api7_->sockets[as_pos]->copy) { pattern = (oyConnector_s*) (*node_)->api7_->sockets[as_pos]->copy( (oyStruct_s*) (*node_)->api7_->sockets[as_pos], object ); if(oy_debug_objects >= 0) oyObjectDebugMessage_( (*node_)->api7_->sockets[as_pos]->oy_, __func__, oyStructTypeToText((*node_)->api7_->sockets[as_pos]->type_) ); } else { pattern = oyConnector_Copy( (*node_)->api7_->sockets[as_pos], object ); } } } oyObject_Release( &object ); return pattern; }
/** Function oyFilterNode_GetData * @memberof oyFilterNode_s * @brief Get process data from a filter socket * * @param[in] node filter node * @param[in] socket_pos position of socket * @return the data * * @version Oyranos: 0.1.10 * @since 2009/03/05 (Oyranos: 0.1.10) * @date 2009/03/05 */ oyStruct_s * oyFilterNode_GetData ( oyFilterNode_s * node, int socket_pos ) { oyFilterNode_s * s = node; oyStruct_s * data = 0; oyFilterSocket_s * socket = 0; if(!s) return 0; oyCheckType__m( oyOBJECT_FILTER_NODE_S, return 0 ); socket = oyFilterNode_GetSocket( node, socket_pos ); if(socket) data = oyFilterSocketPriv_m(socket)->data; oyFilterSocket_Release( &socket ); if(data && data->copy) { data = data->copy( data, 0 ); if(oy_debug_objects >= 0) oyObjectDebugMessage_( data->oy_, __func__, oyStructTypeToText(data->type_) ); } return data; }
static const char * oyCMMobjectType_StaticMessageFunc_ ( oyPointer obj, oyNAME_e type, int flags ) { oyCMMobjectType_s_ * s = (oyCMMobjectType_s_*) obj; static char * text = 0; static int text_n = 0; oyAlloc_f alloc = oyAllocateFunc_; /* silently fail */ if(!s) return ""; if(s->oy_ && s->oy_->allocateFunc_) alloc = s->oy_->allocateFunc_; if( text == NULL || text_n == 0 ) { text_n = 512; text = (char*) alloc( text_n ); if(text) memset( text, 0, text_n ); } if( text == NULL || text_n == 0 ) return "Memory problem"; text[0] = '\000'; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); return text; }
/** Function oyFilterNode_SetData * @memberof oyFilterNode_s * @brief Set process data to a filter socket * * @param[in,out] node filter node * @param[in] data data * @param[in] socket_pos position of socket * @param[in] object a object to not only set a reference * @return error * * @version Oyranos: 0.1.10 * @since 2009/03/05 (Oyranos: 0.1.10) * @date 2009/03/05 */ int oyFilterNode_SetData ( oyFilterNode_s * node, oyStruct_s * data, int socket_pos, oyObject_s * object ) { oyFilterNode_s * s = node; oyFilterSocket_s_ * socket = 0; if(!s) return 0; oyCheckType__m( oyOBJECT_FILTER_NODE_S, return 0 ); socket = (oyFilterSocket_s_*)oyFilterNode_GetSocket( node, socket_pos ); if(socket) { if(socket->data && socket->data->release) socket->data->release( &socket->data ); if(data && data->copy) { socket->data = data->copy( data, object ); if(oy_debug_objects >= 0) oyObjectDebugMessage_( socket->data->oy_, __func__, oyStructTypeToText(socket->data->type_) ); } else socket->data = data; oyFilterSocket_Release( (oyFilterSocket_s **) &socket ); } else { WARNc_S("Node has no socket. Can not assign data."); return -1; } return 0; }
static const char * oyHash_StaticMessageFunc_ ( oyPointer obj, oyNAME_e type, int flags ) { oyHash_s_ * s = (oyHash_s_*) obj; static char * text = 0; static int text_n = 0; oyAlloc_f alloc = oyAllocateFunc_; /* silently fail */ if(!s) return ""; if(s->oy_ && s->oy_->allocateFunc_) alloc = s->oy_->allocateFunc_; if( text == NULL || text_n == 0 ) { text_n = 512; text = (char*) alloc( text_n ); if(text) memset( text, 0, text_n ); } if( text == NULL || text_n == 0 ) return "Memory problem"; text[0] = '\000'; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); const char * hash_text = oyObject_GetName(s->oy_, oyNAME_NAME); int l = 0; if(hash_text) l = strlen(hash_text); /* allocate enough space */ if(text_n < l) { oyDeAlloc_f dealloc = oyDeAllocateFunc_; if(s->oy_ && s->oy_->deallocateFunc_) dealloc = s->oy_->deallocateFunc_; if(text && text_n) dealloc( text ); text_n = l; text = alloc(text_n); if(text) text[0] = '\000'; else return "Memory Error"; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); } if(type == oyNAME_NICK && (flags & 0x01)) { sprintf( &text[strlen(text)], "%d", l ); } else if(type == oyNAME_NAME || (int)type >= oyNAME_DESCRIPTION) sprintf( &text[strlen(text)], "%s", hash_text?hash_text:"----" ); return text; }
/** @internal * Function oyFilterGraph_Release_ * @memberof oyFilterGraph_s_ * @brief release and possibly deallocate a FilterGraph object * * @param[in,out] filtergraph FilterGraph struct object * * @version Oyranos: 0.9.7 * @date 2018/10/03 * @since 2010/04/26 (Oyranos: 0.1.10) */ int oyFilterGraph_Release_( oyFilterGraph_s_ **filtergraph ) { const char * track_name = NULL; int observer_refs = 0, i; /* ---- start of common object destructor ----- */ oyFilterGraph_s_ *s = 0; if(!filtergraph || !*filtergraph) return 0; s = *filtergraph; /* static object */ if(!s->oy_) return 0; *filtergraph = 0; observer_refs = oyStruct_ObservationCount( (oyStruct_s*)s, 0 ); if(oy_debug_objects >= 0) { const char * t = getenv(OY_DEBUG_OBJECTS); int id_ = -1; if(t) id_ = atoi(t); else id_ = oy_debug_objects; if((id_ >= 0 && s->oy_->id_ == id_) || (t && (strstr(oyStructTypeToText(s->type_), t) != 0)) || id_ == 1) { oyStruct_s ** parents = NULL; int n = oyStruct_GetParents( (oyStruct_s*)s, &parents ); if(n != s->oy_->ref_) { int i; #ifdef HAVE_BACKTRACE int j, nptrs; void *buffer[BT_BUF_SIZE]; char **strings; nptrs = backtrace(buffer, BT_BUF_SIZE); /* The call backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO) would produce similar output to the following: */ strings = backtrace_symbols(buffer, nptrs); if( strings == NULL ) { perror("backtrace_symbols"); } else { int start = nptrs-1; do { --start; } while( start >= 0 && (strstr(strings[start], "(main+") == NULL) ); fprintf(stderr, "\n"); for(j = start; j >= 0; j--) { if(oy_debug) fprintf(stderr, "%s\n", strings[j]); else { char * t = NULL, * txt = NULL; const char * line = strings[j], * tmp = strchr( line, '(' ); if(tmp) t = oyStringCopy( &tmp[1], NULL ); else t = oyStringCopy( line, NULL ); txt = strchr( t, '+' ); if(txt) txt[0] = '\000'; if(j > 0 && (strstr(strings[j-1], t) != NULL) ) oyFree_m_(t); if(t) { if(j==0) fprintf(stderr, "%s() ", t); else fprintf(stderr, "%s()->", t); oyFree_m_(t); } } } free(strings); } #endif track_name = oyStructTypeToText(s->type_); fprintf( stderr, "%s[%d] unref with refs: %d observers: %d parents: %d\n", track_name, s->oy_->id_, s->oy_->ref_, observer_refs, n ); for(i = 0; i < n; ++i) { track_name = oyStructTypeToText(parents[i]->type_); fprintf( stderr, "parent[%d]: %s[%d]\n", i, track_name, parents[i]->oy_->id_ ); } } } } if((oyObject_UnRef(s->oy_) - observer_refs) > 0) return 0; /* ---- end of common object destructor ------- */ if(oy_debug_objects >= 0) { const char * t = getenv(OY_DEBUG_OBJECTS); int id_ = -1; if(t) id_ = atoi(t); else id_ = oy_debug_objects; if((id_ >= 0 && s->oy_->id_ == id_) || (t && s && (strstr(oyStructTypeToText(s->type_), t) != 0)) || id_ == 1) { track_name = oyStructTypeToText(s->type_); fprintf( stderr, "%s[%d] destruct\n", track_name, s->oy_->id_); } } /* ---- start of custom FilterGraph destructor ----- */ oyFilterGraph_Release__Members( s ); /* ---- end of custom FilterGraph destructor ------- */ /* model and observer reference each other. So release the object two times. * The models and and observers are released later inside the * oyObject_s::handles. */ for(i = 0; i < observer_refs; ++i) { oyObject_UnRef(s->oy_); oyObject_UnRef(s->oy_); } if(s->oy_->deallocateFunc_) { oyDeAlloc_f deallocateFunc = s->oy_->deallocateFunc_; int id = s->oy_->id_; int refs = s->oy_->ref_; if(refs > 1) fprintf( stderr, "!!!ERROR: node[%d]->object can not be untracked with refs: %d\n", id, refs); oyObject_Release( &s->oy_ ); if(track_name) fprintf( stderr, "%s[%d] destructed\n", track_name, id ); deallocateFunc( s ); } return 0; }
/** @internal * Function oyFilterGraph_Copy_ * @memberof oyFilterGraph_s_ * @brief copy or reference a FilterGraph object * * @param[in] filtergraph FilterGraph struct object * @param object the optional object * * @version Oyranos: * @since 2010/04/26 (Oyranos: 0.1.10) * @date 2010/04/26 */ oyFilterGraph_s_ * oyFilterGraph_Copy_ ( oyFilterGraph_s_ *filtergraph, oyObject_s object ) { oyFilterGraph_s_ *s = filtergraph; if(!filtergraph) return 0; if(filtergraph && !object) { s = filtergraph; if(oy_debug_objects >= 0 && s->oy_) { const char * t = getenv(OY_DEBUG_OBJECTS); int id_ = -1; if(t) id_ = atoi(t); else id_ = oy_debug_objects; if((id_ >= 0 && s->oy_->id_ == id_) || (t && s && (strstr(oyStructTypeToText(s->type_), t) != 0)) || id_ == 1) { oyStruct_s ** parents = NULL; int n = oyStruct_GetParents( (oyStruct_s*)s, &parents ); if(n != s->oy_->ref_) { int i; const char * track_name = oyStructTypeToText(s->type_); #ifdef HAVE_BACKTRACE int j, nptrs; void *buffer[BT_BUF_SIZE]; char **strings; nptrs = backtrace(buffer, BT_BUF_SIZE); /* The call backtrace_symbols_fd(buffer, nptrs, STDOUT_FILENO) would produce similar output to the following: */ strings = backtrace_symbols(buffer, nptrs); if( strings == NULL ) { perror("backtrace_symbols"); } else { int start = nptrs-1; do { --start; } while( start >= 0 && (strstr(strings[start], "(main+") == NULL) ); fprintf(stderr, "\n"); for(j = start; j >= 0; j--) { if(oy_debug) fprintf(stderr, "%s\n", strings[j]); else { char * t = NULL, * txt = NULL; const char * line = strings[j], * tmp = strchr( line, '(' ); if(tmp) t = oyStringCopy( &tmp[1], NULL ); else t = oyStringCopy( line, NULL ); txt = strchr( t, '+' ); if(txt) txt[0] = '\000'; if(j > 0 && (strstr(strings[j-1], t) != NULL) ) oyFree_m_(t); if(t) { if(j==0) fprintf(stderr, "%s() ", t); else fprintf(stderr, "%s()->", t); oyFree_m_(t); } } } free(strings); } #endif fprintf( stderr, "%s[%d] tracking refs: %d parents: %d\n", track_name, s->oy_->id_, s->oy_->ref_, n ); for(i = 0; i < n; ++i) { track_name = oyStructTypeToText(parents[i]->type_); fprintf( stderr, "parent[%d]: %s[%d]\n", i, track_name, parents[i]->oy_->id_ ); } } } } oyObject_Copy( s->oy_ ); return s; } s = oyFilterGraph_Copy__( filtergraph, object ); return s; }
/** Function oyFilterNode_Connect * @memberof oyFilterNode_s * @brief Connect two nodes by a edge * * @param input the node to provide a socket * @param socket_nick name of socket * @param output the node providing a plug * @param plug_nick name of plug * @param flags unused * @return error * * @version Oyranos: 0.1.10 * @since 2009/02/26 (Oyranos: 0.1.10) * @date 2009/02/26 */ int oyFilterNode_Connect ( oyFilterNode_s * input, const char * socket_nick, oyFilterNode_s * output, const char * plug_nick, int flags OY_UNUSED ) { oyFilterNode_s_ * s = (oyFilterNode_s_*)input; int error = !s; oyFilterPlug_s * out_plug = 0; oyFilterSocket_s * output_socket = 0, * in_socket = 0; int pos, out_pos; oyCheckType__m( oyOBJECT_FILTER_NODE_S, return 1 ) s = (oyFilterNode_s_*)output; oyCheckType__m( oyOBJECT_FILTER_NODE_S, return 1 ) if(error <= 0) { if(error <= 0 && (!s->core || !s->core->api4_)) { WARNcc2_S( s, "%s: %s", _("attempt to add a incomplete filter"), s->relatives_ ); error = 1; } if(error <= 0 && !oyFilterNode_EdgeCount( input, 0, OY_FILTEREDGE_FREE )) { WARNcc2_S( input, "%s: %s", "input node has no free socket", oyFilterCore_GetName( (oyFilterCore_s*)oyFilterNodePriv_m(input)->core, oyNAME_NAME) ); error = 1; } if(error <= 0) { if(socket_nick) pos = oyFilterNode_GetConnectorPos( input, 0, socket_nick, 0, 0 ); else pos = 0; if(pos >= 0) in_socket = oyFilterNode_GetSocket( input, pos ); if(plug_nick) out_pos = oyFilterNode_GetConnectorPos( output, 1, plug_nick, 0, OY_FILTEREDGE_FREE ); else out_pos = 0; if(out_pos >= 0) out_plug = oyFilterNode_GetPlug( output, out_pos ); if(!out_plug) { WARNcc3_S( output, "\n %s: \"%s\" %s", "Could not find plug for filter", oyFilterCore_GetName( (oyFilterCore_s*)oyFilterNodePriv_m(output)->core, oyNAME_NAME), socket_nick ); error = 1; } if(error <= 0) { if(oyFilterNode_ConnectorMatch( input, pos, out_plug )) output_socket = oyFilterNode_GetSocket( output, 0 ); else { WARNcc3_S( input, "\n %s: %s -> %s", "Filter connectors do not match", oyFilterNodePriv_m(input)->relatives_, oyFilterNodePriv_m(output)->relatives_ ); error = 1; } } if(error <= 0 && output_socket && !oyFilterSocketPriv_m(output_socket)->data && in_socket && oyFilterSocketPriv_m(in_socket)->data) { oyFilterSocketPriv_m(output_socket)->data = oyFilterSocketPriv_m(in_socket)->data->copy( oyFilterSocketPriv_m(in_socket)->data, 0 ); if(oy_debug_objects >= 0) oyObjectDebugMessage_( oyFilterSocketPriv_m(output_socket)->data->oy_, __func__, oyStructTypeToText(oyFilterSocketPriv_m(output_socket)->data->type_) ); } if(error <= 0) { oyFilterPlug_s_ * out_plug_ = (oyFilterPlug_s_*) out_plug; oyFilterSocket_s_* in_socket_ = (oyFilterSocket_s_*)in_socket; error = oyFilterPlug_ConnectIntoSocket( &out_plug, &in_socket ); if(error <= 0) { oyFilterNode_Release( (oyFilterNode_s**) &out_plug_->node ); out_plug_->node = (oyFilterNode_s_*) oyFilterNode_Copy( output, NULL ); oyFilterNode_Release( (oyFilterNode_s**) &in_socket_->node ); in_socket_->node = (oyFilterNode_s_*) oyFilterNode_Copy( input, NULL ); } } } else WARNcc2_S( input, "%s: %d", _("?? Nothing to add ??"), oyObject_GetId(input->oy_)); } oyFilterSocket_Release( &output_socket ); 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; }
/** * @internal * Function oyOption_GetValueText_ * @memberof oyOption_s * @brief get value as a text dump * * @param obj the option * @param allocateFunc user allocator * @return the text * * @version Oyranos: 0.1.9 * @since 2008/12/05 (Oyranos: 0.1.9) * @date 2009/08/17 */ char * oyOption_GetValueText_( oyOption_s_ * obj, oyAlloc_f allocateFunc ) { int error = !obj; char * erg = 0; oyValue_u * v = 0; oyStructList_s * oy_struct_list = 0; char * text = 0; char * save_locale = 0; if(error <= 0) v = obj->value; if(!allocateFunc) allocateFunc = oyAllocateFunc_; error = !v; save_locale = oyStringCopy_( setlocale(LC_NUMERIC, 0 ), oyAllocateFunc_ ); setlocale(LC_NUMERIC, "C"); if(error <= 0) { int n = 1, i = 0; char * tmp = oyAllocateFunc_(1024); const char * ct = 0; switch(obj->value_type) { case oyVAL_INT_LIST: n = v->int32_list[0]; break; case oyVAL_DOUBLE_LIST: n = (int)v->dbl_list[0]; break; case oyVAL_STRING_LIST: n = 0; while( v->string_list[n] ) ++n; break; case oyVAL_INT: case oyVAL_DOUBLE: case oyVAL_STRING: case oyVAL_STRUCT: n = 1; break; case oyVAL_NONE: case oyVAL_MAX: n = 0; break; } if(obj->value_type == oyVAL_STRUCT) { oy_struct_list = (oyStructList_s*) v->oy_struct; if(oy_struct_list) { if(oy_struct_list->type_ == oyOBJECT_STRUCT_LIST_S) n = oyStructList_Count( oy_struct_list ); } else WARNc2_S( "missed \"oy_struct\" member of \"%s\" [%d]", obj->registration, oyObject_GetId(obj->oy_) ); } for(i = 0; i < n; ++i) { if(obj->value_type == oyVAL_INT) oySprintf_(tmp, "%d", v->int32); if(obj->value_type == oyVAL_DOUBLE) oySprintf_(tmp, "%g", v->dbl); if(obj->value_type == oyVAL_INT_LIST) oySprintf_(tmp, "%d", v->int32_list[i+1]); if(obj->value_type == oyVAL_DOUBLE_LIST) oySprintf_(tmp, "%g", v->dbl_list[i+1]); if((obj->value_type == oyVAL_INT_LIST || obj->value_type == oyVAL_DOUBLE_LIST) && i) STRING_ADD( text, "," ); switch(obj->value_type) { case oyVAL_INT: case oyVAL_DOUBLE: case oyVAL_INT_LIST: case oyVAL_DOUBLE_LIST: STRING_ADD( text, tmp ); break; case oyVAL_STRING: STRING_ADD( text, v->string ); break; case oyVAL_STRING_LIST: STRING_ADD( text, v->string_list[i] ); break; case oyVAL_STRUCT: case oyVAL_NONE: case oyVAL_MAX: break; } if(obj->value_type == oyVAL_STRUCT) { oyStruct_s * oy_struct = 0; if(oy_struct_list && oy_struct_list->type_ == oyOBJECT_STRUCT_LIST_S) oy_struct = oyStructList_Get_( ( oyStructList_s_*)oy_struct_list, i ); else if(v->oy_struct) oy_struct = v->oy_struct; if(oy_struct) { ct = 0; /* get explicite name */ if(oy_struct->oy_) ct = oyObject_GetName( oy_struct->oy_, oyNAME_NICK ); if(!ct) /* fall back to oyCMMapi9_s object type lookup */ ct = oyStruct_GetText( oy_struct, oyNAME_NICK, 0 ); if(ct) STRING_ADD( text, ct ); if(!ct) /* fall back to plain struct type name, if known */ STRING_ADD ( text, oyStructTypeToText(oy_struct->type_) ); } } } if(text) erg = oyStringCopy_( text, allocateFunc ); oyFree_m_( tmp ); if(!text) { DBG_NUM2_S( "missed value in \"%s\" [%d]", obj->registration, oyObject_GetId(obj->oy_) ); } else oyFree_m_( text ); } setlocale(LC_NUMERIC, save_locale); oyFree_m_( save_locale ); return erg; }
static const char * oyOption_StaticMessageFunc_ ( oyPointer obj, oyNAME_e type, int flags ) { oyOption_s_ * s = (oyOption_s_*) obj; static char * text = 0; static int text_n = 0; oyAlloc_f alloc = oyAllocateFunc_; /* silently fail */ if(!s) return ""; if(s->oy_ && s->oy_->allocateFunc_) alloc = s->oy_->allocateFunc_; if( text == NULL || text_n == 0 ) { text_n = 128; text = (char*) alloc( text_n ); if(text) memset( text, 0, text_n ); } if( text == NULL || text_n == 0 ) return "Memory problem"; text[0] = '\000'; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); /* allocate enough space */ if(text_n < 1000) { oyDeAlloc_f dealloc = oyDeAllocateFunc_; if(s->oy_ && s->oy_->deallocateFunc_) dealloc = s->oy_->deallocateFunc_; if(text && text_n) dealloc( text ); text_n = 1024; text = alloc(text_n); if(text) text[0] = '\000'; else return "Memory Error"; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); } if(type == oyNAME_NICK && (flags & 0x01)) { sprintf( &text[strlen(text)], "%s", oyOption_GetText((oyOption_s*)s,type) ); } else if(type == oyNAME_NAME) sprintf( &text[strlen(text)], "id:%d %s", s->id, oyOption_GetText((oyOption_s*)s, oyNAME_NICK) ); else if((int)type >= oyNAME_DESCRIPTION) sprintf( &text[strlen(text)], "%s\nid: %d type: %s source: %d flags: %d", oyOption_GetText((oyOption_s*)s, oyNAME_NICK), s->id, oyValueTypeText(s->value_type), s->source, s->flags ); return text; }
static const char * oyProfileTag_StaticMessageFunc_ ( oyPointer obj, oyNAME_e type, int flags ) { oyProfileTag_s_ * s = (oyProfileTag_s_*) obj; static char * text = 0; static int text_n = 0; oyAlloc_f alloc = oyAllocateFunc_; /* silently fail */ if(!s) return ""; if(s->oy_ && s->oy_->allocateFunc_) alloc = s->oy_->allocateFunc_; if( text == NULL || text_n == 0 ) { text_n = 128; text = (char*) alloc( text_n ); if(text) memset( text, 0, text_n ); } if( text == NULL || text_n == 0 ) return "Memory problem"; text[0] = '\000'; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); /* allocate enough space */ if(text_n < 1000) { oyDeAlloc_f dealloc = oyDeAllocateFunc_; if(s->oy_ && s->oy_->deallocateFunc_) dealloc = s->oy_->deallocateFunc_; if(text && text_n) dealloc( text ); text_n = 1000; text = alloc(text_n); if(text) text[0] = '\000'; else return "Memory Error"; if(!(flags & 0x01)) sprintf(text, "%s%s", oyStructTypeToText( s->type_ ), type != oyNAME_NICK?" ":""); } if(type == oyNAME_NICK && (flags & 0x01)) { sprintf( &text[strlen(text)], "%s", oyICCTagName(s->use) ); } else if(type == oyNAME_NAME) sprintf( &text[strlen(text)], "%s %s", oyICCTagName(s->use), oyICCTagTypeName(s->tag_type_) ); else if((int)type >= oyNAME_DESCRIPTION) sprintf( &text[strlen(text)], "%s %s\noffset: %lu size: %lu/%lu", oyICCTagDescription(s->use), oyICCTagTypeName(s->tag_type_), s->offset_orig, s->size_, s->size_check_ ); return text; }