CN116737670A - Upf文件的删除方法、装置、设备及存储介质 - Google Patents

Upf文件的删除方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN116737670A
CN116737670A CN202311009310.5A CN202311009310A CN116737670A CN 116737670 A CN116737670 A CN 116737670A CN 202311009310 A CN202311009310 A CN 202311009310A CN 116737670 A CN116737670 A CN 116737670A
Authority
CN
China
Prior art keywords
upf
member variable
deleting
class
deleted
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202311009310.5A
Other languages
English (en)
Other versions
CN116737670B (zh
Inventor
王仑
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Innoda Chengdu Electronic Technology Co ltd
Original Assignee
Innoda Chengdu Electronic Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Innoda Chengdu Electronic Technology Co ltd filed Critical Innoda Chengdu Electronic Technology Co ltd
Priority to CN202311009310.5A priority Critical patent/CN116737670B/zh
Publication of CN116737670A publication Critical patent/CN116737670A/zh
Application granted granted Critical
Publication of CN116737670B publication Critical patent/CN116737670B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种UPF文件的删除方法、装置、设备及存储介质,方法包括:在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,起始删除对象以外的任一UPF类对象为同一UPF类对象直接或间接包含的成员变量;删除起始删除对象的UPF数据;从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。本申请能够通过遍历访问所有UPF类对象,实现原有UPF数据的全局删除,为重新加载UPF文件提供便利,提升集成电路的设计效率。

Description

UPF文件的删除方法、装置、设备及存储介质
技术领域
本申请属于集成电路设计技术领域,尤其涉及一种UPF文件的删除方法、装置、设备及存储介质。
背景技术
电子设计自动化(Electronic design automation,简称EDA)是指利用计算机辅助设计软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
UPF文件(Unified Power Format,统一低功耗标准)是基于低功耗集成电路设计验证标准(IEEE Std 1801-2018™),由设计人员提供的用以实现低功耗设计的低功耗电源描述文件。
EDA软件在读入UPF文件后会创建相关联的信息,但在需要更新UPF文件的情况下,通常需要将EDA软件中与UPF文件相关联的数据进行清理后,才能重新读入更新后的UPF文件。然而,上述与UPF文件相关联的数据十分庞大、混乱,无法保障全部有效清除。因此,更新UPF文件通常采用重新启动EDA软件、重新加载UPF文件的方式来实现,而重启EDA软件耗时较长,影响总体设计效率。
发明内容
本申请实施例提供一种UPF文件的删除方法、装置、设备及存储介质,能够改善EDA软件中清理已读入的UPF文件耗时较长的技术问题。
第一方面,本申请实施例提供一种UPF文件的删除方法,在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,起始删除对象以外的任一UPF类对象为同一UPF类对象直接或间接包含的成员变量;
删除起始删除对象的UPF数据;
从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
在一些实施例中,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据,包括:
确定每个第一成员变量直接包含的第二成员变量;
在第一成员变量未包含第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据;删除检验函数用于在第一成员变量对应的UPF类对象为第一次访问时删除对应的UPF数据;
在第一成员变量包含至少一个第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据,并将每个第二成员变量作为新的第一成员变量,返回执行步骤:确定每个第一成员变量直接包含的第二成员变量,直至遍历所有成员变量。
在一些实施例中,通过删除检验函数删除第一成员变量包含的UPF数据,包括:
获取第一成员变量的UPF指针;
将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录;
在删除记录容器中包含第一成员变量的删除记录时,将UPF指针置空;
在删除记录容器中未包含第一成员变量的删除记录时,删除UPF指针。
在一些实施例中,将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录,包括:
将UPF指针插入删除记录容器;
在插入成功时,确定删除记录容器中未包含第一成员变量的删除记录;其中,插入删除记录容器的UPF指针用于作为第一成员变量的删除记录;
在插入失败时,确定删除记录容器中包含第一成员变量的删除记录。
在一些实施例中,将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录,包括:
判断删除记录容器是否为空;
在删除记录容器为空的情况下,删除UPF指针,并将UPF指针置为空;
在删除记录容器不为空的情况下,将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录。
在一些实施例中,在删除记录容器中未包含第一成员变量的删除记录时,删除UPF指针之后,还包括:
在第一成员变量具有保存第二成员变量的成员变量容器、第二成员变量直接或间接包含的成员变量均遍历完成时,删除成员变量容器中的元素,并将成员变量容器置空。
在一些实施例中,UPF文件的删除方法还包括:
在获取UPF文件单体删除命令时,确定用户指定的目标UPF类对象;
删除目标UPF类对象对应的成员变量容器中的元素,并将目标UPF类对象对应的成员变量容器置空。
在一些实施例中,在获取UPF文件单体删除命令时,确定用户指定的目标UPF类对象之前,还包括:
创建第一析构函数;第一析构函数用于在传入参数为空时,执行步骤:确定用户指定的目标UPF类对象;在传入参数为删除记录容器的指针时,执行步骤:从多个UPF类对象中确定起始删除对象;
获取用户触发的删除命令;
在删除命令为UPF文件单体删除命令时,调用传入参数为空的第一析构函数;
在删除命令为UPF文件全局删除命令时,调用传入参数为删除记录容器的指针的第一析构函数。
在一些实施例中,传入参数为删除记录容器的指针的第一析构函数用于调用删除检验函数遍历删除所有UPF类对象;
传入参数为空的第一析构函数用于调用delete运算符删除目标UPF类对象对应的成员变量容器中的元素。
在一些实施例中,通过删除检验函数删除第一成员变量包含的UPF数据之前,还包括:
确定第一成员变量对应的基类成员变量;
通过删除检验函数删除基类成员变量包含的UPF数据;
将每个基类成员变量作为新的第一成员变量,返回执行步骤:确定每个第一成员变量直接包含的第二成员变量,直至基类成员变量为所有UPF类对象共同的基类成员变量。
在一些实施例中,其特征在于,多个UPF类对象中的任一个UPF类对象继承于基类upfBaseT。
在一些实施例中,其特征在于,起始删除对象对应的UPF类对象为程序的单例。
在一些实施例中,其特征在于,直至遍历并删除所有UPF类对象的UPF数据之后,还包括:
在获取UPF文件重新读入命令时,读入更新后的UPF文件。
第二方面,本申请实施例提供了一种UPF文件的删除装置,包括:
获取模块,用于在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,起始删除对象以外的任一UPF类对象为起始删除对象直接或间接包含的成员变量;
起始模块,用于删除起始删除对象的UPF数据;
遍历模块,用于从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
第三方面,本申请实施例提供了一种UPF文件的删除设备,该UPF文件的删除设备包括:
处理器以及存储有计算机程序指令的存储器;
处理器执行计算机程序指令时实现上述第一方面的UPF文件的删除方法的步骤。
第四方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器执行时实现上述第一方面的UPF文件的删除方法的步骤。
第五方面,本申请实施例提供了一种计算机程序产品,计算机程序产品包括计算机程序,计算机程序被处理器执行时实现上述第一方面的UPF文件的删除方法的步骤。
本申请实施例的UPF文件的删除方法、装置、设备及存储介质,通过获取用户触发的UPF文件全局删除命令,可以从多个UPF类对象中确定起始删除对象。通过删除起始删除对象的UPF数据,以及从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,可以从起始删除变量开始实现所有UPF类对象的遍历访问,并在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。本申请的有益效果为,每个UPF类对象仅在被第一次访问时删除UPF数据,不会在重复访问的过程中发生误删除,从而能够避免重复删除同一UPF类对象引发的程序报错、崩溃的问题。并且,通过遍历删除的方式能够保障所有UPF类对象均被访问,从而能够为重新加载UPF文件提供便利,避免重新启动EDA软件,提升集成电路的设计效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单的介绍,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一个实施例提供的UPF文件的删除方法的流程示意图;
图2是本申请另一个实施例提供的UPF文件的删除方法的流程示意图;
图3是本申请又一个实施例提供的UPF文件的删除方法的流程示意图;
图4是本申请一个实施例提供的UPF文件的删除方法的部分流程示意图;
图5是本申请另一个实施例提供的UPF文件的删除方法的部分流程示意图;
图6是本申请又一个实施例提供的UPF文件的删除方法的部分流程示意图;
图7是本申请再一个实施例提供的UPF文件的删除方法的部分流程示意图;
图8是本申请一个实施例提供的UPF文件的删除方法的部分流程示意图;
图9是本申请另一个实施例提供的UPF文件的删除方法的部分流程示意图;
图10是本申请再一个实施例提供的UPF文件的删除方法的流程示意图;
图11是本申请一个实施例提供的多个UPF类对象之间的关系抽象图;
图12是本申请一个实施例提供的UPF文件的删除装置的结构示意图;
图13是本申请一个实施例提供的UPF文件的删除设备的结构示意图。
具体实施方式
下面将详细描述本申请的各个方面的特征和示例性实施例,为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及具体实施例,对本申请进行进一步详细描述。应理解,此处所描述的具体实施例仅意在解释本申请,而不是限定本申请。对于本领域技术人员来说,本申请可以在不需要这些具体细节中的一些细节的情况下实施。下面对实施例的描述仅仅是为了通过示出本申请的示例来提供对本申请更好的理解。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。
电子设计自动化(Electronic design automation,简称EDA)是指利用计算机辅助设计软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
UPF文件(Unified Power Format,统一低功耗标准)是基于低功耗集成电路设计验证标准(IEEE Std 1801-2018™),由设计人员提供的用以实现低功耗设计的低功耗电源描述文件。
EDA软件在读入UPF文件后会创建相关联的信息,但在需要更新UPF文件的情况下,通常需要将EDA软件中与UPF文件相关联的数据进行清理后,才能重新读入更新后的UPF文件。然而,上述与UPF文件相关联的数据十分庞大、混乱,无法保障全部有效清除。因此,更新UPF文件通常采用重新启动EDA软件、重新加载UPF文件的方式来实现,而重启EDA软件耗时较长,影响总体设计效率。
为了解决上述至少一个技术问题,本申请实施例提供了一种UPF文件的删除方法、装置、设备及存储介质。下面首先对本申请实施例所提供的UPF文件的删除方法进行介绍。
图1示出了本申请一个实施例提供的UPF文件的删除方法的流程示意图。该方法可以包括以下步骤:
S110,在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,起始删除对象以外的任一UPF类对象为同一UPF类对象直接或间接包含的成员变量;
S120,删除起始删除对象的UPF数据;
S130,从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
本申请实施例中提供的UPF文件的删除方法,可以应用于UPF文件的删除装置中,该装置可以将EDA软件中与UPF文件相关联的数据进行清理,以便于重新加载UPF文件。该装置可以是PC、电视、智能终端或者平板电脑等等。本实施例中不对装置的具体形式进行限定。
在集成电路设计过程中,EDA软件会读取RTL(Raster Transfer Language,硬件描述语言)文件以及描述电源低功耗设计意图的UPF文件,并结合上述文件进行电源状态控制相关的低功耗管理策略的验证,从而在设计早期及时发现芯片设计问题,确保设计的准确性,缩短开发周期,减少设计迭代。其中,UPF文件的主要内容可以包括对电压域的声明、对各电源端口的描述、对隔离单元的描述、对电压转换单元的描述以及对电源端口状态的声明等。
相关技术中,UPF文件读入的数据可以保存到EDA软件中,同时会创建一些数据保存在HDL解析器。EDA软件保存的UPF数据以及保存在HDL解析器中的数据与HDL解析器建立联系,使得数据可以互通,并将该链接关系以字符串的形式保存到HDL解析器中保存属性的容器。
在EDA软件在读入upf文件并创建相关联信息后,缺乏对upf类对象进行清除的功能。因此,在需要对upf文件进行更新时,通常需要借助重新启动EDA软件来实现更新后的upf文件的读入。然而,在重新启动EDA软件的过程中,需要重新读取的不仅仅是upf文件,还包括RTL、文件及其他文件,因此,重新启动EDA软件将会耗费大量时间,影响总体设计效率。
在本实施例中,通过获取用户触发的UPF文件全局删除命令,可以从多个UPF类对象中确定起始删除对象。通过删除起始删除对象的UPF数据,以及从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,可以从起始删除变量开始实现所有UPF类对象的遍历访问,并在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。每个UPF类对象仅在被第一次访问时删除UPF数据,不会在重复访问的过程中发生误删除,从而能够避免重复删除同一UPF类对象引发的程序报错、崩溃的问题。并且,通过遍历删除的方式能够保障所有UPF类对象均被访问,从而能够为重新加载UPF文件提供便利,避免重新启动EDA软件,提升集成电路的设计效率。
在S110中,EDA软件已读入upf文件,并解析得到相应的upf类对象。此时,用户可以触发UPF文件全局删除命令。EDA软件在获取到用户触发的UPF文件全局删除命令后,可以从多个UPF类对象中确定起始删除对象。
上述起始删除对象可以是多个UPF类对象的其中一个UPF类对象。在多个UPF类对象中,除该起始删除对象以外的其他任一个UPF类对象均为同一UPF类对象所直接包含的成员变量或间接包含的成员变量。其中,该同一UPF类对象可以与起始删除对象不一致。例如,upfBaseT为所有upf类对象的基类,即任一UPF类对象均为upfBaseT的单层子类或多层子类。而起始删除对象则可以选择upfDesignT。
upfDesignT类的对象中保存了概念上较为抽象的upf数据,可以将其划分为第一upf类。这部分第一upf类能够与所有的upf类对象构建起连接关系,从而形成upf类对象层级结构。例如,该部分第一upf类的成员变量包含了大量第二upf类,这些第二upf类的成员变量又保存了其他的第二upf类,形成一种层级结构。因此,在确定起始删除对象时,upfDesignT可以作为较佳选择。
需要说明的是,每个UPF类对象可以在编译阶段中设定其直接包含的成员变量。以起始删除对象为例,在编译阶段中,可以设定起始删除对象包含三个成员变量,分别为成员变量A、成员变量B和成员变量C。上述成员变量A、成员变量B和成员变量C均为多个UPF类对象的其中一个。
在编译阶段中,起始删除对象所包含的每个成员变量还可以设定为包含其他的成员变量,例如,成员变量A可以包含两个成员变量,分别为成员变量B和成员变量D。
由上述包含关系可知,成员变量A和成员变量C为起始删除对象直接包含的成员变量。成员变量D为起始删除对象直接包含的成员变量A所包含的成员变量,即成员变量D为起始删除对象间接包含的成员变量。而成员变量B,其可以是起始删除对象直接包含,也可以是起始删除对象直接包含的成员变量A所包含,即,成员变量B既是起始删除对象直接包含的成员变量,也是起始删除对象间接包含的成员变量。
在编译阶段中,可以对应设置多个UPF类对象之间的包含关系,以使得除起始删除对象以外的任一UPF类对象能够作为同一UPF类对象直接或间接包含的成员变量。
在S120中,在从多个UPF类对象中确定对应的起始删除对象后,可以删除起始删除对象的UPF数据。
在S130中,在确定起始删除对象直接包含的成员变量后,可以从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据。并且,在遍历过程中,若对某个UPF类对象进行至少两次访问,则仅在对其进行第一次访问时删除该UPF类对象对应的UPF数据。
在起始删除对象直接包含多个成员变量时,可以分别对每个成员变量执行特定的删除操作,该特定的删除操作能够删除该成员变量所包含的UPF数据及其直接包含的所有成员变量的UPF数据。并且,对于每个成员变量直接包含的各个成员变量,也可以执行该特定删除操作,以进一步删除起始删除对象间接包含的成员变量的UPF数据。例如,以起始删除对象包含成员变量A、成员变量B和成员变量C为例,针对成员变量A,可以删除成员变量A的UPF数据以及成员变量A所包含的成员变量B和成员变量D的UPF数据。在从成员变量A开始访问到成员变量B和成员变量D后,可以删除成员变量B的UPF数据以及成员变量B直接包含的成员变量的UPF数据、成员变量D的UPF数据以及成员变量D直接包含的成员变量的UPF数据。即,成员变量B和成员变量D作为起始删除对象通过成员变量A间接包含的成员变量,能够在删除成员变量A的UPF数据后对成员变量B和成员变量D进行访问,并删除成员变量B和成员变量D的UPF数据。并且,在成员变量B和成员变量D存在直接包含的成员变量时,还可以继续对该部分直接包含的成员变量进行遍历访问,直至对成员变量A所直接包含和间接包含的全部成员变量均访问完毕。
在成员变量A所直接包含和间接包含的全部成员变量均访问完毕后,可以对起始删除对象所直接包含的下一个成员变量进行访问,即成员变量B。由于成员变量B作为成员变量A直接包含的成员变量,已经进行至少一次访问。在成员变量B作为起始删除对象直接包含的成员变量时,该成员变量B为非第一次访问。由于多个UPF类对象中的每个UPF类对象的UPF数据仅在第一次访问时进行删除,在后续非第一次访问时,由于该UPF类对象的UPF数据已经被删除,不再重复删除该UPF类对象的UPF数据。
在成员变量B作为成员变量A直接包含的成员变量的访问过程中,已经对成员变量B直接或间接包含的所有成员变量进行访问。则在成员变量B作为起始删除对象直接包含的成员变量的访问过程中,该成员变量B及其直接或间接包含的所有成员变量均非第一次访问。因此,在成员变量B作为起始删除对象直接包含的成员变量的访问过程中,由于成员变量B及其直接或间接包含的所有成员变量的UPF数据均已在第一次访问时进行删除,不再对成员变量B及其直接或间接包含的所有成员变量的UPF数据进行重复删除。
需要说明的是,由于在编译阶段中已经设定除起始删除对象以外的任一UPF类对象均为起始删除对象直接或间接包含的成员变量。在从起始删除对象直接包含的成员变量开始,对每个成员变量进行本身的UPF数据的删除和直接包含的成员变量的UPF数据的删除的遍历操作后,能够对多个UPF类对象中的任一UPF类对象进行至少一次访问。由于对每个UPF类对象进行第一次访问时能够删除其对应的UPF数据,在任一UPF类对象均至少进行一次访问的基础上,能够实现所有UPF类对象的UPF数据的删除。
在上述例举的起始删除对象包含成员变量A、成员变量B和成员变量C中,成员变量A、成员变量B和成员变量C作为起始删除对象直接包含的成员变量的访问过程的先后顺序可以相互交换,在此不做限制。
请参照图2,作为一种可选的实施例,上述删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据,可以包括:
S210,确定每个第一成员变量直接包含的第二成员变量;
S220,在第一成员变量未包含第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据;删除检验函数用于在第一成员变量对应的UPF类对象为第一次访问时删除对应的UPF数据;
S230,在第一成员变量包含至少一个第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据,并将每个第二成员变量作为新的第一成员变量,返回执行S210:确定每个第一成员变量直接包含的第二成员变量,直至遍历所有成员变量。
在本实施例中,通过将每个成员变量作为第一成员变量,确定其直接包含的第二成员变量后,可以通过删除检验函数对第二成员变量包含的UPF数据进行重复删除检验后删除,以使得UPF类对象的UPF数据不会被重复删除,避免了重复删除所引发的程序异常。并且,删除检验函数也可以对第一成员变量本身包含的UPF数据进行重复删除检验后删除。通过对各个UPF类对象进行轮询遍历,可以实现所有UPF类对象的UPF数据删除。
在S210中,在确定起始删除对象直接包含的成员变量后,可以将每个起始删除对象直接包含的成员变量作为第一成员变量,并确定每个第一成员变量直接包含的第二成员变量。
上述第一成员变量与第二成员变量为互相对应的关系,多个UPF类对象中第一成员变量与第二成员变量的对应关系可以为预先设置。以两个成员变量为例,两个成员变量的其中一个成员变量是通过继承创建的新类,该新类可以被称为“子类”或“派生类”,而另一个成员变量则是被继承的类,该被继承的类可以被称为“基类”、“父类”或“超类”。以成员变量X和成员变量Y为例,成员变量X是通过继承成员变量Y创建的新类,则成员变量X为成员变量Y的子类,成员变量Y为成员变量X的父类。此时可以确定成员变量Y直接包含成员变量X,即,在成员变量Y为第一成员变量时,成员变量X可以作为第一成员变量直接包含的第二成员变量。
每个第一成员变量所直接包含的第二成员变量的数量并未进行限制。例如,在多个UPF类对象中,可能存在一部分UPF类对象没有子类,另一部分UPF类仅有一个子类,还有一部分UPF类包含多个子类。则针对没有子类的UPF对象,在其作为第一成员变量时,可以不包含第二成员变量;针对仅有一个子类的UPF对象,在其作为第一成员变量时,包含的第二成员变量即为对应的子类;针对包含多个子类的UPF对象,在其作为第一成员变量时,包含的多个第二成员变量分别为该UPF对象的多个子类。
作为一种可选的实施方式,在将某个UPF类对象作为第一成员变量时,该UPF类对象的子类可以作为第一成员变量对应的第二成员变量。并且,与该UPF类对象没有继承关系的其他UPF类对象也可以作为该第一成员变量对应的第二成员变量。例如,成员变量Z与成员变量Y相互之间没有继承的关系,但在预先设置成员变量Y作为第一成员变量对应的第二成员变量时,可以将成员变量Z作为成员变量Y包含的第二成员变量。因此,在某个UPF类对象作为第一成员变量时,其所包含的第二成员变量可以为该UPF类对象的子类,也可以是与该UPF类对象没有继承关系的其他UPF类对象。
请参照图3,作为一种可选的实施例,上述S220之前,可以包括:
S310,确定第一成员变量对应的基类成员变量;
S320,通过删除检验函数删除基类成员变量包含的UPF数据;
S330,将每个基类成员变量作为新的第一成员变量,返回执行S210:确定每个第一成员变量直接包含的第二成员变量,直至基类成员变量为所有UPF类对象共同的基类成员变量。
在本实施例中,通过确定第一成员变量对应的基类成员变量,可以利用删除检验函数删除基类成员变量包含的UPF数据。针对第一成员变量的基类成员变量,也会继续寻找该基类成员变量上一级的基类成员变量,并删除上一级的基类成员变量包含的UPF数据,最终在查询到所有UPF类对象共同的基类成员变量upfBaseT后停止。由于通过任一第一成员变量均能够通过不断查询上一级的基类成员变量访问到upfBaseT。而所有UPF类对象均为upfBaseT的单层或多层子类,则upfBaseT可以直接包含或间接包含所有UPF类对象,在遍历到达upfBaseT后,即可即通过upfBaseT遍历访问到所有UPF类对象。
在S310中,在将某个成员变量作为第一成员变量后,可以确定第一成员变量对应的基类成员变量。
以起始删除对象为例,在将起始删除对象直接包含的成员变量作为第一成员变量时,该第一成员变量对应的基类成员变量即为起始删除对象。例如,在起始删除对象直接包含成员变量A、成员变量B和成员变量C时,将成员变量A作为第一成员变量,可以确定该第一成员变量的基类成员变量。
在成员变量A直接包含成员变量B和成员变量D时,由于成员变量B为某个UPF类对象的子类,在将成员变量B作为第一成员变量时,可以确定该成员变量B的基类成员变量为该UPF类对象;而在将成员变量D作为第一成员变量时,也可以确定该成员变量D的基类成员变量。即,在将某个成员变量所直接包含的成员变量作为第一成员变量时,可以确定该第一成员变量的基类成员变量。该第一成员变量的基类成员变量可能是起始删除对象,也可能是其他UPF类对象。
上述成员变量B既可以是起始删除对象间接包含的成员变量,也可以是起始删除对象直接包含的成员变量,成员变量B作为第一成员变量,可以确定其对应的基类成员变量。
在S320中,在确定第一成员变量对应的基类成员变量后,可以通过删除检验函数对该基类成员变量的UPF数据进行删除。其中,删除检验函数能够检验该成员变量是否为第一次访问,并在该成员变量为第一次访问时,删除该成员变量对应的UPF数据,以避免对同一UPF类对象进行多次访问时重复删除所引发的异常。
在S330中,在删除该基类成员变量的UPF数据后,可以将该基类成员变量作为新的第一成员变量,同时对每个新的第一成员变量重新确定其直接包含的第二成员变量,在不断将第一成员变量的上一级基类成员变量作为新的第一成员变量后,最终能够遍历到所有UPF类对象共同的基类成员变量。例如,所有UPF类对象均为upfBaseT的单层或多层子类,则upfBaseT可以直接包含或间接包含所有UPF类对象,即upfBaseT为所有UPF类对象共同的基类成员变量。在遍历到达upfBaseT后,以upfBaseT作为第一成员变量,其他任一UPF类对象均为upfBaseT直接包含或间接包含,则通过upfBaseT即可遍历访问到所有UPF类对象。
在S220中,针对每个第一成员变量,可以根据该第一成员变量是否直接包含至少一个第二成员变量分别执行不同的操作步骤。在第一成员变量未包含第二成员变量时,可以通过删除检验函数删除该第一成员变量所包含的UPF数据。同样地,通过上述删除检验函数,能够在访问该第一成员变量对应的UPF类对象时,判断是否为第一次访问,并在确定第一次访问该UPF类对象时删除对应的UPF数据。
由于该第一成员变量不包含第二成员变量,仅对第一成员变量进行UPF数据删除即可。
在S230中,在第一成员变量直接包含至少一个第二成员变量时,可以通过删除检验函数删除该第一成员变量所包含的UPF数据。并将每个第二成员变量作为新的第一成员变量,同时对每个新的第一成员变量重新确定其直接包含的第二成员变量,直至采用上述遍历方式遍历所有UPF对象分别对应的成员变量。
以起始删除对象直接包含成员变量A、成员变量B和成员变量C为例,在将成员变量A作为第一成员变量,并确定成员变量A包含成员变量B和成员变量D两个第二成员变量时,可以通过删除检验函数删除成员变量A包含的UPF数据,并将成员变量B和成员变量D分别作为新的第一成员变量,继续确定每个新的第一成员变量直接包含的第二成员变量。
在新的第一成员变量包含至少一个成员变量,例如成员变量B包含至少一个成员变量时,可以通过删除检验函数删除成员变量B包含的UPF数据,并继续将成员变量B包含的成员变量作为新的第一成员变量,以使得成员变量B直接包含或间接包含的成员变量均在此次遍历过程中被访问到至少一次。
在新的第一成员变量未包含成员变量,例如成员变量D不包含成员变量时,可以通过删除检验函数删除成员变量D包含的UPF数据。
上述成员变量B与成员变量D作为第一成员变量进行遍历访问的顺序可以先后互换,在此不做限制。若成员变量D先作为第一成员变量,在通过删除检验函数删除成员变量D包含的UPF数据后,表示成员变量D对应的遍历路径结束,此时可以将成员变量B作为第一成员变量进行遍历访问。
同样地,在成员变量A仅包含成员变量B和成员变量D,并且成员变量D与成员变量B对应的遍历路径结束后,表示成员变量A的遍历路径结束。此时可以将起始删除对象直接包括的其他成员变量作为新的第一成员变量,继续完成起始删除对象直接包括的其他成员变量的遍历路径,直至完成所有UPF类对象的遍历访问。
请参照图4,作为一种可选的实施例,上述通过删除检验函数删除第一成员变量包含的UPF数据,可以包括:
S410,获取第一成员变量的UPF指针;
S420,将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录;
S430,在删除记录容器中包含第一成员变量的删除记录时,将UPF指针置空;
S440,在删除记录容器中未包含第一成员变量的删除记录时,删除UPF指针。
在本实施例中,通过删除检验函数可以将第一成员变量的UPF指针与删除记录容器中存储的指针进行比较,根据比较结果得到该第一成员变量的删除记录。若删除记录容器中未包含删除记录,则删除UPF指针;若删除记录容器中包含删除记录,则为了避免重复删除,可以仅将UPF指针置空。通过删除检验函数即可避免UPF数据被重复删除。
在S410中,通过删除检验函数删除第一成员变量包含的UPF数据的过程中,可以在确定第一成员变量对应的UPF类对象后,获取该第一成员变量的UPF指针,该UPF指针能够用于指示UPF数据在内存中的位置。
在S420中,在获取到第一成员变量的UPF指针后,可以将该UPF指针与删除记录容器中存储的指针进行比较,以得到第一成员变量在此次之前是否存在删除记录。
第一成员变量对应的UPF类对象在遍历过程中可能被访问超过一次。在第一次访问某个UPF类对象时,将该UPF类对象的UPF指针与删除记录容器中存储的指针进行比较,可以确定该UPF类对象在此之前不存在删除记录,因此在第一次访问时可以对UPF指针进行删除。而在非第一次访问某个UPF类对象时,将该UPF类对象的UPF指针与删除记录容器中存储的指针进行比较,可以确定该UPF类对象在此之前已经存在删除记录,此时若重复删除该UPF指针可能发生报错等异常,因此,在非第一次访问时,不再删除该UPF指针,而是将该UPF指针置空。
请参照图5,作为一种可选的实施例,上述S420,可以包括:
S510,将UPF指针插入删除记录容器;
S520,在插入成功时,确定删除记录容器中未包含第一成员变量的删除记录;其中,插入删除记录容器的UPF指针用于作为第一成员变量的删除记录;
S530,在插入失败时,确定删除记录容器中包含第一成员变量的删除记录。
在本实施例中,通过UPF指针插入删除记录容器的操作可以实现删除记录的判断以及删除记录的插入。若UPF指针插入成功,则表示删除记录容器中此前并未包含第一成员变量的删除记录,并且,插入成功的UPF指针即可被保存在删除记录容器中作为删除记录。相反地,若UPF指针插入失败,则表示在此之前已将该UPF指针插入删除记录容器中,即删除记录容器中已存在相应的删除记录。
在S510中,将UPF指针与删除记录容器中存储的指针进行比较的实施方式可以是通过指针插入操作,将UPF指针插入删除记录容器,并判断指针插入操作是否插入成功。
在UPF类对象被第一次访问时,删除记录容器中未保存该UPF类对象的UPF指针,能够将UPF指针插入删除记录容器,此时指针插入操作成功;在UPF类对象被非第一次访问时,删除记录容器中已经保存有第一次访问过程中插入的UPF指针,此时指针插入操作失败。根据指针插入操作的结果即可确定删除记录容器中是否包含该第一成员变量对应的UPF类对象的UPF指针的删除记录。
在S520中,在指针插入操作成功时,可以确定删除记录容器中未保存该UPF类对象的UPF指针,也即该第一成员变量对应的UPF类对象为第一次访问,删除记录容器中未包含该第一成员变量的删除记录。
需要说明的是,指针插入操作成功表示该UPF指针已经被插入删除记录容器中,此时删除记录容器中存储的UPF指针即可作为该第一成员变量的删除记录。在后续对该UPF类对象进行第二次访问或更多次访问时,由于删除记录容器中已存储该UPF类对象的UPF指针,指针插入操作将会失败。
在S530中,在指针插入操作失败时,表示删除记录容器中已经保存有该第一成员变量对应的UPF类对象的UPF指针,即,删除记录容器中包含第一成员变量的删除记录。
请参照图6,作为一种可选的实施例,上述S420,可以包括:
S610,判断删除记录容器是否为空;
S620,在删除记录容器为空的情况下,删除UPF指针,并将UPF指针置为空;
S630,在删除记录容器不为空的情况下,将UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录。
在本实施例中,在进行UPF指针的插入操作之前,需要判断删除记录容器是否为空,在删除记录容器不为空的情况下才能够执行UPF指针的插入操作,以实现删除记录的获取。在删除记录容器为空的情况下,UPF指针无法执行相应的插入操作,此时仅能够删除UPF指针,并将UPF指针置为空。
在S610中,在将UPF指针与删除记录容器中存储的指针进行比较之前,还需要判断删除记录容器是否为空。若删除记录容器不为空,则可以正常实现UPF指针的插入操作,并根据插入操作的结果确定删除记录容器中是否包含有对应的第一成员变量的删除记录。相反地,若删除记录容器为空,则删除记录容器无法实现UPF指针的插入和保存。
在S620中,在删除记录容器为空时,无法实现UPF指针的插入操作,因此无法确定第一成员变量是否在删除记录容器中保存有删除记录,此时无法通过删除检验函数实现UPF指针的重复删除检验,仅能够将UPF指针进行删除并置空。
由于删除记录容器为空时无法实现UPF指针的重复删除检验,因此,在删除记录容器为空时,无法实现所有UPF类对象的全部删除,而仅能够实现单个指定UPF类对象的指定删除。
在S630中,在删除记录容器不为空时,可以实现UPF指针的插入操作以将UPF指针保存至删除记录容器。此时可以执行从起始删除对象开始的遍历过程,并将遍历过程中每个第一成员变量对应的UPF指针与删除记录容器中存储的指针进行比较,以得到第一成员变量的删除记录,从而避免对同一UPF类对象进行重复删除。
在S430中,在指针插入操作的结果为插入失败时,可以确定删除记录容器中已经包含该第一成员变量的删除记录,该第一成员变量对应的UPF类对象并非被第一次访问。由于该UPF类对象在被第一次访问时,已经将UPF指针进行删除,因此在非第一次访问时,为了避免重复删除导致EDA软件发生报错、崩溃等异常,不再重复删除该UPF指针,而是将该UPF指针进行置空。
在S440中,在指针插入操作的结果为插入成功时,可以确定删除记录容器未包含该第一成员变量的删除记录,该第一成员变量对应的UPF类对象为第一次访问。此时可以将该UPF类对象的UPF指针进行删除。
请参照图7,作为一种可选的实施例,上述S440之后,还可以包括:
S710,在第一成员变量具有保存第二成员变量的成员变量容器、第二成员变量直接或间接包含的成员变量均遍历完成时,删除成员变量容器中的元素,并将成员变量容器置空。
在本实施例中,在第一成员变量直接包含有至少一个第二成员变量时,该第一成员变量应当具有保存第二成员变量实例化后的元素的成员变量容器。在从第一成员变量对应的遍历路径中对第二成员变量直接或间接包含的所有成员变量均遍历完成,即第二成员变量及其直接或间接包含的所有成员变量均进行至少一次访问后,可以将保存该第二成员变量的成员变量容器中的元素进行删除,并将该成员变量容器置空。
以起始删除对象直接包含成员变量A、成员变量B和成员变量C为例,在将成员变量A作为第一成员变量,并确定成员变量A包含成员变量B和成员变量D两个第二成员变量时,可以先后对成员变量B和成员变量D进行遍历,成员变量B和成员变量D的遍历先后顺序在此不做限制。
在成员变量A中包含成员变量B和成员变量D两个第二成员变量时,成员变量A应当具有至少两个成员变量容器,分别用于保存成员变量B实例化后的元素和成员变量D实例化后的元素。以先遍历成员变量D为例,在遍历成员变量D及其直接或间接包含的所有成员变量后,可以删除保存成员变量D实例化后的元素的成员变量容器并将该成员变量容器置空。同样地,在遍历成员变量B及其直接或间接包含的所有成员变量后,可以删除保存成员变量B实例化后的元素的成员变量容器并将该成员变量容器置空。
请参照图8,作为一种可选的实施例,上述UPF文件的删除方法还可以包括:
S810,在获取UPF文件单体删除命令时,确定用户指定的目标UPF类对象;
S820,删除目标UPF类对象对应的成员变量容器中的元素,并将目标UPF类对象对应的成员变量容器置空。
在本实施例中,EDA软件还能够实现UPF文件单体删除,用户可以通过触发UPF文件单体删除命令目标UPF类对象的指定。EDA软件可以在UPF文件单体删除命令下,仅删除目标UPF类对象对应的成员变量容器中的元素,并将目标UPF类对象对应的成员变量容器置空,而不对其他的UPF类对象进行访问和删除。
在S810中,UPF文件的删除方法还可以是EDA软件已读入upf文件,并解析得到相应的upf类对象后,由用户触发UPF文件单体删除命令。EDA软件在获取到用户触发的UPF文件单体删除命令后,可以从多个UPF类对象中确定用户指定的目标UPF类对象。
在S820中,在确定用户指定的目标UPF类对象后,可以删除该目标UPF类对象对应的成员变量容器中保存的元素,并将该成员变量容器置空。
在根据用户触发的指令删除对应的目标UPF类对象时,将目标UPF类对象对应的成员变量容器中的元素即可,并不涉及到目标UPF类对象的基类成员变量。
请参照图9,作为一种可选的实施例,上述S810之前,还可以包括:
S910,创建第一析构函数;第一析构函数用于在传入参数为空时,执行步骤:确定用户指定的目标UPF类对象;在传入参数为删除记录容器的指针时,执行步骤:从多个UPF类对象中确定起始删除对象;
S920,获取用户触发的删除命令;
S930,在删除命令为UPF文件单体删除命令时,调用传入参数为空的第一析构函数;
S940,在删除命令为UPF文件全局删除命令时,调用传入参数为删除记录容器的指针的第一析构函数。
在本实施例中,EDA软件的编译阶段可以预先创建第一析构函数以代替原有的默认析构函数。第一析构函数能够根据传入参数的不同值实现不同分支的功能,从而利用第一析构函数实现UPF文件全局删除与UPF文件单体删除的兼容。
在S910中,在EDA软件中,可以创建第一析构函数,并将该自定义的第一析构函数代替原有的析构函数。
该第一析构函数可以根据传入参数从两个不同分支的功能中择一执行。在传入函数为空时,该第一析构函数可以执行UPF文件单体删除的分支功能,并从上述实施例中确定用户指定的目标UPF类对象开始,执行相应分支的步骤,以实现单个UPF类对象的删除。
在传入函数为删除记录容器的指针时,该第一析构函数可以执行UPF文件全局删除的分支功能,并从上述实施例中的从多个UPF类对象中确定起始删除对象的步骤开始,执行相应分支的步骤,以实现全局UPF类对象的删除。
在S920中,在EDA软件在读入upf文件并创建相关联信息后,用户可以根据实际需求触发相应的删除命令。用户可触发的删除命令可以包括UPF文件单体删除命令以及UPF文件全局删除命令。
在S930中,在用户触发UPF文件单体删除命令时,EDA软件可以根据获取到的UPF文件单体删除命令调用传入参数为空的第一析构函数。此时第一析构函数可以执行UPF文件单体删除的分支功能,以实现用户指定的UPF类对象的删除。
在S940中,在用户触发UPF文件全局删除命令时,EDA软件可以根据获取到的UPF文件全局删除命令调用传入参数为删除记录容器的指针的第一析构函数。此时第一析构函数可以执行UPF文件全局删除的分支功能,以实现EDA软件内所有UPF类对象的删除。
作为一种可选的实施例,在传入参数为删除记录容器的指针时,第一析构函数能够执行UPF文件全局删除的分支功能,通过调用删除检验函数遍历删除所有UPF类对象。而在传入参数为空时,第一析构函数能够执行UPF文件单体删除的分支功能,在确定用户指定的目标UPF类对象后,第一析构函数并非调用删除检验函数删除目标UPF类对象,而是调用delete运算符删除目标UPF类对象对应的成员变量容器中的元素。
在删除目标UPF类对象对应的成员变量容器中的元素的过程中,每个元素均进行一次访问,且均只有一次访问。即,在删除成员变量容器中的元素时,不会存在同一元素重复删除的问题。因此,在实现用户指定的UPF类对象的单体删除时,可以不调用删除检验函数,而是直接采用delete运算符删除成员变量容器中的元素。
并且,由于第一析构函数执行UPF文件单体删除的分支功能的前提是传入参数为空,此时第一析构函数并未获取到删除记录容器的指针,也无法调用删除检验函数实现重复删除的检验。
作为一种可选的实施例,上述多个UPF类对象中的任一个UPF类对象继承于基类upfBaseT。即,任意一个UPF类对象均为基类upfBaseT的单层子类或多层子类。
由于基类upfBaseT为所有UPF类对象的基类,作为一种可选的实施方式,可以将upfDesignT确定为起始删除对象,并根据基类upfBaseT的单层子类设置起始删除对象upfDesignT直接包含的成员变量。
在本实施例中,upfDesignT中保存了继承于基类upfBaseT的成员变量,通过选择upfDesignT作为全局删除操作的开始,可以保证所有的upf类对象均被遍历到,且有些upf类对象会被多次遍历到,因此不会存在漏删除的情况,能够实现全部UPF类对象的无遗漏删除。并且,在删除过程中,upfDesignT逐个删除继承于基类upfBaseT的UPF类对象的成员变量。成员变量们又会逐个删除其对应成员变量,最终实现所有UPF类对象的删除。
作为一种可选的实施例,上述起始删除对象对应的UPF类对象为程序的单例。
起始删除对象应当在实例化后仅具有唯一的实例,并为其他所有UPF类对象提供该唯一的实例。因此,通过将单例对象设置为起始删除对象,可以保障其他所有UPF类对象均能够通过该起始删除对象的单例进行访问,从而实现所有UPF类对象的遍历。
在以upfDesigT作为起始删除对象时,可以将upfDesigT的唯一类对象设置为程序的单例。
请参照图10,作为一种可选的实施例,上述S130之后,还可以包括:
S1010,在获取UPF文件重新读入命令时,读入更新后的UPF文件。
在本实施例中,EDA软件在遍历过程中对所有UPF类对象至少进行一次访问,并在对所有UPF类对象进行第一次访问时删除对应的UPF数据后,可以实现全部UPF数据的清除。
在清除所有UPF数据后,用户可以触发UPF文件重新读入命令,以使EDA软件在获取到UPF文件重新读入命令时,重新读入更新后的UPF文件,以实现UPF文件的更新。本实施例中实现UPF文件的更新不需要借助重新启动EDA软件,能够节省重新启动EDA软件耗费的启动时间,提升集成电路设计效率。
作为一种可选的实施方式,以下实施例中结合部分代码进行步骤说明。
在代码编译阶段中,可以根据各个UPF类对象之间的关系表确定upfDesignT作为起始删除对象,通过设置多个UPF类对象之间的保存关系,可以使得其他任一UPF类对象均为upfBaseT直接保存的UPF类对象或upfBaseT间接保存的UPF类对象。
在代码编译阶段中创建的第一析构函数可以为Destructor(),以下以删除upf类对象“upfSupplyNetT”为例进行说明。部分代码如下:
//upf类名为upfSupplyNetT
upfSupplyNetT::~upfSupplyNetT()
{
Destructor();
}
上述代码部分为upf类对象“upfSupplyNetT”的第一析构函数,对于其他upf类对象,第一析构函数可以为:
UpfName::~ UpfName ()
{
Destructor();
}
其中,UpfName即为upf类对象的名称。
需要说明的是,在Destructor()的函数声明中,该函数必须为虚函数。函数声明时,baseSet的默认参数为空,即:
virtual void UpfName::Destructor(utSet<upfBaseT>*baseSet=nullptr);
void upfSupplyNetT::Destructor(utSet<upfBaseT>*baseSet)
{
// 输入参数baseSet不为空,表示此时需要删除所有UPF数据
if (baseSet != nullptr) {
// upfNetClassT为upfSupplyNetT的基类成员变量
upfNetClassT::Destructor(baseSet);
//Destructor(baseSet):把被删掉的指针存到指定的容器baseset
上述部分代码中,以upf类对象“upfSupplyNetT”作为第一成员变量,可以确定该第一成员变量对应的基类成员变量为“upfNetClassT”,在确定“upfNetClassT”后,可以通过Destructor(baseSet)函数对该基类成员变量进行删除。同样地,在upfNetClassT执行函数的过程中,也会继续确定upfNetClassT的基类成员变量,并对其执行Destructor(baseSet)函数。由于upfBaseT为所有UPF类对象的基类,在依次遍历每个upf类对象的基类成员变量后,最终将会对upfBaseT执行Destructor(baseSet)函数。
在删除upf类对象“upfSupplyNetT”对应的基类成员变量为“upfNetClassT”后,以upfSupplyNetT的成员变量包括upf_sn_states、upf_correlated_supplies以及upf_supplySets为例。
upf_sn_states是保存upf类upfSupplyNetStateT的map容器,该map容器即为保存第二成员变量upfSupplyNetStateT的成员变量容器,针对upf_sn_states,代码如下:
utMapIter<char, upfSupplyNetStateT>iter;
upfSupplyNetStateT *value;
for (iter.First(&upf_sn_states); iter.Item(0,&value); iter.Next()) {
DeleteBaseObj(baseSet, value);
}
upf_sn_states.Reset();
其中,通过for循环能够遍历upf类upfSupplyNetStateT实例化后的每个元素,并对每个元素执行DeleteBaseObj(baseSet, value)函数,该DeleteBaseObj(baseSet,value)函数即为删除检验函数。
在利用删除检验函数DeleteBaseObj(baseSet, value)对成员变量容器中的所有元素均进行删除后,可以通过upf_sn_states.Reset()函数清空成员变量容器upf_sn_states,以避免对该成员变量容器upf_sn_states进行再次删除。
同样地,由于upf_correlated_supplies是保存upf类upfNetworkClassT的set容器,upf_supplySets是upfSupplyNetT是保存upf类upfSupplySetT的set容器,针对upf_correlated_supplies和upf_supplySets,代码如下:
utSetIter<upfNetworkClassT>netWorkIter;
upfNetworkClassT *netWorkValue = nullptr;
FOREACH_SET_ITEM(&upf_correlated_supplies, netWorkIter,&netWorkValue){
DeleteBaseObj(baseSet, netWorkValue);
}
upf_correlated_supplies.Reset();
utSetIter<upfSupplySetT>supSetIter;
upfSupplySetT *supSetValue = nullptr;
FOREACH_SET_ITEM(&upf_supplySets, supSetIter,&supSetValue) {
DeleteBaseObj(baseSet, supSetValue);
}
upf_supplySets.Reset();
};
上述为输入参数不为空,即baseSet != nullptr时的部分代码内容,以下内容为输入参数为空时的部分代码内容:
else {
utMapIter<char, upfSupplyNetStateT>iter;
upfSupplyNetStateT *value;
for (iter.First(&upf_sn_states); iter.Item(0,&value); iter.Next()) {
delete value;
}
upf_sn_states.Reset();
}
根据上述内容,在Destructor()函数的输入参数为空时,执行else分支,此时upf类对象“upfSupplyNetT”即为用户指定的目标UPF类对象,针对该目标UPF类对象,不会确定其对应的基类成员变量,而是仅删除该目标UPF类对象所包含的成员变量容器中保存的实例化后的元素,并在删除所有元素后通过Reset()函数实现成员变量容器upf_sn_states的清空。
需要说明的是,上述Destructor()函数的输入参数baseSet不为空的执行分支即为UPF全局删除的分支,Destructor()函数的输入参数为空的执行分支即为UPF单体删除的分支。
作为一种可选的实施方式,上述删除检验函数DeleteBaseObj()的函数实现可以包括:
#define DeleteBaseObj(baseSet, baseObj)
{
if (!baseSet) {
if (baseObj) {
delete baseObj;
baseObj = nullptr;
}
}
else if (baseSet) {
if (baseObj&&baseSet->Insert(baseObj) == 1) {
baseObj->Destructor(baseSet);
delete baseObj;
}
baseObj = nullptr;
} ;
根据上述内容,DeleteBaseObj(baseSet, baseObj) 函数中,baseSet为保存基类为upfbaseT的upf类指针的删除记录容器的指针,baseObj表示upfbaseT的upf类指针。
在baseSet为空时,针对upf类指针baseObj,可以通过delete运算符删除该upf类指针,并通过baseObj = nullptr实现指针置空。
在baseSet不为空时,针对upf类指针baseObj,可以将baseObj插入删除记录容器baseSet,若插入成功,则可以在利用baseObj->Destructor(baseSet)函数实现baseObj的基类成员变量包含的成员变量的清除后,通过delete baseObj实现baseObj的删除。
若插入失败,则表示该元素已在删除记录容器baseSet,此时若再次删除该baseObj可能导致程序报错、崩溃等异常,因此,在插入失败时,不能利用delete运算符删除baseObj = nullptr,而是通过baseObj = nullptr实现指针置空。
作为一种可选的实施方式,用户可以在EDA软件中通过触发不同的控件、按钮或其他行为实现UPF文件的全局删除功能,此时EDA软件将会调用upfDesignT::DeleteGlobDesign() 函数。
在函数DeleteGlobDesign()中,会调用Destructor(&baseSet),即调用传入参数为baseSet时的Destructor()函数,以实现UPF文件的全局删除。借助Destructor函数,根据接收到的形参baseSet的不同值(nullptr或baseSet容器,其中baseSet表示一个可以存放upf类对象指针的删除记录容器),执行逐级删除派生类下所有upfclass类对象的目的。
相应地,在用户触发UPF文件单体删除功能时,可以通过调用Destructor()以实现用户指定的upf类的成员变量的删除。此时调用Destructor()则不会传入baseSet作为输入参数,从而能够通过delete运算符调用其对应的析构函数以删除upfclass对象。
作为一种可选的实施方式,图11示出了多个UPF类对象之间的关系抽象图。其中class base 是class A、class B、class C 的基类。class A、class B、class C 表示继承upfBaseT的类。
以初始UPF类对象为class A为例,此时调用A::Destructor(baseSet)函数。A::Destructor(baseSet)会调用base::Destructor(baseSet)来删除基类成员变量的成员变量。
在class A为upfBaseT的单层子类时,base::Destructor(baseSet)能够确定class A的基类成员变量为upfBaseT,由于upfBaseT是所有UPF类对象的子类,此时不再获取upfBaseT的基类,而是对upfBaseT包含的成员变量进行删除。
在class A为upfBaseT的多层子类时,base::Destructor(baseSet)能够确定class A的基类成员变量,对于该基类成员变量,可以继续调用base::Destructor(baseSet)以获取该基类成员变量的基类成员变量,直至到达upfBaseT后停止。
在class A删除基类成员变量的成员变量后,可以调用DeleteBaseObj()逐个删除set<class B>和set<class C>中的upf对象。
在set<class B>和set<class C>中的upf对象清除完毕后,由于传入的baseSet不为空,此时会继续对class B调用Destructor(baseSet),并类似A::Destructor(baseSet)的操作执行,将Class B中基类成员变量包含的upf类对象清除掉。同样地,保存在class B中的set<class C>的upf对象也被清除。在此之后,继续对class C调用Destructor(baseSet),以将保存在class C中的set<class base>的upf对象清除。经过反复轮询后,所有upf类的基类成员变量以及本身的成员变量均会被访问到,并通过删除检验函数DeleteBaseObj()实现重复检验并删除。
本申请实施例还提供了一种UPF文件的删除装置,如图12所示,装置包括:
获取模块1201,用于在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,起始删除对象以外的任一UPF类对象为起始删除对象直接或间接包含的成员变量;
起始模块1202,用于删除起始删除对象的UPF数据;
遍历模块1203,用于从起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
需要说明的是,该UPF文件的删除装置是与上述UPF文件的删除方法对应的装置,上述方法实施例中所有实现方式均适用于该装置的实施例中,也能达到相同的技术效果。
图13示出了本申请实施例提供的UPF文件的删除设备的硬件结构示意图。其中,UPF文件的删除设备可以为计算机、服务器和UPF文件的删除专用设备中的至少一种。该UPF文件的删除设备包括处理器1301以及存储有计算机程序指令的存储器1302。
具体地,上述处理器1301可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit ,ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
存储器1302可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器1302可包括硬盘驱动器(Hard Disk Drive,HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(Universal Serial Bus,USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器1302可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器1302可在UPF文件的删除设备的内部或外部。在特定实施例中,存储器1302是非易失性固态存储器。
存储器1302可包括只读存储器(ROM),闪存设备,随机存取存储器(RAM),磁盘存储介质设备,光存储介质设备,电气、光学或其他物理/有形的存储器存储设备。因此,通常,存储器1302包括一个或多个软件的有形(非暂态)计算机可读存储介质(例如,存储器设备),该软件可以编码有计算机可执行指令,并且当该软件被执行(例如,由一个或多个处理器)时,其可操作来执行参考根据本公开的上述方面的方法所描述的操作。
处理器1301通过读取并执行存储器1302中存储的计算机程序指令,以实现上述实施例中的任意一种UPF文件的删除方法。
在一个示例中,UPF文件的删除设备还可包括通信接口1303和总线1310。其中,如图13所示,处理器1301、存储器1302、通信接口1303通过总线1310连接并完成相互间的通信。
通信接口1303,主要用于实现本申请实施例中各模块、装置、单元和/或设备之间的通信。
总线1310包括硬件、软件或两者,将UPF文件的删除设备的部件彼此耦接在一起。举例来说而非限制,总线可包括加速图形端口(AGP)或其他图形总线、增强工业标准架构(EISA)总线、前端总线(FSB)、超传输(HT)互连、工业标准架构(ISA)总线、无限带宽互连、低引脚数(LPC)总线、存储器总线、微信道架构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(SATA)总线、视频电子标准协会局部(VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线1310可包括一个或多个总线。尽管本申请实施例描述和示出了特定的总线,但本申请考虑任何合适的总线或互连。
该UPF文件的删除设备可以基于UPF文件的删除方法,从而实现结合图1至图12描述的UPF文件的删除方法和装置。
另外,结合上述实施例中的UPF文件的删除方法,本申请实施例可提供一种计算机存储介质来实现。该计算机存储介质上存储有计算机程序指令;该计算机程序指令被处理器执行时实现上述实施例中的任意一种UPF文件的删除方法。
另外,本申请实施例还提供了一种计算机程序产品,包括计算机程序,计算机程序被处理器执行时可实现前述方法实施例的步骤及相应内容。
另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
应理解,在本申请实施例中,“与A相应的B”表示B与A相关联,根据A可以确定B。但还应理解,根据A确定B并不意味着仅仅根据A确定B,还可以根据A和/或其它信息确定B。
以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (16)

1.一种UPF文件的删除方法,其特征在于,包括:
在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,所述起始删除对象以外的任一UPF类对象为同一UPF类对象直接或间接包含的成员变量;
删除所述起始删除对象的UPF数据;
从所述起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
2.根据权利要求1所述的UPF文件的删除方法,其特征在于,所述删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据,包括:
确定每个第一成员变量直接包含的第二成员变量;
在第一成员变量未包含第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据;所述删除检验函数用于在所述第一成员变量对应的UPF类对象为第一次访问时删除对应的UPF数据;
在第一成员变量包含至少一个第二成员变量时,通过删除检验函数删除第一成员变量包含的UPF数据,并将每个第二成员变量作为新的第一成员变量,返回执行步骤:确定每个第一成员变量直接包含的第二成员变量,直至遍历所有成员变量。
3.根据权利要求2所述的UPF文件的删除方法,其特征在于,所述通过删除检验函数删除第一成员变量包含的UPF数据,包括:
获取第一成员变量的UPF指针;
将所述UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录;
在删除记录容器中包含第一成员变量的删除记录时,将所述UPF指针置空;
在删除记录容器中未包含第一成员变量的删除记录时,删除所述UPF指针。
4.根据权利要求3所述的UPF文件的删除方法,其特征在于,所述将所述UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录,包括:
将所述UPF指针插入所述删除记录容器;
在插入成功时,确定所述删除记录容器中未包含第一成员变量的删除记录;其中,插入所述删除记录容器的UPF指针用于作为第一成员变量的删除记录;
在插入失败时,确定所述删除记录容器中包含第一成员变量的删除记录。
5.根据权利要求4所述的UPF文件的删除方法,其特征在于,所述将所述UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录,包括:
判断所述删除记录容器是否为空;
在所述删除记录容器为空的情况下,删除所述UPF指针,并将所述UPF指针置为空;
在所述删除记录容器不为空的情况下,将所述UPF指针与删除记录容器中存储的指针进行比较,得到第一成员变量的删除记录。
6.根据权利要求3所述的UPF文件的删除方法,其特征在于,所述在删除记录容器中未包含第一成员变量的删除记录时,删除所述UPF指针之后,还包括:
在所述第一成员变量具有保存第二成员变量的成员变量容器、所述第二成员变量直接或间接包含的成员变量均遍历完成时,删除所述成员变量容器中的元素,并将所述成员变量容器置空。
7.根据权利要求3所述的UPF文件的删除方法,其特征在于,所述UPF文件的删除方法还包括:
在获取UPF文件单体删除命令时,确定用户指定的目标UPF类对象;
删除所述目标UPF类对象对应的成员变量容器中的元素,并将所述目标UPF类对象对应的成员变量容器置空。
8.根据权利要求7所述的UPF文件的删除方法,其特征在于,所述在获取UPF文件单体删除命令时,确定用户指定的目标UPF类对象之前,还包括:
创建第一析构函数;所述第一析构函数用于在传入参数为空时,执行步骤:确定用户指定的目标UPF类对象;在传入参数为删除记录容器的指针时,执行步骤:从多个UPF类对象中确定起始删除对象;
获取用户触发的删除命令;
在所述删除命令为UPF文件单体删除命令时,调用传入参数为空的第一析构函数;
在所述删除命令为UPF文件全局删除命令时,调用传入参数为删除记录容器的指针的第一析构函数。
9.根据权利要求8所述的UPF文件的删除方法,其特征在于,所述传入参数为删除记录容器的指针的第一析构函数用于调用删除检验函数遍历删除所有UPF类对象;
所述传入参数为空的第一析构函数用于调用delete运算符删除所述目标UPF类对象对应的成员变量容器中的元素。
10.根据权利要求2所述的UPF文件的删除方法,其特征在于,所述通过删除检验函数删除第一成员变量包含的UPF数据之前,还包括:
确定所述第一成员变量对应的基类成员变量;
通过删除检验函数删除所述基类成员变量包含的UPF数据;
将每个基类成员变量作为新的第一成员变量,返回执行步骤:确定每个第一成员变量直接包含的第二成员变量,直至基类成员变量为所有UPF类对象共同的基类成员变量。
11.根据权利要求1-10中任一项所述的UPF文件的删除方法,其特征在于,所述多个UPF类对象中的任一个UPF类对象继承于基类upfBaseT。
12.根据权利要求1-10中任一项所述的UPF文件的删除方法,其特征在于,所述起始删除对象对应的UPF类对象为程序的单例。
13.根据权利要求1-10中任一项所述的UPF文件的删除方法,其特征在于,所述直至遍历并删除所有UPF类对象的UPF数据之后,还包括:
在获取UPF文件重新读入命令时,读入更新后的UPF文件。
14.一种UPF文件的删除装置,其特征在于,包括:
获取模块,用于在获取UPF文件全局删除命令时,从多个UPF类对象中确定起始删除对象;其中,所述起始删除对象以外的任一UPF类对象为所述起始删除对象直接或间接包含的成员变量;
起始模块,用于删除所述起始删除对象的UPF数据;
遍历模块,用于从所述起始删除对象直接包含的成员变量开始,删除每个成员变量的UPF数据以及每个成员变量直接包含的所有成员变量的UPF数据,直至遍历并删除所有UPF类对象的UPF数据;其中,在遍历过程中对每个UPF类对象进行第一次访问时删除其对应的UPF数据。
15.一种UPF文件的删除设备,其特征在于,包括:处理器以及存储有计算机程序指令的存储器;
所述处理器执行所述计算机程序指令时实现如权利要求1-13任意一项所述的UPF文件的删除方法的步骤。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现如权利要求1-13任意一项所述的UPF文件的删除方法的步骤。
CN202311009310.5A 2023-08-11 2023-08-11 Upf文件的删除方法、装置、设备及存储介质 Active CN116737670B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311009310.5A CN116737670B (zh) 2023-08-11 2023-08-11 Upf文件的删除方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311009310.5A CN116737670B (zh) 2023-08-11 2023-08-11 Upf文件的删除方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN116737670A true CN116737670A (zh) 2023-09-12
CN116737670B CN116737670B (zh) 2023-11-17

Family

ID=87909948

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311009310.5A Active CN116737670B (zh) 2023-08-11 2023-08-11 Upf文件的删除方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116737670B (zh)

Citations (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1996037833A1 (en) * 1995-05-23 1996-11-28 International Business Machines Corporation Data processing system and method
US5603030A (en) * 1993-01-07 1997-02-11 Microsoft Corporation Method and system for destruction of objects using multiple destructor functions in an object-oriented computer system
CN1169192A (zh) * 1994-12-09 1997-12-31 艾利森电话股份有限公司 管理内部执行线程的系统
US6167455A (en) * 1995-05-05 2000-12-26 Apple Computer, Inc. Method and system for synchronous operation of linked command objects
US6343296B1 (en) * 1999-09-03 2002-01-29 Lucent Technologies Inc. On-line reorganization in object-oriented databases
US20030074371A1 (en) * 2001-10-13 2003-04-17 Yoo-Mi Park Object-relational database management system and method for deleting class instance for the same
CN101706825A (zh) * 2009-12-10 2010-05-12 华中科技大学 一种基于文件内容类型的重复数据删除方法
CN103559032A (zh) * 2013-10-31 2014-02-05 烽火通信科技股份有限公司 嵌入式系统对象管理的装置及方法
CN107958079A (zh) * 2017-12-14 2018-04-24 郑州云海信息技术有限公司 聚合文件删除方法、系统、装置及可读存储介质
CN108885671A (zh) * 2016-11-16 2018-11-23 华为技术有限公司 一种目录删除方法、装置和存储服务器
CN110968408A (zh) * 2019-11-13 2020-04-07 泰康保险集团股份有限公司 一种执行流移除方法、装置、电子设备及存储介质
CN111258926A (zh) * 2020-02-26 2020-06-09 腾讯科技(深圳)有限公司 内存回收方法、装置、存储介质和计算机设备
CN111309334A (zh) * 2020-02-18 2020-06-19 北京奇艺世纪科技有限公司 生成软件安装包的方法、装置、计算机设备及存储介质
CN113836451A (zh) * 2020-06-24 2021-12-24 腾讯科技(深圳)有限公司 网页访问方法、装置、计算机设备和存储介质
CN114339804A (zh) * 2020-09-29 2022-04-12 中国移动通信有限公司研究院 一种服务注册方法、装置、设备及可读存储介质
WO2023066025A1 (zh) * 2021-10-18 2023-04-27 翱捷科技股份有限公司 一种基于lvgl的应用的活动的管理方法及装置
US20230180339A1 (en) * 2020-03-25 2023-06-08 Sony Group Corporation Network control device, network control method, and program

Patent Citations (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5603030A (en) * 1993-01-07 1997-02-11 Microsoft Corporation Method and system for destruction of objects using multiple destructor functions in an object-oriented computer system
CN1169192A (zh) * 1994-12-09 1997-12-31 艾利森电话股份有限公司 管理内部执行线程的系统
US6167455A (en) * 1995-05-05 2000-12-26 Apple Computer, Inc. Method and system for synchronous operation of linked command objects
WO1996037833A1 (en) * 1995-05-23 1996-11-28 International Business Machines Corporation Data processing system and method
US6343296B1 (en) * 1999-09-03 2002-01-29 Lucent Technologies Inc. On-line reorganization in object-oriented databases
US20030074371A1 (en) * 2001-10-13 2003-04-17 Yoo-Mi Park Object-relational database management system and method for deleting class instance for the same
CN101706825A (zh) * 2009-12-10 2010-05-12 华中科技大学 一种基于文件内容类型的重复数据删除方法
CN103559032A (zh) * 2013-10-31 2014-02-05 烽火通信科技股份有限公司 嵌入式系统对象管理的装置及方法
CN108885671A (zh) * 2016-11-16 2018-11-23 华为技术有限公司 一种目录删除方法、装置和存储服务器
CN107958079A (zh) * 2017-12-14 2018-04-24 郑州云海信息技术有限公司 聚合文件删除方法、系统、装置及可读存储介质
CN110968408A (zh) * 2019-11-13 2020-04-07 泰康保险集团股份有限公司 一种执行流移除方法、装置、电子设备及存储介质
CN111309334A (zh) * 2020-02-18 2020-06-19 北京奇艺世纪科技有限公司 生成软件安装包的方法、装置、计算机设备及存储介质
CN111258926A (zh) * 2020-02-26 2020-06-09 腾讯科技(深圳)有限公司 内存回收方法、装置、存储介质和计算机设备
US20230180339A1 (en) * 2020-03-25 2023-06-08 Sony Group Corporation Network control device, network control method, and program
CN113836451A (zh) * 2020-06-24 2021-12-24 腾讯科技(深圳)有限公司 网页访问方法、装置、计算机设备和存储介质
CN114339804A (zh) * 2020-09-29 2022-04-12 中国移动通信有限公司研究院 一种服务注册方法、装置、设备及可读存储介质
WO2023066025A1 (zh) * 2021-10-18 2023-04-27 翱捷科技股份有限公司 一种基于lvgl的应用的活动的管理方法及装置

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
RYAN GLOVER: "How to Recursively Traverse an Object with JavaScript", pages 1, Retrieved from the Internet <URL:https://cheatcode.co/tutorials/how-to-recursively-traverse-an-object-with-javascript> *
WEIXIN_39980129: "java 递归删除_Java实现删除指定下的所有文件(递归算法)", HTTPS://BLOG.CSDN.NET/WEIXIN_39980129/ARTICLE/DETAILS/114424037, pages 1 - 4 *
小白葫芦: "File类 文件的遍历与删除", pages 1, Retrieved from the Internet <URL:https://blog.csdn.net/qq_40791843/article/details/90180665> *
王兰波 等: "使用SQL环境中的复杂对象实现数据管理", 广东通信技术, no. 11, pages 28 - 31 *
诗水人间: "js 对象的深拷贝、合并、清空属性值", pages 1, Retrieved from the Internet <URL:https://blog.csdn.net/qq_41813208/article/details/107371181> *

Also Published As

Publication number Publication date
CN116737670B (zh) 2023-11-17

Similar Documents

Publication Publication Date Title
US6941546B2 (en) Method and apparatus for testing a software component using an abstraction matrix
US10437574B2 (en) System and method for providing code completion features for code modules
CN110119280A (zh) 多固件升级的方法及装置
CN110955598B (zh) 一种内核态程序的断点处理方法及装置
CN107608737B (zh) 动画播放方法及装置
CN109284222B (zh) 软件单元、数据处理系统中的项目测试方法、装置及设备
CN111506500A (zh) 内存泄露检测方法、装置、电子设备及可读存储介质
CN112115063B (zh) 一种软件本地化测试方法、装置、终端及存储介质
US5353433A (en) Method and apparatus for organizing and analyzing timing information
CN116737670B (zh) Upf文件的删除方法、装置、设备及存储介质
CN110765008B (zh) 一种数据处理方法及装置
CN111488144A (zh) 一种数据处理方法以及设备
CN115509904A (zh) 一种接口测试用例的断言生成方法及装置
JP2004094374A (ja) ロギングシステム
CN114327375A (zh) 一种检测java代码依赖关系的方法、工具以及计算机设备
CN103677846A (zh) 一种SQLite数据库开发工具包及开发方法
CN101763293B (zh) 错误信息的处理方法及装置
CN116432185B (zh) 一种异常检测方法、装置、可读存储介质及电子设备
CN110716863A (zh) 一种强制访问控制规则测试方法、系统、终端及存储介质
CN113033137B (zh) 数字元器件模型的建立方法、装置和服务器
CN116339736B (zh) Tcl交互界面的配置方法、装置、设备及存储介质
CN111273940A (zh) 将程序文件上传至代码仓库的方法及装置
WO2023060978A1 (zh) Autosar软件的验证方法、装置、设备及存储介质
CN115437669A (zh) 一种适用于洗碗机的应用烧录方法及洗碗机
CN117931374A (zh) 基于容器隔离的应用处理方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant