Re: [Mesa-dev] [PATCH 3/6] vulkan: enum generator: make registry more flexible
On Thu, Sep 21, 2017 at 10:25 AM, Dylan Bakerwrote: > Quoting Jason Ekstrand (2017-09-21 08:32:20) > > From: Lionel Landwerlin > > > > It will be used to store extension numbers as well. > > > > Signed-off-by: Lionel Landwerlin > > Reviewed-by: Jason Ekstrand > > --- > > src/vulkan/util/gen_enum_to_str.py | 22 +++--- > > 1 file changed, 11 insertions(+), 11 deletions(-) > > > > diff --git a/src/vulkan/util/gen_enum_to_str.py > b/src/vulkan/util/gen_enum_to_str.py > > index efe5d4f..5281e89 100644 > > --- a/src/vulkan/util/gen_enum_to_str.py > > +++ b/src/vulkan/util/gen_enum_to_str.py > > @@ -115,18 +115,18 @@ FOREIGN_ENUM_VALUES = [ > > ] > > > > > > -class EnumFactory(object): > > +class NamedFactory(object): > > """Factory for creating enums.""" > > > > def __init__(self, type_): > > self.registry = {} > > self.type = type_ > > > > -def __call__(self, name): > > +def __call__(self, *args): > > This is pretty ugly and clunky. What about > __call__(self, name, **kwargs), and pass kwargs directly to the type? > Fine with me. > > try: > > -return self.registry[name] > > +return self.registry[args[0]] > > except KeyError: > > -n = self.registry[name] = self.type(name) > > +n = self.registry[args[0]] = self.type(*args) > > return n > > > > > > @@ -138,7 +138,7 @@ class VkEnum(object): > > self.values = values or [] > > > > > > -def parse_xml(efactory, filename): > > +def parse_xml(enum_factory, filename): > > """Parse the XML file. Accumulate results into the efactory. > > > > This parser is a memory efficient iterative XML parser that returns > a list > > @@ -157,15 +157,15 @@ def parse_xml(efactory, filename): > > if event == 'end' and elem.tag == 'enums': > > type_ = elem.attrib.get('type') > > if type_ == 'enum': > > -enum = efactory(elem.attrib['name']) > > +enum = enum_factory(elem.attrib['name']) > > enum.values.extend([e.attrib['name'] for e in elem > > if e.tag == 'enum']) > > elif event == 'end' and elem.tag == 'extension': > > if elem.attrib['supported'] != 'vulkan': > > continue > > for e in elem.findall('.//enum[@extends][@offset]'): > > -enum = efactory(e.attrib['extends']) > > -enum.values.append(e.attrib['name']) > > +enum = enum_factory(e.attrib['extends']) > > +enum.values.append(e.attrib['name'],) > > > > root.clear() > > > > @@ -182,10 +182,10 @@ def main(): > > > > args = parser.parse_args() > > > > -efactory = EnumFactory(VkEnum) > > +enum_factory = NamedFactory(VkEnum) > > for filename in args.xml_files: > > -parse_xml(efactory, filename) > > -enums=sorted(efactory.registry.values(), key=lambda e: e.name) > > +parse_xml(enum_factory, filename) > > +enums=sorted(enum_factory.registry.values(), key=lambda e: e.name) > > > > for template, file_ in [(C_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.c')), > > (H_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.h'))]: > > -- > > 2.5.0.400.gff86faf > > > > ___ > > mesa-dev mailing list > > mesa-dev@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/mesa-dev > ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
Re: [Mesa-dev] [PATCH 3/6] vulkan: enum generator: make registry more flexible
Quoting Jason Ekstrand (2017-09-21 08:32:20) > From: Lionel Landwerlin> > It will be used to store extension numbers as well. > > Signed-off-by: Lionel Landwerlin > Reviewed-by: Jason Ekstrand > --- > src/vulkan/util/gen_enum_to_str.py | 22 +++--- > 1 file changed, 11 insertions(+), 11 deletions(-) > > diff --git a/src/vulkan/util/gen_enum_to_str.py > b/src/vulkan/util/gen_enum_to_str.py > index efe5d4f..5281e89 100644 > --- a/src/vulkan/util/gen_enum_to_str.py > +++ b/src/vulkan/util/gen_enum_to_str.py > @@ -115,18 +115,18 @@ FOREIGN_ENUM_VALUES = [ > ] > > > -class EnumFactory(object): > +class NamedFactory(object): > """Factory for creating enums.""" > > def __init__(self, type_): > self.registry = {} > self.type = type_ > > -def __call__(self, name): > +def __call__(self, *args): This is pretty ugly and clunky. What about __call__(self, name, **kwargs), and pass kwargs directly to the type? > try: > -return self.registry[name] > +return self.registry[args[0]] > except KeyError: > -n = self.registry[name] = self.type(name) > +n = self.registry[args[0]] = self.type(*args) > return n > > > @@ -138,7 +138,7 @@ class VkEnum(object): > self.values = values or [] > > > -def parse_xml(efactory, filename): > +def parse_xml(enum_factory, filename): > """Parse the XML file. Accumulate results into the efactory. > > This parser is a memory efficient iterative XML parser that returns a > list > @@ -157,15 +157,15 @@ def parse_xml(efactory, filename): > if event == 'end' and elem.tag == 'enums': > type_ = elem.attrib.get('type') > if type_ == 'enum': > -enum = efactory(elem.attrib['name']) > +enum = enum_factory(elem.attrib['name']) > enum.values.extend([e.attrib['name'] for e in elem > if e.tag == 'enum']) > elif event == 'end' and elem.tag == 'extension': > if elem.attrib['supported'] != 'vulkan': > continue > for e in elem.findall('.//enum[@extends][@offset]'): > -enum = efactory(e.attrib['extends']) > -enum.values.append(e.attrib['name']) > +enum = enum_factory(e.attrib['extends']) > +enum.values.append(e.attrib['name'],) > > root.clear() > > @@ -182,10 +182,10 @@ def main(): > > args = parser.parse_args() > > -efactory = EnumFactory(VkEnum) > +enum_factory = NamedFactory(VkEnum) > for filename in args.xml_files: > -parse_xml(efactory, filename) > -enums=sorted(efactory.registry.values(), key=lambda e: e.name) > +parse_xml(enum_factory, filename) > +enums=sorted(enum_factory.registry.values(), key=lambda e: e.name) > > for template, file_ in [(C_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.c')), > (H_TEMPLATE, os.path.join(args.outdir, > 'vk_enum_to_str.h'))]: > -- > 2.5.0.400.gff86faf > > ___ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev signature.asc Description: signature ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 3/6] vulkan: enum generator: make registry more flexible
From: Lionel LandwerlinIt will be used to store extension numbers as well. Signed-off-by: Lionel Landwerlin Reviewed-by: Jason Ekstrand --- src/vulkan/util/gen_enum_to_str.py | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/vulkan/util/gen_enum_to_str.py b/src/vulkan/util/gen_enum_to_str.py index efe5d4f..5281e89 100644 --- a/src/vulkan/util/gen_enum_to_str.py +++ b/src/vulkan/util/gen_enum_to_str.py @@ -115,18 +115,18 @@ FOREIGN_ENUM_VALUES = [ ] -class EnumFactory(object): +class NamedFactory(object): """Factory for creating enums.""" def __init__(self, type_): self.registry = {} self.type = type_ -def __call__(self, name): +def __call__(self, *args): try: -return self.registry[name] +return self.registry[args[0]] except KeyError: -n = self.registry[name] = self.type(name) +n = self.registry[args[0]] = self.type(*args) return n @@ -138,7 +138,7 @@ class VkEnum(object): self.values = values or [] -def parse_xml(efactory, filename): +def parse_xml(enum_factory, filename): """Parse the XML file. Accumulate results into the efactory. This parser is a memory efficient iterative XML parser that returns a list @@ -157,15 +157,15 @@ def parse_xml(efactory, filename): if event == 'end' and elem.tag == 'enums': type_ = elem.attrib.get('type') if type_ == 'enum': -enum = efactory(elem.attrib['name']) +enum = enum_factory(elem.attrib['name']) enum.values.extend([e.attrib['name'] for e in elem if e.tag == 'enum']) elif event == 'end' and elem.tag == 'extension': if elem.attrib['supported'] != 'vulkan': continue for e in elem.findall('.//enum[@extends][@offset]'): -enum = efactory(e.attrib['extends']) -enum.values.append(e.attrib['name']) +enum = enum_factory(e.attrib['extends']) +enum.values.append(e.attrib['name'],) root.clear() @@ -182,10 +182,10 @@ def main(): args = parser.parse_args() -efactory = EnumFactory(VkEnum) +enum_factory = NamedFactory(VkEnum) for filename in args.xml_files: -parse_xml(efactory, filename) -enums=sorted(efactory.registry.values(), key=lambda e: e.name) +parse_xml(enum_factory, filename) +enums=sorted(enum_factory.registry.values(), key=lambda e: e.name) for template, file_ in [(C_TEMPLATE, os.path.join(args.outdir, 'vk_enum_to_str.c')), (H_TEMPLATE, os.path.join(args.outdir, 'vk_enum_to_str.h'))]: -- 2.5.0.400.gff86faf ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev