linphone-LinphoneFriendImpl文件对应的JNI层文件分析_linphone friendlist-程序员宅基地

技术标签: linphone  

说明

native函数

    private native void finalize(long nativePtr);
    private native long newLinphoneFriend(String friendUri);
    private native void setAddress(long nativePtr,long friend);
    private native long getAddress(long nativePtr);
    private native void setIncSubscribePolicy(long nativePtr,int enumValue);
    private native int  getIncSubscribePolicy(long nativePtr);
    private native void enableSubscribes(long nativePtr,boolean value);
    private native boolean isSubscribesEnabled(long nativePtr);
    private native int getStatus(long nativePtr);
    private native Object getPresenceModel(long nativePtr);
    private native void setPresenceModel(long nativePtr, long presencePtr);
    private native void edit(long nativePtr);
    private native void done(long nativePtr);
    private native Object getCore(long ptr);
    private native void setRefKey(long nativePtr, String key);
    private native String getRefKey(long nativePtr);
    private native void setName(long nativePtr, String name);
    private native String getName(long nativePtr);

具体函数分析

finalize

extern "C" void  Java_org_linphone_core_LinphoneFriendImpl_finalize(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    LinphoneFriend *lfriend=(LinphoneFriend*)ptr;
    linphone_friend_set_user_data(lfriend,NULL);
    linphone_friend_unref(lfriend);
}

LinphoneFriend

