CN110347372B - 一种遍历数据的方法及终端 - Google Patents
一种遍历数据的方法及终端 Download PDFInfo
- Publication number
- CN110347372B CN110347372B CN201810305494.2A CN201810305494A CN110347372B CN 110347372 B CN110347372 B CN 110347372B CN 201810305494 A CN201810305494 A CN 201810305494A CN 110347372 B CN110347372 B CN 110347372B
- Authority
- CN
- China
- Prior art keywords
- enumerator
- type
- generic
- data
- self
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种遍历数据的方法及终端,自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历List集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行Box装箱操作,也就不会产生GC,从而提高了系统性能。
Description
技术领域
本发明涉及软件开发领域,尤其涉及一种遍历数据的方法及终端。
背景技术
在Unity3D的开发过程中,无法避免需要使用List集合存储数据,使用遍历List获得每一个数据。而Unity系统的泛型List存在着产生内存垃圾的问题,当List存储的是值类型时,由于.net的List集合使用的系统默认枚举器返回的是object类型,它在finally中回收枚举器时就需要进行装箱Box操作,也就是将值类型转换为object类型,这样就产生了内存垃圾,从而导致内存垃圾收集GC,影响程序性能。
发明内容
本发明所要解决的技术问题是:提高一种遍历数据的方法及终端,能够避免在使用List遍历数据时,产生GC。
为了解决上述技术问题,本发明采用的一种技术方案为:
一种遍历数据的方法,包括步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型。
为了解决上述技术问题,本发明采用的另一种技术方案为:
一种遍历数据的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型。
本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历List集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行Box装箱操作,也就不会产生GC,从而提高了系统性能。
附图说明
图1为本发明实施例的一种遍历数据的方法流程图;
图2为本发明实施例的一种遍历数据的终端的结构示意图;
图3为本发明实施例建立的一种数据结构图;
图4为本发明实施例建立的一种数据结构图;
图5为本发明实施例的用系统默认返回的枚举器的仿真结果图;
图6为本发明实施例的用自定义的泛型的枚举器的仿真结果图;
标号说明:
1、一种遍历数据的终端;2、存储器;3、处理器。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,设置返回的枚举器的类型与遍历到的数据的类型相同。
请参照图1,一种遍历数据的方法,包括步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型。
从上述描述可知,本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历List集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行Box装箱操作,也就不会产生GC,从而提高了系统性能。
进一步的,所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
当遍历的List集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。
由上述描述可知,由于系统默认的枚举器返回的是object类型,所以如果当遍历到的数据类型为值类型时,若采用系统默认的枚举器,则将会执行Box操作,需要将值类型转化为object类型,而本发明通过设置返回的泛型的枚举器的类型为值类别,保证所述枚举器的类型与遍历到的数据类型相同,避免了装箱Box操作。
进一步的,所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
设置返回的所述泛型的枚举器的Current属性为与遍历的List集合中的数据相同的类型,所述Current属性指示了返回的所述泛型的枚举器的类型。
由上述描述可知,通过对枚举器的Current属性进行设置实现对泛型的枚举器的类型的指定,方便快捷。
进一步的,还包括步骤:
自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。
由上述描述可知,通过两个可变大小的数组分别存储枚举器及枚举器对应的状态,可以方便对枚举器的管理,进行自适应的增加和动态的调整,避免对枚举器的回收,也就避免了GC的产生。
进一步的,所述更新所述两个数组包括:
根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。
由上述描述可知,如果新建了枚举器,则对数组进行同步的更新,保证一致性,避免出错。
请参照图2,一种遍历数据的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型。
从上述描述可知,本发明的有益效果在于:自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历List集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行Box装箱操作,也就不会产生GC,从而提高了系统性能。
进一步的,所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
当遍历的List集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。
由上述描述可知,由于系统默认的枚举器返回的是object类型,所以如果当遍历到的数据类型为值类型时,若采用系统默认的枚举器,则将会执行Box操作,需要将值类型转化为object类型,而本发明通过设置返回的泛型的枚举器的类型为值类别,保证所述枚举器的类型与遍历到的数据类型相同,避免了装箱Box操作。
进一步的,所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
设置返回的所述泛型的枚举器的Current属性为与遍历的List集合中的数据相同的类型,所述Current属性指示了返回的所述泛型的枚举器的类型。
由上述描述可知,通过对枚举器的Current属性进行设置实现对泛型的枚举器的类型的指定,方便快捷。
进一步的,还包括步骤:
自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。
由上述描述可知,通过两个可变大小的数组分别存储枚举器及枚举器对应的状态,可以方便对枚举器的管理,进行自适应的增加和动态的调整,避免对枚举器的回收,也就避免了GC的产生。
进一步的,所述更新所述两个数组包括:
根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。
由上述描述可知,如果新建了枚举器,则对数组进行同步的更新,保证一致性,避免出错。
实施例一
请参照图1,一种遍历数据的方法,包括步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型;
具体的,当遍历的List集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型;
所述设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
设置返回的所述泛型的枚举器的Current属性为与遍历的List集合中的数据相同的类型,所述Current属性指示了返回的所述泛型的枚举器的类型;
还包括步骤:
自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器;
其中,更新所述两个数组具体包括:根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。
实施例二
请参照图2,一种遍历数据的终端1,包括存储器2、处理器3以及存储在所述存储器2上并可在所述处理器3上运行的计算机程序,所述处理器3执行所述计算机程序时实现实施例一中的步骤。
实施例三
将上述遍历数据的方法应用于具体的场景并进行测试:
请参照图3、4,自定义一个自己的枚举器MyEnumerator<T>,它是继承于IEnumerator<T>的,作为实现IEnumerable<T>接口的MyList的迭代器。泛型的IEnumerator<T>设计为实现IEnumerator,所以有一个泛型的Current属性,在迭代数据为值类型时,可以指定返回的泛型的枚举器的类型为值类型,指定了类型后就不需要装箱Box操作,泛型的IEnumerable<T>实现的是IEnumberable,于是对于实现GetEnumerator,就有了两个方法,一个是通过非泛型IEnumerator中Current方法中的object返回形式,该形式导致装箱操作,另一个是通过泛型IEnumerator中泛型Current方法中的泛型返回形式,为了避免使用系统默认的非泛型的返回形式,需要将实现非泛型IEnumberable接口中的GetEnumerator私有化,将泛型IEnumberable<T>接口中的GetEnumerator方法公开,这样在迭代数据为值类型时,调用的是这个公开的GetEnumerator方法,就指定了枚举器返回的是值类型,不需要装箱;
自定义集合MyList<T>,定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器;
其中,更新所述两个数组具体包括:根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组;
编写测试脚本,执行1000次遍历,图5、6分别表示用系统默认返回的枚举器的仿真结果图和用自定义的泛型的枚举器的仿真结果图,通过对比可知,用系统默认返回的枚举器产生了39.1KB的GC,而用自定义的泛型的枚举器并没有产生GC。
综上所述,本发明提供的一种遍历数据的方法及终端,自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,在遍历List集合中的数据时,确定所遍历到的数据的类型,设置返回的泛型的枚举器的类型为与所述遍历到的数据相同的类型,通过将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开,保证返回的是自定义的泛型的枚举器,并且由于泛型的枚举器的类型是可以在返回时再根据遍历到的数据的类型设置,指定了类型后枚举器的类型与遍历到的数据类型相同,就不需要进行Box装箱操作,也就不会产生GC,从而提高了系统性能。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (8)
1.一种遍历数据的方法,其特征在于,包括步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型;
还包括步骤:
自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。
2.根据权利要求1所述的一种遍历数据的方法,其特征在于,
所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
当遍历的List集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。
3.根据权利要求1所述的一种遍历数据的方法,其特征在于,
所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
设置返回的所述泛型的枚举器的Current属性为与遍历的List集合中的数据相同的类型,所述Current属性指示了返回的所述泛型的枚举器的类型。
4.根据权利要求1所述的一种遍历数据的方法,其特征在于,所述更新所述两个数组包括:
根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。
5.一种遍历数据的终端,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
S1、自定义一泛型的枚举器,并将系统默认的枚举器的获取接口私有化,将所述泛型的枚举器的获取接口公开;
S2、确定遍历的List集合中的数据的类型,设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型;
还包括步骤:
自定义两个数组,一个数组存储自定义的泛型的枚举器,另一个数组存储对应所述自定义的泛型的枚举器的状态;
在遍历数据时,根据存储的自定义的泛型的枚举器状态确定是否有空闲的自定义的泛型的枚举器,若是,则选择并返回一空闲的自定义的泛型的枚举器;若否,则新建若干个自定义的泛型的枚举器,并更新所述两个数组,选择并返回一新建的自定义的泛型的枚举器。
6.根据权利要求5所述的一种遍历数据的终端,其特征在于,
所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
当遍历的List集合中的数据的类型为值类型时,设置返回的所述泛型的枚举器的类型为值类型。
7.根据权利要求5所述的一种遍历数据的终端,其特征在于,
所述步骤S2中设置返回的所述泛型的枚举器的类型为与遍历的List集合中的数据相同的类型包括:
设置返回的所述泛型的枚举器的Current属性为与遍历的List集合中的数据相同的类型,所述Current属性指示了返回的所述泛型的枚举器的类型。
8.根据权利要求5所述的一种遍历数据的终端,其特征在于,所述更新所述两个数组包括:
根据新建的自定义的泛型的枚举器的个数增加数组的长度,并将所述新建的自定义的泛型的枚举器和对应的状态存储至相应的数组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810305494.2A CN110347372B (zh) | 2018-04-08 | 2018-04-08 | 一种遍历数据的方法及终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810305494.2A CN110347372B (zh) | 2018-04-08 | 2018-04-08 | 一种遍历数据的方法及终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110347372A CN110347372A (zh) | 2019-10-18 |
CN110347372B true CN110347372B (zh) | 2022-07-05 |
Family
ID=68173158
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810305494.2A Active CN110347372B (zh) | 2018-04-08 | 2018-04-08 | 一种遍历数据的方法及终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110347372B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101890220A (zh) * | 2009-05-20 | 2010-11-24 | 灰熊(北京)科技有限公司 | 一种通过牌型判断是否可以大过上家牌的方法 |
CN105893039A (zh) * | 2016-03-30 | 2016-08-24 | 浪潮通用软件有限公司 | 一种利用编写实体类特性从而实现简单数据库的通用方法 |
CN106233251A (zh) * | 2014-04-22 | 2016-12-14 | 甲骨文国际公司 | 元数据驱动的动态具体化 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7761270B2 (en) * | 2000-12-29 | 2010-07-20 | Exxonmobil Upstream Research Co. | Computer system and method having a facility management logic architecture |
-
2018
- 2018-04-08 CN CN201810305494.2A patent/CN110347372B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101890220A (zh) * | 2009-05-20 | 2010-11-24 | 灰熊(北京)科技有限公司 | 一种通过牌型判断是否可以大过上家牌的方法 |
CN106233251A (zh) * | 2014-04-22 | 2016-12-14 | 甲骨文国际公司 | 元数据驱动的动态具体化 |
CN105893039A (zh) * | 2016-03-30 | 2016-08-24 | 浪潮通用软件有限公司 | 一种利用编写实体类特性从而实现简单数据库的通用方法 |
Non-Patent Citations (2)
Title |
---|
C#中FCL迭代器模式的一点问题;陆敏技;《博客园 https://www.cnblogs.com/luminji/archive/2011/02/17/1956723.html》;20110217;第1-3页 * |
Design Patterns:Elements of Reusable Object-Oriented Software;Erich Gamma等;《Design Patterns:Elements of Reusable Object-Oriented Software》;19990901;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110347372A (zh) | 2019-10-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20160357740A1 (en) | Metadata Updating Method and Apparatus Based on Columnar Storage in Distributed File System, and Host | |
WO2021037050A1 (zh) | 一种代码变更方法及装置 | |
US9886477B2 (en) | Generating imperative-language query code from declarative-language query code | |
CN111324577B (zh) | 一种Yml文件读写的方法及装置 | |
CN105808776A (zh) | 一种分布式数据库的数据管理系统及方法 | |
US9652360B2 (en) | Crawling for extracting a model of a GUI-based application | |
EP3384385B1 (en) | Methods and systems for mapping object oriented/functional languages to database languages | |
CN108037967A (zh) | 一种基于多父子结构的菜单加载方法以及电子设备 | |
US9971794B2 (en) | Converting data objects from multi- to single-source database environment | |
CN104615602A (zh) | 查询界面自动生成实现装置及其方法 | |
KR101845812B1 (ko) | 다차원 온라인 분석 처리 시스템에서의 큐브를 재구성하는 방법 및 장치 | |
US8707260B2 (en) | Resolving interdependencies between heterogeneous artifacts in a software system | |
Fazackerley et al. | Key-value store implementations for Arduino microcontrollers | |
CN110347372B (zh) | 一种遍历数据的方法及终端 | |
US20110022611A1 (en) | Computer object conversion using an intermediate object | |
US8914782B2 (en) | Optimization of declarative queries | |
US20230259490A1 (en) | Data query method and apparatus, device, and storage medium | |
CN110069812B (zh) | 用于机器人路径轨迹点属性的配置方法、系统及存储介质 | |
CN113064674A (zh) | 一种扩展状态机逻辑的方法、装置、存储介质和电子装置 | |
CN111736776A (zh) | 一种数据存储、读取方法及装置 | |
CN109324929B (zh) | 一种快照创建方法、装置、设备及可读存储介质 | |
US8793671B2 (en) | Interface optimization in a closed system | |
CN107622070B (zh) | 一种数据库管理方法及装置 | |
CN115114325A (zh) | 数据查询方法、装置、电子设备以及存储介质 | |
CN111124386B (zh) | 基于Unity的动画事件处理方法、装置、设备和存储介质 |
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 |