/** Function oyStructList_Copy__Members * @memberof oyStructList_s * @brief Custom StructList copy constructor * @internal * * This function makes a copy of all values from the input * to the output object. The destination object and all of its * members should already be allocated. * * @param[in] src the oyStructList_s_ input object * @param[out] dst the output oyStructList_s_ object * * @version Oyranos: x.x.x * @since YYYY/MM/DD (Oyranos: x.x.x) * @date YYYY/MM/DD */ int oyStructList_Copy__Members( oyStructList_s_ * dst, oyStructList_s_ * src) { int error,i; oyAlloc_f allocateFunc_ = 0; oyDeAlloc_f deallocateFunc_ = 0; if(!dst || !src) return 1; allocateFunc_ = dst->oy_->allocateFunc_; deallocateFunc_ = dst->oy_->deallocateFunc_; /* Copy each value of src to dst here */ dst->parent_type_ = src->parent_type_; if(src->list_name) dst->list_name = oyStringAppend_(0, src->list_name, allocateFunc_); oyObject_Lock( dst->oy_, __FILE__, __LINE__ ); dst->n_reserved_ = (src->n_ > 10) ? (int)(src->n_ * 1.5) : 10; dst->n_ = src->n_; dst->ptr_ = oyAllocateFunc_( sizeof(int*) * dst->n_reserved_ ); memset( dst->ptr_, 0, sizeof(int*) * dst->n_reserved_ ); for(i = 0; i < src->n_; ++i) if(src->ptr_[i]->copy) dst->ptr_[i] = src->ptr_[i]->copy( src->ptr_[i], 0 ); if(oyStruct_IsObserved( (oyStruct_s*)dst, 0) ) error = oyStructList_ObserverAdd( (oyStructList_s*)src, 0, 0, 0 ); oyObject_UnLock( dst->oy_, __FILE__, __LINE__ ); return error; }
oyjl_val oyJsonParse ( const char * json ) { int error = !json; oyjl_val root; char * error_buffer; if(error) return NULL; error_buffer = (char*)oyAllocateFunc_( 256 ); if(!error_buffer) return NULL; error_buffer[0] = '\000'; root = oyjlTreeParse( json, error_buffer, 256 ); if(error_buffer[0] != '\000') oyMessageFunc_p( oyMSG_WARN, NULL, OY_DBG_FORMAT_ "ERROR:\t\"%s\"\n%s", OY_DBG_ARGS_, error_buffer, json ); oyDeAllocateFunc_( error_buffer ); return root; }
/** Function oyProfile_FromStd * @memberof oyProfile_s * @brief Create from default colour space settings * * @param[in] type default colour space * @param[in] object the optional base * * @since Oyranos: version 0.1.8 * @date november 2007 (API 0.1.8) */ OYAPI oyProfile_s * OYEXPORT oyProfile_FromStd ( oyPROFILE_e type, oyObject_s object) { oyProfile_s_ * s = 0; char * name = 0; oyAlloc_f allocateFunc = 0; int pos = type - oyDEFAULT_PROFILE_START; if(!oy_profile_s_std_cache_) { int len = sizeof(oyProfile_s*) * (oyDEFAULT_PROFILE_END - oyDEFAULT_PROFILE_START); oy_profile_s_std_cache_ = oyAllocateFunc_( len ); memset( oy_profile_s_std_cache_, 0, len ); } if(oyDEFAULT_PROFILE_START < type && type < oyDEFAULT_PROFILE_END) if(oy_profile_s_std_cache_[pos]) return oyProfile_Copy( oy_profile_s_std_cache_[pos], 0 ); if(object) allocateFunc = object->allocateFunc_; if(type) name = oyGetDefaultProfileName ( type, allocateFunc ); s = oyProfile_FromFile_( name, 0, object ); if(s) s->use_default_ = type; if(oyDEFAULT_PROFILE_START < type && type < oyDEFAULT_PROFILE_END) oy_profile_s_std_cache_[pos] = oyProfile_Copy( (oyProfile_s*)s, 0 ); oyProfile_GetID( (oyProfile_s*)s ); return (oyProfile_s*)s; }
/** * @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; }