submodules/linphone/coreapi/private.h:struct _LinphoneFriend{
   
struct _LinphoneFriend{
    belle_sip_object_t base;
    void *user_data;
    LinphoneAddress *uri;
    MSList *insubs; /*list of SalOp. There can be multiple instances of a same Friend that subscribe to our presence*/
    SalOp *outsub;
    LinphoneSubscribePolicy pol;
    LinphonePresenceModel *presence;
    struct _LinphoneCore *lc;
    BuddyInfo *info;
    char *refkey;
    bool_t subscribe;
    bool_t subscribe_active;
    bool_t inc_subscribe_pending;
    bool_t commit;
    bool_t initial_subscribes_sent; /*used to know if initial subscribe message was sent or not*/
    bool_t presence_received;
    LinphoneVcard *vcard;
    unsigned int storage_id;
    LinphoneFriendList *friend_list;
};

我隐隐约约的明白了, 只要明白LinphoneFriend 就可以明白这个类型是干什么工作的了。

LinphoneSubscribePolicy

submodules/linphone/coreapi/linphonefriend.h:typedef enum _LinphoneSubscribePolicy {
   
/**
 * @addtogroup buddy_list
 * @{
 */
/**
 * Enum controlling behavior for incoming subscription request.
 * <br> Use by linphone_friend_set_inc_subscribe_policy()
 */
typedef enum _LinphoneSubscribePolicy {
    /**
     * Does not automatically accept an incoming subscription request.
     * This policy implies that a decision has to be taken for each incoming subscription request notified by callback LinphoneCoreVTable.new_subscription_requested
     *
     */
    LinphoneSPWait,
    /**
     * Rejects incoming subscription request.
     */
    LinphoneSPDeny,
    /**
     * Automatically accepts a subscription request.
     */
    LinphoneSPAccept
} LinphoneSubscribePolicy;

LinphonePresenceModel

submodules/linphone/coreapi/presence.c:struct _LinphonePresenceModel {
   
/**
 * Represents the presence model as defined in RFC 4479 and RFC 4480.
 * This model is not complete. For example, it does not handle devices.
 */
struct _LinphonePresenceModel {
    LinphoneAddress *presentity; /* "The model seeks to describe the presentity, identified by a presentity URI.*/
    void *user_data;
    int refcnt;
    MSList *services;   /**< A list of _LinphonePresenceService structures. Also named tuples in the RFC. */
    MSList *persons;    /**< A list of _LinphonePresencePerson structures. */
    MSList *notes;      /**< A list of _LinphonePresenceNote structures. */
};

LinphoneVcard

submodules/linphone/coreapi/vcard.cc:struct _LinphoneVcard {
submodules/linphone/coreapi/vcard_stubs.c:struct _LinphoneVcard {
submodules/linphone/coreapi/vcard.h:typedef struct _LinphoneVcard LinphoneVcard;
struct _LinphoneVcard {
    shared_ptr<belcard::BelCard> belCard;
    char *etag;
    char *url;
    unsigned char *md5;
};

LinphoneFriendList

submodules/linphone/coreapi/private.h:struct _LinphoneFriendList {
   
struct _LinphoneFriendList {
    belle_sip_object_t base;
    void *user_data;
    LinphoneCore *lc;
    LinphoneEvent *event;
    char *display_name;
    char *rls_uri;
    MSList *friends;
    unsigned char *content_digest;
    int expected_notification_version;
    unsigned int storage_id;
    char *uri;
    MSList *dirty_friends_to_update;
    int revision;
    LinphoneFriendListCbs *cbs;
};

linphone_friend_set_user_data

submodules/linphone/coreapi/linphonefriend.h:LINPHONE_PUBLIC void linphone_friend_set_user_data(LinphoneFriend *lf, void *data);

submodules/linphone/coreapi/friend.c:void linphone_friend_set_user_data(LinphoneFriend *lf, void *data){
   
void linphone_friend_set_user_data(LinphoneFriend *lf, void *data){
    lf->user_data=data;
}

linphone_friend_unref

void linphone_friend_unref(LinphoneFriend *lf) {
    belle_sip_object_unref(lf);
}

newLinphoneFriend

//LinphoneFriend
extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_newLinphoneFriend(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jstring jFriendUri) {
    LinphoneFriend* lResult;

    if (jFriendUri) {
        const char* friendUri = env->GetStringUTFChars(jFriendUri, NULL);
        lResult = linphone_friend_new_with_address(friendUri);
        linphone_friend_set_user_data(lResult,env->NewWeakGlobalRef(thiz));
        env->ReleaseStringUTFChars(jFriendUri, friendUri);
    } else {
        lResult = linphone_friend_new();
        linphone_friend_set_user_data(lResult,env->NewWeakGlobalRef(thiz));
    }
    return (jlong)lResult;
}

linphone_friend_set_user_data

submodules/linphone/coreapi/linphonefriend.h:LINPHONE_PUBLIC void linphone_friend_set_user_data(LinphoneFriend *lf, void *data);
submodules/linphone/coreapi/friend.c:void linphone_friend_set_user_data(LinphoneFriend *lf, void *data){
   

void linphone_friend_set_user_data(LinphoneFriend *lf, void *data){
    lf->user_data=data;
}

setAddress

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setAddress(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr
                                                                        ,jlong linphoneAddress) {
    linphone_friend_set_address((LinphoneFriend*)ptr,(LinphoneAddress*)linphoneAddress);
}

linphone_friend_set_address

int linphone_friend_set_address(LinphoneFriend *lf, const LinphoneAddress *addr){
    LinphoneAddress *fr = linphone_address_clone(addr);
    LinphoneVcard *vcard = NULL;

    linphone_address_clean(fr);
    if (lf->uri != NULL) linphone_address_unref(lf->uri);
    lf->uri = fr;

    vcard = linphone_friend_get_vcard(lf);
    if (vcard) {
        linphone_vcard_edit_main_sip_address(vcard, linphone_address_as_string_uri_only(fr));
    }

    return 0;
}

linphone_address_clone

submodules/linphone/coreapi/address.c:LinphoneAddress * linphone_address_clone(const LinphoneAddress *addr){
   
/**
 * Clones a LinphoneAddress object.
**/
LinphoneAddress * linphone_address_clone(const LinphoneAddress *addr){
    return sal_address_clone(addr);
}

sal_address_clone

submodules/linphone/coreapi/bellesip_sal/sal_address_impl.c:SalAddress * sal_address_clone(const SalAddress *addr){
   
SalAddress * sal_address_clone(const SalAddress *addr){
    return (SalAddress *) belle_sip_object_ref(belle_sip_object_clone(BELLE_SIP_OBJECT(addr)));
}

linphone_address_clean

submodules/linphone/coreapi/address.c:void linphone_address_clean(LinphoneAddress *uri){
submodules/linphone/coreapi/linphonecore.h:LINPHONE_PUBLIC  void linphone_address_clean(LinphoneAddress *uri);
/**
 * Removes address's tags and uri headers so that it is displayable to the user.
**/
void linphone_address_clean(LinphoneAddress *uri){
    sal_address_clean(uri);
}

linphone_friend_get_vcard

LinphoneVcard* linphone_friend_get_vcard(LinphoneFriend *fr) {
    if (fr) {
        return fr->vcard;
    }
    return NULL;
}

linphone_vcard_edit_main_sip_address

submodules/linphone/coreapi/vcard.cc:void linphone_vcard_edit_main_sip_address(LinphoneVcard *vCard, const char *sip_address) {
submodules/linphone/coreapi/vcard_stubs.c:void linphone_vcard_edit_main_sip_address(LinphoneVcard *vCard, const char *sip_address) {
   
void linphone_vcard_edit_main_sip_address(LinphoneVcard *vCard, const char *sip_address) {
    if (!vCard || !sip_address) return;

    if (vCard->belCard->getImpp().size() > 0) {
        const shared_ptr<belcard::BelCardImpp> impp = vCard->belCard->getImpp().front();
        impp->setValue(sip_address);
    } else {
        shared_ptr<belcard::BelCardImpp> impp = belcard::BelCardGeneric::create<belcard::BelCardImpp>();
        impp->setValue(sip_address);
        vCard->belCard->addImpp(impp);
    }
}

linphone_address_as_string_uri_only

/**
 * Returns the SIP uri only as a string, that is display name is removed.
 * The returned char * must be freed by the application. Use ms_free().
**/
char *linphone_address_as_string_uri_only(const LinphoneAddress *u){
    return sal_address_as_string_uri_only(u);
}

sal_address_as_string_uri_only

char *sal_address_as_string_uri_only(const SalAddress *addr){
    belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
    belle_sip_uri_t* sip_uri = belle_sip_header_address_get_uri(header_addr);
    belle_generic_uri_t* absolute_uri = belle_sip_header_address_get_absolute_uri(header_addr);
    char tmp[1024]={
   0};
    size_t off=0;
    belle_sip_object_t* uri;

    if (sip_uri) {
        uri=(belle_sip_object_t*)sip_uri;
    } else if (absolute_uri) {
        uri=(belle_sip_object_t*)absolute_uri;
    } else {
        ms_error("Cannot generate string for addr [%p] with null uri",addr);
        return NULL;
    }
    belle_sip_object_marshal(uri,tmp,sizeof(tmp),&off);
    return ms_strdup(tmp);
}

getAddress

extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_getAddress(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    return (jlong)linphone_friend_get_address((LinphoneFriend*)ptr);
}

linphone_friend_get_address

const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf){
    return lf->uri;
}

setIncSubscribePolicy

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setIncSubscribePolicy(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr
                                                                        ,jint policy) {
    linphone_friend_set_inc_subscribe_policy((LinphoneFriend*)ptr,(LinphoneSubscribePolicy)policy);
}

linphone_friend_set_inc_subscribe_policy

int linphone_friend_set_inc_subscribe_policy(LinphoneFriend *fr, LinphoneSubscribePolicy pol) {
    fr->pol=pol;
    return 0;
}

getIncSubscribePolicy

extern "C" jint Java_org_linphone_core_LinphoneFriendImpl_getIncSubscribePolicy(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    return (jint)linphone_friend_get_inc_subscribe_policy((LinphoneFriend*)ptr);
}

linphone_friend_get_inc_subscribe_policy

LinphoneSubscribePolicy linphone_friend_get_inc_subscribe_policy(const LinphoneFriend *lf){
    return lf->pol;
}

enableSubscribes

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_enableSubscribes(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr
                                                                        ,jboolean value) {
    linphone_friend_enable_subscribes((LinphoneFriend*)ptr,value);
}

linphone_friend_enable_subscribes

int linphone_friend_enable_subscribes(LinphoneFriend *fr, bool_t val){
    fr->subscribe=val;
    return 0;
} 

isSubscribesEnabled

extern "C" jboolean Java_org_linphone_core_LinphoneFriendImpl_isSubscribesEnabled(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    return (jboolean)linphone_friend_subscribes_enabled((LinphoneFriend*)ptr);
}

linphone_friend_subscribes_enabled

submodules/linphone/coreapi/linphonefriend.h:LINPHONE_PUBLIC bool_t linphone_friend_subscribes_enabled(const LinphoneFriend *lf);
submodules/linphone/coreapi/linphonefriend.h:#define linphone_friend_get_send_subscribe linphone_friend_subscribes_enabled
submodules/linphone/coreapi/linphonecore_jni.cc:    return (jboolean)linphone_friend_subscribes_enabled((LinphoneFriend*)ptr);

getStatus

extern "C" jint Java_org_linphone_core_LinphoneFriendImpl_getStatus(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    return (jint)linphone_friend_get_status((LinphoneFriend*)ptr);
}
LinphoneOnlineStatus linphone_friend_get_status(const LinphoneFriend *lf){
    LinphoneOnlineStatus online_status = LinphoneStatusOffline;
    LinphonePresenceBasicStatus basic_status = LinphonePresenceBasicStatusClosed;
    LinphonePresenceActivity *activity = NULL;
    unsigned int nb_activities = 0;

    if (lf->presence != NULL) {
        basic_status = linphone_presence_model_get_basic_status(lf->presence);
        nb_activities = linphone_presence_model_get_nb_activities(lf->presence);
        online_status = (basic_status == LinphonePresenceBasicStatusOpen) ? LinphoneStatusOnline : LinphoneStatusOffline;
        if (nb_activities > 1) {
            char *tmp = NULL;
            const LinphoneAddress *addr = linphone_friend_get_address(lf);
            if (addr) tmp = linphone_address_as_string(addr);
            ms_warning("Friend %s has several activities, get status from the first one", tmp ? tmp : "unknown");
            if (tmp) ms_free(tmp);
            nb_activities = 1;
        }
        if (nb_activities == 1) {
            activity = linphone_presence_model_get_activity(lf->presence);
            switch (linphone_presence_activity_get_type(activity)) {
                case LinphonePresenceActivityBreakfast:
                case LinphonePresenceActivityDinner:
                case LinphonePresenceActivityLunch:
                case LinphonePresenceActivityMeal:
                    online_status = LinphoneStatusOutToLunch;
                    break;
                case LinphonePresenceActivityAppointment:
                case LinphonePresenceActivityMeeting:
                case LinphonePresenceActivityPerformance:
                case LinphonePresenceActivityPresentation:
                case LinphonePresenceActivitySpectator:
                case LinphonePresenceActivityWorking:
                case LinphonePresenceActivityWorship:
                    online_status = LinphoneStatusDoNotDisturb;
                    break;
                case LinphonePresenceActivityAway:
                case LinphonePresenceActivitySleeping:
                    online_status = LinphoneStatusAway;
                    break;
                case LinphonePresenceActivityHoliday:
                case LinphonePresenceActivityTravel:
                case LinphonePresenceActivityVacation:
                    online_status = LinphoneStatusVacation;
                    break;
                case LinphonePresenceActivityBusy:
                case LinphonePresenceActivityLookingForWork:
                case LinphonePresenceActivityPlaying:
                case LinphonePresenceActivityShopping:
                case LinphonePresenceActivityTV:
                    online_status = LinphoneStatusBusy;
                    break;
                case LinphonePresenceActivityInTransit:
                case LinphonePresenceActivitySteering:
                    online_status = LinphoneStatusBeRightBack;
                    break;
                case LinphonePresenceActivityOnThePhone:
                    online_status = LinphoneStatusOnThePhone;
                    break;
                case LinphonePresenceActivityOther:
                case LinphonePresenceActivityPermanentAbsence:
                    online_status = LinphoneStatusMoved;
                    break;
                case LinphonePresenceActivityUnknown:
                    /* Rely on the basic status information. */
                    break;
                case LinphonePresenceActivityOnline:
                    /* Should not happen! */
                    /*ms_warning("LinphonePresenceActivityOnline should not happen here!");*/
                    break;
                case LinphonePresenceActivityOffline:
                    online_status = LinphoneStatusOffline;
                    break;
            }
        }
    }

    return online_status;
}

getPresenceModel

/*
 * Class:     org_linphone_core_LinphoneFriendImpl
 * Method:    getPresenceModel
 * Signature: (J)Ljava/lang/Object;
 */
JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneFriendImpl_getPresenceModel(JNIEnv *env, jobject jobj, jlong ptr) {
    
    LinphoneFriend *lf = (LinphoneFriend *)ptr;
    LinphonePresenceModel *model = (LinphonePresenceModel *)linphone_friend_get_presence_model(lf);
    if (model == NULL) return NULL;
    RETURN_USER_DATA_OBJECT("PresenceModelImpl", linphone_presence_model, model);
}

linphone_friend_get_presence_model

const LinphonePresenceModel * linphone_friend_get_presence_model(LinphoneFriend *lf) {
    return lf->presence;
}

setPresenceModel

/*
 * Class:     org_linphone_core_LinphoneCoreImpl
 * Method:    setPresenceModel
 * Signature: (JILjava/lang/String;J)V
 */
JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneCoreImpl_setPresenceModel(JNIEnv *env, jobject jobj, jlong ptr, jlong modelPtr) {
    LinphoneCore *lc = (LinphoneCore *)ptr;
    LinphonePresenceModel *model = (LinphonePresenceModel *)modelPtr;
    linphone_core_set_presence_model(lc, model);
}

edit

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_edit(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    return linphone_friend_edit((LinphoneFriend*)ptr);
}

linphone_friend_edit

void linphone_friend_edit(LinphoneFriend *fr) {
    if (fr && fr->vcard) {
        linphone_vcard_compute_md5_hash(fr->vcard);
    }
}

done

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_done(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
     linphone_friend_done((LinphoneFriend*)ptr);
}

linphone_friend_done

void linphone_friend_done(LinphoneFriend *fr) {
    ms_return_if_fail(fr);
    if (!fr->lc || !fr->friend_list) return;
    linphone_friend_apply(fr, fr->lc);
    linphone_friend_save(fr, fr->lc);

    if (fr && fr->vcard) {
        if (linphone_vcard_compare_md5_hash(fr->vcard) != 0) {
            ms_debug("vCard's md5 has changed, mark friend as dirty");
            fr->friend_list->dirty_friends_to_update = ms_list_append(fr->friend_list->dirty_friends_to_update, linphone_friend_ref(fr));
        }
    }
}

getCore

extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_getCore(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong chatroom_ptr){
    
    LinphoneCore *lc=linphone_chat_room_get_core((LinphoneChatRoom*)chatroom_ptr);
    LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc);
    jobject core = ljb->getCore();
    return core;
}

setRefKey

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setRefKey(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr
                                                                        ,jstring jkey) {
    const char* key = env->GetStringUTFChars(jkey, NULL);
    linphone_friend_set_ref_key((LinphoneFriend*)ptr,key);
    env->ReleaseStringUTFChars(jkey, key);
}

linphone_friend_set_ref_key

void linphone_friend_set_ref_key(LinphoneFriend *lf, const char *key){
    if (lf->refkey != NULL) {
        ms_free(lf->refkey);
        lf->refkey = NULL;
    }
    if (key) {
        lf->refkey = ms_strdup(key);
    }
    if (lf->lc) {
        linphone_friend_save(lf, lf->lc);
    }
}

getRefKey

extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getRefKey(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    const char * key = linphone_friend_get_ref_key((LinphoneFriend *)ptr);
    return key ? env->NewStringUTF(key) : NULL;
}

setName

extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setName(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr
                                                                        ,jstring jname) {
    const char* name = env->GetStringUTFChars(jname, NULL);
    linphone_friend_set_name((LinphoneFriend*)ptr, name);
    env->ReleaseStringUTFChars(jname, name);
}

getName

extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getName(JNIEnv*  env
                                                                        ,jobject  thiz
                                                                        ,jlong ptr) {
    const char *name = linphone_friend_get_name((LinphoneFriend*)ptr);
    return name ? env->NewStringUTF(name) : NULL;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/AdrianAndroid/article/details/52135088

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签