Thread: [pygccxml-commit] SF.net SVN: pygccxml: [146] pygccxml_dev/docs
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-05-21 20:01:42
|
Revision: 146 Author: roman_yakovenko Date: 2006-05-21 13:01:26 -0700 (Sun, 21 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=146&view=rev Log Message: ----------- updating documentation Modified Paths: -------------- pygccxml_dev/docs/design.rest pygccxml_dev/pygccxml/parser/project_reader.py Added Paths: ----------- pygccxml_dev/docs/query_api.rest Modified: pygccxml_dev/docs/design.rest =================================================================== --- pygccxml_dev/docs/design.rest 2006-05-21 13:54:20 UTC (rev 145) +++ pygccxml_dev/docs/design.rest 2006-05-21 20:01:26 UTC (rev 146) @@ -1,9 +1,9 @@ -=============== +=============== pygccxml design =============== .. contents:: Table of contents - + ------------------------ The view from 10000 fits ------------------------ @@ -12,8 +12,8 @@ * ``declarations`` package defines classes that describe C++ declarations and types -* ``parser`` package defines classes that parse `GCC-XML`_ generared files. Also - it defines few classes that will help you to eliminate unnecessary parsing of +* ``parser`` package defines classes that parse `GCC-XML`_ generared files. Also + it defines few classes that will help you to eliminate unnecessary parsing of C++ source files. * ``utils`` package defines few functions, I found useful in the whole project. @@ -22,105 +22,105 @@ ``declarations`` package ------------------------- -Please take a look on `UML diagram`_. This `UML diagram`_ describes almost all -classes defined in the package and their relationship. ``declarations`` package -defines two hierarchies of class: - -1. types hiearchy - used to represent a C++ type - +Please take a look on `UML diagram`_. This `UML diagram`_ describes almost all +classes defined in the package and their relationship. ``declarations`` package +defines two hierarchies of class: + +1. types hierarchy - used to represent a C++ type + 2. declarations hierarchy - used to represent a C++ declaration. - + Types hierarchy --------------- -Types hierarchy is used to represent an arbitrary type in C++. class ``type_t`` -is the base class. +Types hierarchy is used to represent an arbitrary type in C++. class ``type_t`` +is the base class. ``type_traits`` ~~~~~~~~~~~~~~~ -Are you aware of `boost::type_traits`_ library? The `boost::type_traits`_ -library has been developed by John Maddock, Steve Cleary and others. The -`boost::type_traits`_ library contains a set of very specific traits classes, -each of which encapsulate a single trait from the C++ type system; for example, -is a type a pointer or a reference type? Or does a type have a trivial constructor, +Are you aware of `boost::type_traits`_ library? The `boost::type_traits`_ +library has been developed by John Maddock, Steve Cleary and others. The +`boost::type_traits`_ library contains a set of very specific traits classes, +each of which encapsulate a single trait from the C++ type system; for example, +is a type a pointer or a reference type? Or does a type have a trivial constructor, or a const-qualifier? -`pygccxml`_ implements a lot of functionality from the library: - -* a lot of algorithms has been implemented - - + ``is_same`` - - + ``is_enum`` - - + ``is_void`` - - + ``is_const`` - - + ``is_array`` - - + ``is_pointer`` - - + ``is_volatile`` - - + ``is_integral`` - - + ``is_reference`` - - + ``is_arithmetic`` - - + ``is_convertible`` - - + ``is_fundamental`` - - + ``is_floating_point`` - - + ``is_base_and_derived`` - - + ``is_unary_operator`` - - + ``is_binary_operator`` - - + ``remove_cv`` - - + ``remove_const`` - - + ``remove_alias`` - - + ``remove_pointer`` - - + ``remove_volatile`` - - + ``remove_reference`` - - + ``has_trivial_copy`` - - + ``has_trivial_constructor`` - - + ``has_any_non_copyconstructor`` - - For a full list of implemented algorithms, please consult API documentation. - -* a lot of unit tests has been written base on unit tests from the +`pygccxml`_ implements a lot of functionality from the library: + +* a lot of algorithms has been implemented + + + ``is_same`` + + + ``is_enum`` + + + ``is_void`` + + + ``is_const`` + + + ``is_array`` + + + ``is_pointer`` + + + ``is_volatile`` + + + ``is_integral`` + + + ``is_reference`` + + + ``is_arithmetic`` + + + ``is_convertible`` + + + ``is_fundamental`` + + + ``is_floating_point`` + + + ``is_base_and_derived`` + + + ``is_unary_operator`` + + + ``is_binary_operator`` + + + ``remove_cv`` + + + ``remove_const`` + + + ``remove_alias`` + + + ``remove_pointer`` + + + ``remove_volatile`` + + + ``remove_reference`` + + + ``has_trivial_copy`` + + + ``has_trivial_constructor`` + + + ``has_any_non_copyconstructor`` + + For a full list of implemented algorithms, please consult API documentation. + +* a lot of unit tests has been written base on unit tests from the `boost::type_traits`_ library. - - + + If you are going to build code generator, you will find ``type_traits`` very handy. Declarations hierarchy ---------------------- -A declaration hierarchy is used to represent an arbitrary C++ declaration. +A declaration hierarchy is used to represent an arbitrary C++ declaration. Basically, most of the classes defined in this package are just "set of properties". ``declaration_t`` is the base class of the declaration hierarchy. Every declaration -has ``parent`` property. This property keeps a reference to the scope declaration -instance, in which this declaration is defined. +has ``parent`` property. This property keeps a reference to the scope declaration +instance, in which this declaration is defined. -The ``scopedef_t`` class derives from ``declaration_t``. This class is used to -say - "I may have other declarations inside". The "composite" design pattern is +The ``scopedef_t`` class derives from ``declaration_t``. This class is used to +say - "I may have other declarations inside". The "composite" design pattern is used here. ``class_t`` and ``namespace_t`` declaration classes derive from the ``scopedef_t`` class. @@ -128,8 +128,8 @@ ``parser`` package ------------------ -Please take a look on `parser package UML diagram`_ . Classes defined in this -package implement parsing and linking functionality. There are few kind of +Please take a look on `parser package UML diagram`_ . Classes defined in this +package implement parsing and linking functionality. There are few kind of classes defined by the package: * classes, that implements parsing algorithms of `GCC-XML`_ generated XML file @@ -138,73 +138,136 @@ * cache - classes, those one will help you to eliminate unnecessary parsing -* patchers - classes, that fix `GCC-XML`_ generated declarations. ( Yes, sometimes +* patchers - classes, that fix `GCC-XML`_ generated declarations. ( Yes, sometimes GCC-XML generates wrong description of C++ declaration. ) Parser classes -------------- -``source_reader_t`` - the only class that have an intime knowledge about `GCC-XML`_. +``source_reader_t`` - the only class that have an detailed knowledge about `GCC-XML`_. It has only one responsibility: it calls `GCC-XML`_ with a source file specified by user and creates declarations tree. The implementation of this class is split to 2 classes: - -1. ``scanner_t`` - this class scans the "XML" file, generated by `GCC-XML`_ and - creates `pygccxml`_ declarations and types classes. After the xml file has - been processed declarations and type class instances keeps references to - each other using `GCC-XML`_ generated id's. - -2. ``linker_t`` - this class contains logic for replacing `GCC-XML`_ generated + +1. ``scanner_t`` - this class scans the "XML" file, generated by `GCC-XML`_ and + creates `pygccxml`_ declarations and types classes. After the xml file has + been processed declarations and type class instances keeps references to + each other using `GCC-XML`_ generated id's. + +2. ``linker_t`` - this class contains logic for replacing `GCC-XML`_ generated ids with references to declarations or type class instances. -Both those classes are implementation details and should not be used by user. -Performance note: ``scanner_t`` class uses Python ``xml.sax`` package in order -to parse XML. As a result, ``scanner_t`` class is able to parse even big XML files -pretty quick. - -``project_reader_t`` - think about this class as a linker. In most cases you work +Both those classes are implementation details and should not be used by user. +Performance note: ``scanner_t`` class uses Python ``xml.sax`` package in order +to parse XML. As a result, ``scanner_t`` class is able to parse even big XML files +pretty quick. + +``project_reader_t`` - think about this class as a linker. In most cases you work with few source files. GCC-XML does not supports this mode of work. So, `pygccxml`_ -implements all functionlity needed to parse few source files at once. +implements all functionality needed to parse few source files at once. ``project_reader_t`` implements 2 different algorithms, that solves the problem: -1. ``project_reader_t`` creates temporal source file, that includes all the source - files. +1. ``project_reader_t`` creates temporal source file, that includes all the source + files. -2. ``project_reader_t`` parse separetly every source file, using ``source_reader_t`` +2. ``project_reader_t`` parse separately every source file, using ``source_reader_t`` class and then joins the resulting declarations tree into single declarations tree. - + Both approaches have different trades-off. The first approach does not allow you -to reuse information from already parsed source files. While the second one -allows you to setup cache. - -Parser configuration classes ----------------------------- +to reuse information from already parsed source files. While the second one +allows you to setup cache. -``config_t`` - a class, that accumulates all the settings needed to invoke `GCC-XML`_: - - -``file_configuration_t`` - a class, that contains some data and description how -to treat the data. ``file_configuration_t`` can contain reference to the next types -of data: - -(1) path to C++ source file - -(2) path to `GCC-XML`_ generated XML file - -(3) path to C++ source file and path to `GCC-XML`_ generated XML file - - In this case, if XML file does not exists, it will be created. Next time - user will ask to parse the source file, the XML file will be used instead. - -(4) Python string, that contains valid C++ code - - -Cache classes -------------- - +Parser configuration classes +---------------------------- +``config_t`` - a class, that accumulates all the settings needed to invoke `GCC-XML`_: + +``file_configuration_t`` - a class, that contains some data and description how +to treat the data. ``file_configuration_t`` can contain reference to the next types +of data: + +(1) path to C++ source file + +(2) path to `GCC-XML`_ generated XML file + +(3) path to C++ source file and path to `GCC-XML`_ generated XML file + + In this case, if XML file does not exists, it will be created. Next time + you will ask to parse the source file, the XML file will be used instead. + + Small tip: you can setup your makefile to delete XML files every time, + the relevant source file has changed. + +(4) Python string, that contains valid C++ code + +There are few functions, that will help you to construct ``file_configuration_t`` +object: + +* ``def create_source_fc( header )`` + + ``header`` contains path to C++ source file + +* ``def create_gccxml_fc( xml_file )`` + + ``xml_file`` contains path to `GCC-XML`_ generated XML file + +* ``def create_cached_source_fc( header, cached_source_file )`` + + - ``header`` contains path to C++ source file + - ``xml_file`` contains path to `GCC-XML`_ generated XML file + +* ``def create_text_fc( text )`` + + ``text`` - Python string, that contains valid C++ code + + +Cache classes +------------- + +There are few cache classes, that implements different cache strategies. My +advise - don't use them. Your best choice is ``file_configuration_t``, +configured to C++ source file + `GCC-XML`_ generated file. + +* ``file_cache_t`` class, will save all declarations from all files within single + binary file. + +* ``directory_cache_t`` class will store one index file called "index.dat" which + is always read by the cache when the cache object is created. Each header file + will have its corresponding \*.cache file that stores the declarations found + in the header file. The index file is used to determine whether a \*.cache file + is still valid or not (by checking if one of the dependent files + (i.e. the header file itself and all included files) have been modified since + the last run). + +As you can guess, ``directory_cache_t`` class gives much better performance, than +``file_cache_t``. Many thanks to Matthias Baas for its implemention. + + +Patchers +-------- + +????. Well, `GCC-XML`_ has few bugs, that could not be fixed from it. For example +:: + + namespace ns1{ namespace ns2{ + enum fruit{ apple, orange }; + } } + + void fix_enum( ns1::ns2::fruit arg=ns1::ns2::apple ); + +`GCC-XML`_ will report the default value of ``arg`` as ``apple``. Obviously +this in an error. `pygccxml`_ knows how to fix different bugs. + +------- +Summary +------- + +Thats all. I hope I was clear, at least I tried. Any way we are talking about +open source project. You can take a look on source code. If you need more information +you can take a look on API documentation. + .. _`pygccxml`: ./pygccxml.html .. _`SourceForge`: http://sourceforge.net/index.php .. _`Python`: http://www.python.org Added: pygccxml_dev/docs/query_api.rest =================================================================== --- pygccxml_dev/docs/query_api.rest (rev 0) +++ pygccxml_dev/docs/query_api.rest 2006-05-21 20:01:26 UTC (rev 146) @@ -0,0 +1,67 @@ +=============================== +pygccxml.declarations query API +=============================== + +.. contents:: Table of contents + +------------ +Introduction +------------ +You parsed the source files. Now you have to do some real work with the extracted +information, right? `pygccxml`_ provides very powerful and simple interface to +query about extracted declrations. + +Just an example. I want to select all member functions, that have 2 arguments. +I don't care about first argument type, but I do want second argument type to be +a reference to an integer. More over, I want those functions names to end with +"impl" string and they should be protected or private. +:: + + #global_ns is the reference to an instance of namespace_t object, that + #represents global namespace + query = declarations.custom_matcher_t( lambda mem_fun: mem_fun.name.endswith( 'impl' ) + query = query & ~declarations.access_type_matcher_t( 'public' ) + global_ns.member_functions( function=query, arg_types=[None, 'int &'] ) + +As for me the example I gave was too complex. In many cases you will find your +self looking for one or many declarations using one or two properties of that +declaration(s). For example: +:: + + global_ns.namespaces( 'details' ) + +This call will return all namespaces that have 'details' namespace. + +------------------ +How does it works? +------------------ + +As you already know, ``pygccxml.declarations`` packages defines next classes: + +* ``scopedef_t`` - base class for all classes, that can contain other declarations + +* ``namespace_t`` - derives from ``scopedef_t`` class, represents C++ namespace + +* ``class_t`` - derives from ``scopedef_t`` class, represents C++ class/struct. + +``scopedef_t`` class defines query interface. Basicaly you can ask it about any +declaration it contains, even about some sub declarations. + + + + +.. _`pygccxml`: ./pygccxml.html +.. _`SourceForge`: http://sourceforge.net/index.php +.. _`Python`: http://www.python.org +.. _`GCC-XML`: http://www.gccxml.org +.. _`UML diagram` : ./declarations_uml.png +.. _`parser package UML diagram` : ./parser_uml.png +.. _`ReleaseForge` : http://releaseforge.sourceforge.net +.. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: \ No newline at end of file Modified: pygccxml_dev/pygccxml/parser/project_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/project_reader.py 2006-05-21 13:54:20 UTC (rev 145) +++ pygccxml_dev/pygccxml/parser/project_reader.py 2006-05-21 20:01:26 UTC (rev 146) @@ -17,51 +17,38 @@ class file_configuration_t( object ): - """ - file_configuration_t class is cool feature. When you want to parse C++ code - from different sources at once, you should use this class. -class instance you should pass list of files. This list can contain string( == file paths ) and/or instances of file_configuration_t class. + """ + file_configuration_t - a class, that contains some data and description how + to treat the data. file_configuration_t can contain reference to the next types + of data: + + 1) path to C++ source file + + 2) path to `GCC-XML`_ generated XML file + + 3) path to C++ source file and path to `GCC-XML`_ generated XML file + + In this case, if XML file does not exists, it will be created. Next time + you will ask to parse the source file, the XML file will be used instead. + + Small tip: you can setup your makefile to delete XML files every time, + the relevant source file has changed. + + 4) Python string, that contains valid C++ code + + + There are few functions, that will help you to construct file_configuration_t + object: -file_configuration_t is class with fat interface. -It has 4 states: - 1. it could contain reference to source file. - Use "create_source_fc" function to create an instance of file_configuration_t + * L{create_source_fc} + + * L{create_gccxml_fc} + + * L{create_cached_source_fc} - 2. it could contain reference to source file and xml file. In this case if xml file - exist, source file will not be parsed by gccxml. If xml file does not exists, source - file will be parsed and xml file will be saved for future use. - See create_cached_source_fc function - - 3. it could contain reference to xml file only - See create_gccxml_fc - - 4. it could contain some text. In this case, parser will create temporal file on - disk and will pass it as an argument to gccxml. - See create_text_fc - -In most cases you don't all those features. If I were you, I would create regular -source file and put all template instantiation there. - -Any way the code: - -tmpl_inst = ''' -===================== - #include "TempClass.h" - - namespace details{ - inline void export_templates(){ - sizeof( TempClass<int> ); - } - } -''' - -import module_builder -mb = module_builder.module_builder_t( - [ module_builder.create_text_fc( tmpl_inst ) ] - , .... ) - -""" - + * L{create_text_fc} + + """ class CONTENT_TYPE: STANDARD_SOURCE_FILE = 'standard source file' CACHED_SOURCE_FILE = 'cached source file' @@ -101,18 +88,59 @@ cached_source_file = property( __get_cached_source_file ) def create_text_fc( text ): + """ + Creates L{file_configuration_t} instance, configured to contain Python string, + that contains valid C++ code + + @param text: C++ code + @type text: str + + @return: L{file_configuration_t} + """ return file_configuration_t( data=text , content_type=file_configuration_t.CONTENT_TYPE.TEXT ) def create_source_fc( header ): + """ + Creates L{file_configuration_t} instance, configured to contain path to + C++ source file + + @param header: path to C++ source file + @type header: str + + @return: L{file_configuration_t} + """ return file_configuration_t( data=header , content_type=file_configuration_t.CONTENT_TYPE.STANDARD_SOURCE_FILE ) def create_gccxml_fc( xml_file ): + """ + Creates L{file_configuration_t} instance, configured to contain path to + GCC-XML generated XML file. + + @param xml_file: path to GCC-XML generated XML file + @type xml_file: str + + @return: L{file_configuration_t} + """ return file_configuration_t( data=xml_file , content_type=file_configuration_t.CONTENT_TYPE.GCCXML_GENERATED_FILE ) def create_cached_source_fc( header, cached_source_file ): + """ + Creates L{file_configuration_t} instance, configured to contain path to + GCC-XML generated XML file and C++ source file. If XML file does not exists, + it will be created and used for parsing. If XML file exists, it will be used + for parsing. + + @param header: path to C++ source file + @type header: str + + @param cached_source_file: path to GCC-XML generated XML file + @type cached_source_file: str + + @return: L{file_configuration_t} + """ return file_configuration_t( data=header , cached_source_file=cached_source_file , content_type=file_configuration_t.CONTENT_TYPE.CACHED_SOURCE_FILE ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-22 06:47:17
|
Revision: 148 Author: roman_yakovenko Date: 2006-05-21 23:47:04 -0700 (Sun, 21 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=148&view=rev Log Message: ----------- fixing broken links within documentation Modified Paths: -------------- pygccxml_dev/docs/download.rest pyplusplus_dev/docs/download.rest Modified: pygccxml_dev/docs/download.rest =================================================================== --- pygccxml_dev/docs/download.rest 2006-05-22 06:25:35 UTC (rev 147) +++ pygccxml_dev/docs/download.rest 2006-05-22 06:47:04 UTC (rev 148) @@ -21,10 +21,10 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ---------- -CVS access +SVN access ---------- -https://sourceforge.net/cvs/?group_id=118209 +http://sourceforge.net/svn/?group_id=118209 ------------ Installation @@ -44,8 +44,8 @@ * `GCC-XML`_ .. _`pygccxml` : ./../pygccxml/pygccxml.html -.. _`SourceForge`: http://sourceforge.net/index.php .. _`GCC-XML`: http://www.gccxml.org + .. Local Variables: mode: indented-text Modified: pyplusplus_dev/docs/download.rest =================================================================== --- pyplusplus_dev/docs/download.rest 2006-05-22 06:25:35 UTC (rev 147) +++ pyplusplus_dev/docs/download.rest 2006-05-22 06:47:04 UTC (rev 148) @@ -21,10 +21,10 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ---------- -CVS access +SVN access ---------- -https://sourceforge.net/cvs/?group_id=118209 +http://sourceforge.net/svn/?group_id=118209 ------------ Installation @@ -46,12 +46,7 @@ .. _`pyplusplus` : ./pyplusplus.html .. _`pygccxml` : ./../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html -.. _`SourceForge`: http://sourceforge.net/index.php -.. _`Docutils`: http://docutils.sourceforge.net -.. _`Python`: http://www.python.org -.. _`GCC-XML`: http://www.gccxml.org -.. _`Debian Linux`: http://www.debian.org + .. Local Variables: mode: indented-text This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-22 20:34:34
|
Revision: 149 Author: roman_yakovenko Date: 2006-05-22 13:34:23 -0700 (Mon, 22 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=149&view=rev Log Message: ----------- improving documentation Modified Paths: -------------- pygccxml_dev/docs/design.rest pygccxml_dev/docs/example/example.py pygccxml_dev/docs/pygccxml.rest Modified: pygccxml_dev/docs/design.rest =================================================================== --- pygccxml_dev/docs/design.rest 2006-05-22 06:47:04 UTC (rev 148) +++ pygccxml_dev/docs/design.rest 2006-05-22 20:34:23 UTC (rev 149) @@ -248,7 +248,7 @@ Patchers -------- -????. Well, `GCC-XML`_ has few bugs, that could not be fixed from it. For example +Well, `GCC-XML`_ has few bugs, that could not be fixed from it. For example :: namespace ns1{ namespace ns2{ @@ -258,15 +258,19 @@ void fix_enum( ns1::ns2::fruit arg=ns1::ns2::apple ); `GCC-XML`_ will report the default value of ``arg`` as ``apple``. Obviously -this in an error. `pygccxml`_ knows how to fix different bugs. +this in an error. `pygccxml`_ knows how to fix this bug. +This is not the only bug, that could be fixed, there are few of them. `pygccxml`_ +introduces few classes, that knows how to deal with specific bug. More over, those +bugs are fixed, only if I am 101% sure, that this is the right thing to do. + ------- Summary ------- -Thats all. I hope I was clear, at least I tried. Any way we are talking about -open source project. You can take a look on source code. If you need more information -you can take a look on API documentation. +Thats all. I hope I was clear, at least I tried. Any way, `pygccxml`_ is an open +source project. You always can take a look on the source code. If you need more +information please read API documentation. .. _`pygccxml`: ./pygccxml.html .. _`SourceForge`: http://sourceforge.net/index.php Modified: pygccxml_dev/docs/example/example.py =================================================================== --- pygccxml_dev/docs/example/example.py 2006-05-22 06:47:04 UTC (rev 148) +++ pygccxml_dev/docs/example/example.py 2006-05-22 20:34:23 UTC (rev 149) @@ -3,21 +3,24 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +import sys +sys.path.append('../..') #adding pygccxml to the path + from pygccxml import parser from pygccxml import declarations #configure GCC-XML parser -config = parser.config_t( gccxml_path=r'/home/roman/gccxml/bin/gccxml' ) +config = parser.config_t( gccxml_path='/home/roman/gccxml-build/bin/gccxml' ) + #parsing source file -global_ns = parser.parse( ['core_class_hierarchy.hpp'], config ) +decls = parser.parse( ['core_class_hierarchy.hpp'], config ) +global_ns = declarations.get_global_namespace( decls ) + #printing all declarations found in file and its includes declarations.print_declarations( global_ns ) -#selecting all classes -all_decls = declarations.make_flatten( global_ns ) -all_classes = filter( lambda decl: isinstance( decl, declarations.class_t ) - , all_decls ) + #print all base and derived class names -for class_ in all_classes: +for class_ in global_ns.classes(): print class_.name print '\tbases: ', `[base.related_class.name for base in class_.bases]` print '\tderived: ', `[derive.related_class.name for derive in class_.derived]` Modified: pygccxml_dev/docs/pygccxml.rest =================================================================== --- pygccxml_dev/docs/pygccxml.rest 2006-05-22 06:47:04 UTC (rev 148) +++ pygccxml_dev/docs/pygccxml.rest 2006-05-22 20:34:23 UTC (rev 149) @@ -36,272 +36,91 @@ Usage example ------------- First of all let's see a small and simple `example`_. This example prints all -declarations found in the global namespace after `GCC-XML`_ has parsed -`core_class_hierarchy.hpp`_ file. Also it prints all clasess, and for every class -it will print it's base and derived classes. It was simple task, right? If you -are still curious how it looks "in the real life", I mean how xml file -is look like, you may look at the `original XML file`_ generated by `GCC-XML`_. +declarations, reported by `GCC-XML`_ after parsing `core_class_hierarchy.hpp`_ +file. Also it prints all clasess, and for every class it will print it's base +and derived classes. It was simple task, right? If you are still curious how it +looks "in the real life", I mean how xml file is look like, you may look at the +`original XML file`_ generated by `GCC-XML`_. .. _`original XML file` : ./example/core_class_hierarchy.hpp.xml .. _`core_class_hierarchy.hpp` : ./example/core_class_hierarchy.hpp .. _`example` : ./example/example.py - -I like it, but what else can you propose? ------------------------------------------ +-------- +Features +-------- + +Caching +------- + Consider the following situation: you have to parse the same set of files every -day. There are 2 possibile ways to complete the task:: +day. There are 2 possibile ways to complete the task: - * create a header file that includes all files you need to parse +* create a header file that includes all files you need to parse - * parse each file separately and then join the results +* parse each file separately and then join the results The difference between these approaches is the caching algorithm used in the second case. `pygccxml`_ supports both of them. -That's not all. Do you familiar with the `boost::type_traits`_ library? Well, -`pygccxml`_ includes some functionality offered by that library. +Type traits +----------- -------- -License -------- +`pygccxml`_ provides a lot of functionality to analize C++ types and relationship +between them. For more information please refer to `design`__ document or API +documentation. Just a few names of algorithms: -`Boost Software License`_. +* ``is_convertible( from, to )`` -------------------------- -Declaration class diagram -------------------------- -`UML diagram`_: - - Look at this `UML diagram`_. All the classes are defined by the - `pygccxml`_.declarations package. Defined classes are used to describe almost - any C++ declaration. - -A few words about the naming convention used. Every class name ends with "_t". -The are several reasons for this: - - * I am used to the C++ "std" convention, i.e. lower-case letters with underscores. - - * Most of the names are already used in Python, and have a different meaning. - -Types hierarchy ---------------- - -Types hierarchy is used to represent an arbitrary type in C++. - -Example -~~~~~~~ - -For a variable "ptr" - - *const int\* ptr=0;* - -`pygccxml`_ will create the type - - *pointer_t( const_t( int_t() ) )* - -The ability to represent almost any type of C++ comes from the use of the -"decorator" pattern. That's not all! Are you aware of `boost::type_traits`_ -library? The `boost::type_traits`_ library has been developed by John Maddock, -Steve Cleary and others. `pygccxml`_ reuses the names proposed by this library. -Also I took few ideas for testing the `pygccxml`_ type traits implementation. -Here are some of the type traits implemented by `pygccxml`_. - - + *base_type* - - + *decompose_type* - - + *decompose_class* - - + *is_same* - - + *is_enum* - - + *is_void* - - + *is_const* - - + *is_array* - - + *is_pointer* - - + *is_volatile* - - + *is_integral* - - + *is_reference* - - + *is_arithmetic* - - + *is_convertible* - - + *is_fundamental* - - + *is_floating_point* - - + *is_base_and_derived* - - + *is_unary_operator* - - + *is_binary_operator* - - + *remove_cv* - - + *remove_const* - - + *remove_alias* - - + *remove_pointer* - - + *remove_volatile* - - + *remove_reference* - - + *has_trivial_copy* - - + *has_trivial_constructor* - - + *find_trivial_constructor* - - + *has_any_non_copyconstructor* - - + *...* - -Declaration hierarchy ---------------------- - -A declaration hierarchy is used to represent an arbitrary C++ declaration. - -*"declaration_t"* is the base class of the declaration hierarchy. This class has -a few properties. One of them is the *"parent"* property. This property keeps a -reference to the scope declaration instance in which this declaration is defined. -The *"scopedef_t"* class derives from *"declaration_t"*. This class is used to -say - "I may have other declarations inside". The "composite" design pattern is -used here. - ------- -Parser ------- - -User API --------- - -`Parser package`_ ( "`pygccxml`_.parser" ). This is the heart of the `pygccxml`_ -project. Classes in this package implement parsing and binding functionality. -There are 3 classes and 2 functions that user should know about: - -+ *config_t* - a class that accumulates all the settings of `GCC-XML`_ and - `pygccxml`_. Users can work with relative files paths. In this case files are - searched in the following order: + returns ``True`` if there is a conversion from type ``from`` to type ``to``, + otherwise ``False`` - 1. current directory - - 2. working directory - - 3. additional include paths specified by the user +* ``is_unary_operator( oper )`` -+ *source_reader_t* - the only class that works with `GCC-XML`_. This class has - only one responsibility: to convert source file declarations and types into the - `pygccxml`_ object model. You can think about this class as simply a reader for - `GCC-XML`_-generated files. + returns ``True`` if ``oper`` describes unary operator -+ *project_reader_t* - think of this class as a linker or a binder. Explanation: - usually you will define a base class in one header file and a derived class in - another. After running *source_reader_t* on the base class header file and on - the derived class header file you will have two definitions of the base class. - All but one of the definitions will not contain information about the derived - classes. *project_reader_t* was born to solve this situation. It implements - several algorithms to solve that problem and other similar ones. Right now it - implements these algorithms: +.. __: ./design.html - 1. namespace joining. - 2. joining class hierarchies - 3. rebinding types to new class hierarchies - 4. linking overloaded functions - There are 2 ways to solve the problem: +Query interface +--------------- - 1. Compile every file to run the algorithms. In order to select this mode - set *compilation_mode* (in the instance of *config_t*) to *COMPILATION_MODE.FILE_BY_FILE*. +`pygccxml`_ provides simple and powerful API to query declarations tree. I will +try to give small example, that will prove my point. If you want to know more +about provided API please read `query api`__ document or API documentation. +Examples: +:: - 2. Create a temporary header file, that will include all headers you want to - compile. In order to select this mode set *compilation_mode* (in the instance - of *config_t* ) to *COMPILATION_MODE.ALL_AT_ONCE*. In other words, in this - mode *project_reader_t* acts like *source_reader_t*, there's no difference. - - Two modes, why?! The answer is simple - the cache. You don't want to pay for - compilation and processing results for files that have not changed, right? - *COMPILATION_MODE.FILE_BY_FILE* gives you the possibility to use the cache! - For further explanation please see `Parser package`_ design. - -Interface description -~~~~~~~~~~~~~~~~~~~~~ - -*project_reader_t* and *source_reader_t* -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -+ *__init__( self, config, declarations_cache )* - *source_reader_t* allows - *declarations_cache* to be or instance of *cache_base_t* or None. *project_reader_t* - allows *declarations_cache* to be also path to cache file. - -+ *read_string(self, content)* - small convenience function. The *content* - should be valid C++ code. This function will return the list of top level - namespaces. - -+ *source_reader_t.read_file(self, source_file)* This function will return - the list of top level namespaces. - -+ *project_reader_t.read_files(self, files)* This function will return the top - level namespaces list. *files* - list of files to be compiled. This list may - contain a file name ( string ) or instance of class *file_configuration_t*. - If the item is an instance of class *file_configuration_t* then the file will - be compiled and parsed using its configuration. The project configuration stays - unchanged. - -+ *source_reader_t.create_xml_file(self, source_file, destination_file_path=None)* - This function will return the file name of the file, created by `GCC-XML`_. If - *destination_file_path* is not *None* then this file path will be used and - returned. - -+ *source_reader_t.read_xml_file(self, xmlfile)* This function will return the - top level namespaces list. - - Right now top level namespaces are: "::" and "std". - - The main purpose of *source_reader_t.create_xml_file* and *source_reader_t.read_xml_file* - is to ease cross-platform development. + #global_ns is the reference to declarations that describes C++ namespace. + #In our case, instance of that declarations describes global ( :: ) namespace. + global_ns.free_functions( "do_smth", return_type='void', arg_types=[None,'int'] ) -*pygccxml.parser* -^^^^^^^^^^^^^^^^^ -There are 2 functions: +Small explanation. Assume that ``None`` means "any type". Now the code is pretty +readable: +:: - 1. *parse(files, config=None, declarations_cache=None)* - 2. *parse_string(content, config=None)* + select all free functions + where + name equal to "do_smth" + return type is void + function has two arguments + second argument type is int -Those are *"shortcuts"* functions for *project_reader_t* class. +.. __: ./query_api.html +------- +License +------- -Implementation notes -~~~~~~~~~~~~~~~~~~~~ +`Boost Software License`_. -There are 2 private classes in this package: - - 1. *scanner_t* - this class scans the "XML" file, generated by `GCC-XML`_ and - creates `pygccxml`_ declarations and types classes. After the xml file has - been processed declarations and type class instances keeps references to - each other using `GCC-XML`_ generated id's. - - 2. *linker_t* - this class contains logic for replacing `GCC-XML`_ generated - ids with references to declarations or type class instances. - - ----------------- Test environments ----------------- `pygccxml`_ comes with comprehensive unit tests. It is running on Windows XP and -`Debian Linux`_. I am using `Python`_ [ 2.3 | 2.4 ] and `GCC-XML`_ [ 0.6.0 | CVS ]. +`Ubuntu`_. I am using `Python`_ 2.4 and `GCC-XML`_ CVS. Right now I am running more then 100 tests. They test almost every piece of code. Also I have performance tests. Most of the time I am using "white box" testing strategy. @@ -314,10 +133,7 @@ .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org .. _`Boost Software License`: http://boost.org/more/license_info.html -.. _`Debian Linux`: http://www.debian.org -.. _`UML diagram` : ./declarations_uml.png -.. _`Parser package` : ./parser_uml.png -.. _`ReleaseForge` : http://releaseforge.sourceforge.net +.. _`Ubuntu`: http://www.ubuntu.com/ .. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html .. Local Variables: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-25 06:54:22
|
Revision: 163 Author: roman_yakovenko Date: 2006-05-24 23:54:11 -0700 (Wed, 24 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=163&view=rev Log Message: ----------- updating docs Modified Paths: -------------- pygccxml_dev/docs/www_configuration.py Added Paths: ----------- pygccxml_dev/docs/query_interface.rest Removed Paths: ------------- pygccxml_dev/docs/query_api.rest Deleted: pygccxml_dev/docs/query_api.rest =================================================================== --- pygccxml_dev/docs/query_api.rest 2006-05-24 20:36:00 UTC (rev 162) +++ pygccxml_dev/docs/query_api.rest 2006-05-25 06:54:11 UTC (rev 163) @@ -1,91 +0,0 @@ -=============================== -pygccxml.declarations query API -=============================== - -.. contents:: Table of contents - ------------- -Introduction ------------- -You parsed the source files. Now you have to do some real work with the extracted -information, right? `pygccxml`_ provides very powerful and simple interface to -query about extracted declrations. - -Just an example. I want to select all member functions, that have 2 arguments. -I don't care about first argument type, but I do want second argument type to be -a reference to an integer. More over, I want those functions names to end with -"impl" string and they should be protected or private. -:: - - #global_ns is the reference to an instance of namespace_t object, that - #represents global namespace - query = declarations.custom_matcher_t( lambda mem_fun: mem_fun.name.endswith( 'impl' ) - query = query & ~declarations.access_type_matcher_t( 'public' ) - global_ns.member_functions( function=query, arg_types=[None, 'int &'] ) - -As for me, the example I gave was too complex. In many cases you will find your -self looking for one or many declarations using one or two properties of that -declaration(s). For example: -:: - - global_ns.namespaces( 'details' ) - -This call will return all namespaces with name 'details'. - --------------- -User interface --------------- - -As you already know, ``pygccxml.declarations`` packages defines next classes: - -* ``scopedef_t`` - base class for all classes, that can contain other declarations - -* ``namespace_t`` - derives from ``scopedef_t`` class, represents C++ namespace - -* ``class_t`` - derives from ``scopedef_t`` class, represents C++ class/struct. - -So, the query methods defined on ``scopedef_t`` class could be used on instances -of ``class_t`` and ``namespace_t`` classes. - -I will explain the usage of ``member_function`` and ``member_functions`` methods. -The usage of other methods is very similar to them. Here is definition of those -methods: -:: - - def member_function( self, - name=None, - function=None, - return_type=None, - arg_types=None, - header_dir=None, - header_file=None, - recursive=None ) - - def member_functions( self, - name=None, - function=None, - return_type=None, - arg_types=None, - header_dir=None, - header_file=None, - recursive=None, - allow_empty=None ) - - - - -.. _`pygccxml`: ./pygccxml.html -.. _`SourceForge`: http://sourceforge.net/index.php -.. _`Python`: http://www.python.org -.. _`GCC-XML`: http://www.gccxml.org -.. _`UML diagram` : ./declarations_uml.png -.. _`parser package UML diagram` : ./parser_uml.png -.. _`ReleaseForge` : http://releaseforge.sourceforge.net -.. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html -.. - Local Variables: - mode: indented-text - indent-tabs-mode: nil - sentence-end-double-space: t - fill-column: 70 - End: \ No newline at end of file Copied: pygccxml_dev/docs/query_interface.rest (from rev 162, pygccxml_dev/docs/query_api.rest) =================================================================== --- pygccxml_dev/docs/query_interface.rest (rev 0) +++ pygccxml_dev/docs/query_interface.rest 2006-05-25 06:54:11 UTC (rev 163) @@ -0,0 +1,185 @@ +=============================== +pygccxml.declarations query API +=============================== + +.. contents:: Table of contents + +------------ +Introduction +------------ +You parsed the source files. Now you have to do some real work with the extracted +information, right? `pygccxml`_ provides very powerful and simple interface to +query about extracted declrations. + +Just an example. I want to select all member functions, that have 2 arguments. +I don't care about first argument type, but I do want second argument type to be +a reference to an integer. More over, I want those functions names to end with +"impl" string and they should be protected or private. +:: + + #global_ns is the reference to an instance of namespace_t object, that + #represents global namespace + query = declarations.custom_matcher_t( lambda mem_fun: mem_fun.name.endswith( 'impl' ) + query = query & ~declarations.access_type_matcher_t( 'public' ) + global_ns.member_functions( function=query, arg_types=[None, 'int &'] ) + +As for me, the example I gave was too complex. In many cases you will find your +self looking for one or many declarations using one or two properties of that +declaration(s). For example: +:: + + global_ns.namespaces( 'details' ) + +This call will return all namespaces with name 'details'. + +-------------- +User interface +-------------- + +As you already know, ``pygccxml.declarations`` packages defines next classes: + +* ``scopedef_t`` - base class for all classes, that can contain other declarations + +* ``namespace_t`` - derives from ``scopedef_t`` class, represents C++ namespace + +* ``class_t`` - derives from ``scopedef_t`` class, represents C++ class/struct. + +So, the query methods defined on ``scopedef_t`` class could be used on instances +of ``class_t`` and ``namespace_t`` classes. + +I will explain the usage of ``member_function`` and ``member_functions`` methods. +The usage of other methods is very similar to them. Here is definition of those +methods: +:: + + def member_function( self, + name=None, + function=None, + return_type=None, + arg_types=None, + header_dir=None, + header_file=None, + recursive=None ) + + + def member_functions( self, + name=None, + function=None, + return_type=None, + arg_types=None, + header_dir=None, + header_file=None, + recursive=None, + allow_empty=None ) + +As you can see, from the methods arguments you can search for member function +by: + + * ``name`` + + Python string, that contains member function name or full name. + + ``do_smth = my_class.member_function( 'do_smth' )`` + ``do_smth = my_class.member_function( 'my_namespace::my_class::do_smth' )`` + + * ``function`` + + Python callable object. You would use this functionality, if you need to + build custom query. This object will be called with one argument - declaration, + and it should return ``True`` or ``False``. + + ``impls = my_class.member_functions( lambda decl: decl.name.endswith( 'impl' ) )`` + + ``impls`` will contain all member functions, that thier name ends with "impl". + + * ``return_type`` + + Function return type. This argument can be Python string or an object that + describes C++ type. + + ``mem_funcs = my_class.member_functions( return_type='int' )`` + + ``i = declarations.int_t()`` + ``ref_i = declarations.reference_t( i )`` + ``const_ref_i = declarations.const_t( ref_i )`` + ``mem_funcs = my_class.member_functions( return_type=const_ref_int )`` + + * ``arg_types`` + + Python list that contains description of member function argument types. + This list could be a mix of Python strings and objects that describes C++ + type. Size of list says how many arguments function should have. If you want + to skip some argument type from within comparison, you put ``None``, into + relevant position within the list. + + ``mem_funcs = my_class.member_functions( arg_types=[ None, 'int'] )`` + + ``mem_funcs`` will contain all member functions, that have two arguments + and type of second argument is ``int``. + + * ``header_dir`` + + Python string, that contains full path to directory, which contains file, + which contains the function declaration + + ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz' )`` + + * ``header_file`` + + Python string, that contains full path to file, which contains the function + declaration. + + ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz/xyz.hpp' )`` + + * ``recursive`` + + Python boolean object. + + If ``recursive`` is ``True``, then member function will be also searched + within internal declarations. + + If ``recursive`` is ``False``, then member function will be searched only + within current scope. + + What happen if ``recursive`` is ``None``? Well. ``scopedef_t`` class defines + ``RECURSIVE_DEFAULT`` variable. It's initial value is ``True``. So, if you + don't pass ``recursive`` argument, the value of ``RECURSIVE_DEFAULT`` variable + will be used. This "yet another level of indirection" allows you to configure + `pygccxml`_ "select" functions in one place for all project. + + * ``allow_empty`` + + Python boolean object, it says `pygccxml`_ what to do if query returns empty. + + If ``allow_empty`` is ``False``, then exception + ``RuntimeError( "Multi declaration query returned 0 declarations." )`` + will be raised + + ``allow_empty`` uses same tehnique as ``recursive``, to allow you to customize + the behaviour project-wise. The relevant class variable name is + ``ALLOW_EMPTY_MDECL_WRAPPER``. It's initial value is ``False``. + +Now, when you understand, how to call those functions, I will explain what they +return. + +``member_function`` will always return reference to desired declaration. If +declaration could not be found or there are more then one declaration that +match query ``RuntimeError`` exception will be raised. + + + +.. _`pygccxml`: ./pygccxml.html +.. _`SourceForge`: http://sourceforge.net/index.php +.. _`Python`: http://www.python.org +.. _`GCC-XML`: http://www.gccxml.org +.. _`UML diagram` : ./declarations_uml.png +.. _`parser package UML diagram` : ./parser_uml.png +.. _`ReleaseForge` : http://releaseforge.sourceforge.net +.. _`boost::type_traits` : http://www.boost.org/libs/type_traits/index.html +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: \ No newline at end of file Modified: pygccxml_dev/docs/www_configuration.py =================================================================== --- pygccxml_dev/docs/www_configuration.py 2006-05-24 20:36:00 UTC (rev 162) +++ pygccxml_dev/docs/www_configuration.py 2006-05-25 06:54:11 UTC (rev 163) @@ -1,2 +1,3 @@ name = 'pygccxml' -files_to_skip = ['definition.rest'] \ No newline at end of file +files_to_skip = ['definition.rest'] +names = { 'query_api' : 'query interface' } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-27 11:28:21
|
Revision: 165 Author: roman_yakovenko Date: 2006-05-27 04:28:07 -0700 (Sat, 27 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=165&view=rev Log Message: ----------- improving documentation Modified Paths: -------------- pygccxml_dev/docs/query_interface.rest pygccxml_dev/docs/www_configuration.py pygccxml_dev/pygccxml/declarations/mdecl_wrapper.py Modified: pygccxml_dev/docs/query_interface.rest =================================================================== --- pygccxml_dev/docs/query_interface.rest 2006-05-25 08:05:00 UTC (rev 164) +++ pygccxml_dev/docs/query_interface.rest 2006-05-27 11:28:07 UTC (rev 165) @@ -9,7 +9,7 @@ ------------ You parsed the source files. Now you have to do some real work with the extracted information, right? `pygccxml`_ provides very powerful and simple interface to -query about extracted declrations. +query about extracted declarations. Just an example. I want to select all member functions, that have 2 arguments. I don't care about first argument type, but I do want second argument type to be @@ -23,7 +23,7 @@ query = query & ~declarations.access_type_matcher_t( 'public' ) global_ns.member_functions( function=query, arg_types=[None, 'int &'] ) -As for me, the example I gave was too complex. In many cases you will find your +The example is complex, but still readable. In many cases you will find your self looking for one or many declarations using one or two properties of that declaration(s). For example: :: @@ -34,141 +34,243 @@ -------------- User interface --------------- - -As you already know, ``pygccxml.declarations`` packages defines next classes: +-------------- +As you already know, ``pygccxml.declarations`` package defines next classes: + * ``scopedef_t`` - base class for all classes, that can contain other declarations * ``namespace_t`` - derives from ``scopedef_t`` class, represents C++ namespace -* ``class_t`` - derives from ``scopedef_t`` class, represents C++ class/struct. +* ``class_t`` - derives from ``scopedef_t`` class, represents C++ class/struct/union. -So, the query methods defined on ``scopedef_t`` class could be used on instances -of ``class_t`` and ``namespace_t`` classes. - -I will explain the usage of ``member_function`` and ``member_functions`` methods. -The usage of other methods is very similar to them. Here is definition of those -methods: -:: - - def member_function( self, - name=None, - function=None, - return_type=None, - arg_types=None, - header_dir=None, - header_file=None, - recursive=None ) - - - def member_functions( self, - name=None, - function=None, - return_type=None, - arg_types=None, - header_dir=None, - header_file=None, - recursive=None, - allow_empty=None ) - -As you can see, from the methods arguments you can search for member function -by: - - * ``name`` - - Python string, that contains member function name or full name. - - ``do_smth = my_class.member_function( 'do_smth' )`` - ``do_smth = my_class.member_function( 'my_namespace::my_class::do_smth' )`` - - * ``function`` - - Python callable object. You would use this functionality, if you need to - build custom query. This object will be called with one argument - declaration, - and it should return ``True`` or ``False``. - - ``impls = my_class.member_functions( lambda decl: decl.name.endswith( 'impl' ) )`` - - ``impls`` will contain all member functions, that thier name ends with "impl". - - * ``return_type`` - - Function return type. This argument can be Python string or an object that - describes C++ type. - - ``mem_funcs = my_class.member_functions( return_type='int' )`` - - ``i = declarations.int_t()`` - ``ref_i = declarations.reference_t( i )`` - ``const_ref_i = declarations.const_t( ref_i )`` - ``mem_funcs = my_class.member_functions( return_type=const_ref_int )`` - - * ``arg_types`` - - Python list that contains description of member function argument types. - This list could be a mix of Python strings and objects that describes C++ - type. Size of list says how many arguments function should have. If you want - to skip some argument type from within comparison, you put ``None``, into - relevant position within the list. - - ``mem_funcs = my_class.member_functions( arg_types=[ None, 'int'] )`` - - ``mem_funcs`` will contain all member functions, that have two arguments - and type of second argument is ``int``. - - * ``header_dir`` - - Python string, that contains full path to directory, which contains file, - which contains the function declaration - - ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz' )`` - - * ``header_file`` - - Python string, that contains full path to file, which contains the function - declaration. - - ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz/xyz.hpp' )`` - - * ``recursive`` - - Python boolean object. - - If ``recursive`` is ``True``, then member function will be also searched - within internal declarations. - - If ``recursive`` is ``False``, then member function will be searched only - within current scope. - - What happen if ``recursive`` is ``None``? Well. ``scopedef_t`` class defines - ``RECURSIVE_DEFAULT`` variable. It's initial value is ``True``. So, if you - don't pass ``recursive`` argument, the value of ``RECURSIVE_DEFAULT`` variable - will be used. This "yet another level of indirection" allows you to configure - `pygccxml`_ "select" functions in one place for all project. - - * ``allow_empty`` - - Python boolean object, it says `pygccxml`_ what to do if query returns empty. - - If ``allow_empty`` is ``False``, then exception - ``RuntimeError( "Multi declaration query returned 0 declarations." )`` - will be raised - - ``allow_empty`` uses same tehnique as ``recursive``, to allow you to customize - the behaviour project-wise. The relevant class variable name is - ``ALLOW_EMPTY_MDECL_WRAPPER``. It's initial value is ``False``. - -Now, when you understand, how to call those functions, I will explain what they -return. - -``member_function`` will always return reference to desired declaration. If -declaration could not be found or there are more then one declaration that -match query ``RuntimeError`` exception will be raised. - - - +So, the query methods defined on ``scopedef_t`` class could be used on instances +of ``class_t`` and ``namespace_t`` classes. I am sure you knew that. + +Usage examples +-------------- + +I will explain the usage of ``member_function`` and ``member_functions`` methods. +The usage of other methods is very similar to them. Here is definition of those +methods: +:: + + def member_function( self, + name=None, + function=None, + return_type=None, + arg_types=None, + header_dir=None, + header_file=None, + recursive=None ) + + + def member_functions( self, + name=None, + function=None, + return_type=None, + arg_types=None, + header_dir=None, + header_file=None, + recursive=None, + allow_empty=None ) + +As you can see, from the methods arguments you can search for member function +by: + + * ``name`` + + Python string, that contains member function name or full name. + :: + + do_smth = my_class.member_function( 'do_smth' ) + do_smth = my_class.member_function( 'my_namespace::my_class::do_smth' ) + + * ``function`` + + Python callable object. You would use this functionality, if you need to + build custom query. This object will be called with one argument - declaration, + and it should return ``True`` or ``False``. + :: + + impls = my_class.member_functions( lambda decl: decl.name.endswith( 'impl' ) ) + + ``impls`` will contain all member functions, that their name ends with "impl". + + * ``return_type`` + + Function return type. This argument can be Python string or an object that + describes C++ type. + :: + + mem_funcs = my_class.member_functions( return_type='int' ) + + i = declarations.int_t()`` + ref_i = declarations.reference_t( i ) + const_ref_i = declarations.const_t( ref_i ) + mem_funcs = my_class.member_functions( return_type=const_ref_int ) + + * ``arg_types`` + + Python list that contains description of member function argument types. + This list could be a mix of Python strings and objects that describes C++ + type. Size of list says how many arguments function should have. If you want + to skip some argument type from within comparison, you put ``None``, into + relevant position within the list. + :: + + mem_funcs = my_class.member_functions( arg_types=[ None, 'int'] ) + + ``mem_funcs`` will contain all member functions, that have two arguments + and type of second argument is ``int``. + + * ``header_dir`` + + Python string, that contains full path to directory, which contains file, + which contains the function declaration + + ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz' )`` + + * ``header_file`` + + Python string, that contains full path to file, which contains the function + declaration. + + ``mem_funcs = my_namespace.member_functions( header_dir='/home/roman/xyz/xyz.hpp' )`` + + * ``recursive`` + + Python boolean object. + + If ``recursive`` is ``True``, then member function will be also searched + within internal declarations. + + If ``recursive`` is ``False``, then member function will be searched only + within current scope. + + What happen if ``recursive`` is ``None``? Well. ``scopedef_t`` class defines + ``RECURSIVE_DEFAULT`` variable. It's initial value is ``True``. So, if you + don't pass ``recursive`` argument, the value of ``RECURSIVE_DEFAULT`` variable + will be used. This "yet another level of indirection" allows you to configure + `pygccxml`_ "select" functions in one place for all project. + + * ``allow_empty`` + + Python boolean object, it says `pygccxml`_ what to do if query returns empty. + + If ``allow_empty`` is ``False``, then exception + ``RuntimeError( "Multi declaration query returned 0 declarations." )`` + will be raised + + ``allow_empty`` uses same technique as ``recursive``, to allow you to customize + the behaviour project-wise. The relevant class variable name is + ``ALLOW_EMPTY_MDECL_WRAPPER``. It's initial value is ``False``. + +Now, when you understand, how to call those functions, I will explain what they +return. + +``member_function`` will always return reference to desired declaration. If +declaration could not be found or there are more then one declaration that +match query ``RuntimeError`` exception will be raised. + +Return value of ``member_functions`` is not Python list or set, but instance +of ``mdecl_wrapper_t`` class. This class allows you to work on all selected +objects at once. I will give an example from another project - `pyplusplus`_. +In order to help `boost.python`_ to manage objects life time, all functions +should have `call policies`_. For example: +:: + + struct A{ + A* clone() const { return new A(); } + ... + }; + + struct B{ + B* clone() const { return new B(); } + ... + }; + +`Call policies`_ of the member function ``clone`` is ``return_value_policy<manage_new_object>()``. +Next code applies `call policies`_ on all ``clone`` member functions within the +project. +:: + + #global_ns - instance of namespace_t class, that contains reference to global namespace + clone = global_ns.member_functions( 'clone' ) + clone.call_policies = return_value_policy( manage_new_object ) + + +Another example, from `pyplusplus`_ project. Sometimes it is desirable to +exclude declaration, from being exported to Python. Next code will exclude +``clone`` member function from being exported: + + ``global_ns.member_functions( 'clone' ).exclude()`` + +As you can see this class allows you to write less code. Basically using this +class you don't have to write loops. If will do it for you. Also if you insist to +write loops, ``mdecl_wrapper_t`` class implements ``__len__``, ``__getitem__`` +and ``__iter__`` methods. So you can write next code: +:: + + for clone in global_ns.member_functions( 'clone' ): + print clone.parent.name + + +---------------------- +Implementation details +---------------------- + +Performance +----------- + +For big projects, performace is critical. When you finished to build/change +declarations tree, then you can call ``scopedef_t.init_optimizer`` method. +This method will initialize few data structures, that will help to minimize the +number of compared declarations. The price you are going to pay is memory usage. + +Data structures +~~~~~~~~~~~~~~~ +Here is a short explanation of what data structures is initialized. + +* ``scopedef_t._type2decls``, ``scopedef_t._type2decls_nr`` + + Python dictionary, that contains mapping between declaration type and + declarations in the current scope. + + ``scopedef_t.type2decls_nr`` contains only declaration from the current scope. + ``scopedef_t.type2decls`` contains declarations from the current scope and its children + +* ``scopedef_t._type2name2decls``, ``scopedef_t._type2name2decls_nr`` + + Python dictionary, that contains mapping between declaration type and + another dictionary. This second dictionary contains mapping between + a declaration name and declaration. + + ``scopedef_t.type2name2decls_nr`` contains only declaration from the current scope. + ``scopedef_t.type2name2decls`` contains declarations from the current scope and its children + +* ``scopedef_t._all_decls`` + + A flat list of all declarations, including declarations from the children scopes. + +Except ``scopedef_t.decl`` and ``scopedef_t.decls`` methods, all other queries +have information about declaration type. + +If you include ``name`` into your query, you will get the best performance. + +---------------- +More information +---------------- + +I think, I gave you all important information. If you need definition of some +query method, you can take a look on API documentation or into source code. + + +.. _`boost.python`: http://boost.org/libs/python/doc/tutorial/doc/html/index.html +.. _`call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies +.. _`Call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies .. _`pygccxml`: ./pygccxml.html +.. _`pyplusplus`: ./../pyplusplus/pyplusplus.html .. _`SourceForge`: http://sourceforge.net/index.php .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pygccxml_dev/docs/www_configuration.py =================================================================== --- pygccxml_dev/docs/www_configuration.py 2006-05-25 08:05:00 UTC (rev 164) +++ pygccxml_dev/docs/www_configuration.py 2006-05-27 11:28:07 UTC (rev 165) @@ -1,3 +1,3 @@ name = 'pygccxml' files_to_skip = ['definition.rest'] -names = { 'query_api' : 'query interface' } \ No newline at end of file +names = { 'query_interface' : 'query interface' } \ No newline at end of file Modified: pygccxml_dev/pygccxml/declarations/mdecl_wrapper.py =================================================================== --- pygccxml_dev/pygccxml/declarations/mdecl_wrapper.py 2006-05-25 08:05:00 UTC (rev 164) +++ pygccxml_dev/pygccxml/declarations/mdecl_wrapper.py 2006-05-27 11:28:07 UTC (rev 165) @@ -46,6 +46,9 @@ def __getitem__( self, index ): """provides access to declaration""" return self.decls[index] + + def __iter__( self ): + return iter(self.decls) def __ensure_attribute( self, name ): invalid_decls = filter( lambda d: not hasattr( d, name ), self.decls ) @@ -64,4 +67,7 @@ def __getattr__( self, name ): """@param name: name of method """ - return call_redirector_t( name, self.decls ) \ No newline at end of file + return call_redirector_t( name, self.decls ) + + def __contains__( self, item ): + return item in self.decls This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 07:08:28
|
Revision: 169 Author: roman_yakovenko Date: 2006-05-28 00:08:12 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=169&view=rev Log Message: ----------- updating documentation Modified Paths: -------------- pygccxml_dev/docs/download.rest pygccxml_dev/docs/query_interface.rest pyplusplus_dev/docs/comparisons/pyste.rest pyplusplus_dev/docs/download.rest pyplusplus_dev/docs/quotes.rest Modified: pygccxml_dev/docs/download.rest =================================================================== --- pygccxml_dev/docs/download.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pygccxml_dev/docs/download.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -13,6 +13,13 @@ 1) get access to source code 2) get access to latest release version of pyplusplus + + +----------------- +Subversion access +----------------- + +http://sourceforge.net/svn/?group_id=118209 -------- Download @@ -20,12 +27,6 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ----------- -SVN access ----------- - -http://sourceforge.net/svn/?group_id=118209 - ------------ Installation ------------ Modified: pygccxml_dev/docs/query_interface.rest =================================================================== --- pygccxml_dev/docs/query_interface.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pygccxml_dev/docs/query_interface.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -75,7 +75,7 @@ recursive=None, allow_empty=None ) -As you can see, from the methods arguments you can search for member function +As you can see, from the method arguments you can search for member function by: * ``name`` @@ -105,7 +105,7 @@ mem_funcs = my_class.member_functions( return_type='int' ) - i = declarations.int_t()`` + i = declarations.int_t() ref_i = declarations.reference_t( i ) const_ref_i = declarations.const_t( ref_i ) mem_funcs = my_class.member_functions( return_type=const_ref_int ) Modified: pyplusplus_dev/docs/comparisons/pyste.rest =================================================================== --- pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -69,12 +69,11 @@ Carefully read `Pyste`_ definition - -"... The user specifies the classes and functions to be exported using a simple -interface file, which following the `boost.python`_'s philosophy, is simple -`Python`_ code. ..." + "... The user specifies the classes and functions to be exported using a simple + interface file, which following the `boost.python`_'s philosophy, is simple + `Python`_ code. ..." + --- Definition of `Pyste`_. - Simple interface file is an advantage and a disadvantage at the same time. The advantage is obvious: it is easy to start to use. The disadvantage is less obvious - you can not work on whole exported library at once. @@ -92,10 +91,10 @@ You should understand `Pyste`_ implementation details. Third example is solvable if you are lucky and ready to write few `Python`_\\shell scripts. -"... AllFromHeader is broken in some cases. Until it is fixed, use at you own -risk. ..." + "... AllFromHeader is broken in some cases. Until it is fixed, use at you own + risk. ..." --- `Pyste`_ documentation. + ---`Pyste`_ documentation. I have more examples, but I think you've got the idea. @@ -157,8 +156,8 @@ ---------- One of the biggest weaknesses of `Pyste`_ is a lack of good `GCC-XML`_ front-end -and this fact cause `Pyste`_ to generate wrong or not optimal code. I will prove -this later. In order to avoid such weakness, before I have created `pyplusplus`_, +and this fact cause `Pyste`_ to generate not optimal code. I will prove this +later. In order to avoid such weakness, before I have created `pyplusplus`_, I created `pygccxml`_. `pygccxml`_ is a stand alone project, that provides few things: @@ -183,23 +182,26 @@ `boost.type_traits`_ library has been implemented. `pyplusplus`_ makes an extensive use of them: - * find out call policies algorithm + * identify "call policies" algorithm * code creator that generates body of "overridden" virtual functions: - - | *struct expensive_to_copy{...};* - | *...* - | *virtual void* - | *do_smth(expensive_to_copy\* x, const expensive_to_copy& y){* - | *//Pyste generates next code* - | *//call_method< void >(self, "do_smth", x, y);* - | *//pyplusplus generates better code* - | *this->get_override("do_smth")( boost::python::ptr(x), boost::ref(y) );* - | *}* + :: + + struct expensive_to_copy{...}; + + void do_smth( expensive_to_copy* x, const expensive_to_copy& y ){...} + + void + do_smth(expensive_to_copy* x, const expensive_to_copy& y){ + //Pyste generates next code + //call_method< void >(self, "do_smth", x, y); + //pyplusplus generates next code + *this->get_override("do_smth")( boost::python::ptr(x), boost::ref(y) ); + //------------------------------^^^^^^^^^^^^^^^^^^-----^^^^^^^^^^ + } - Do you see the difference? I think that this code is better and correct. - This is a prove to the point I made earlier: `Pyste`_ generates wrong - or not optimal code. + Do you see the difference? This is a prove to the point I made earlier: + `Pyste`_ generates not optimal code. + Do you remember first 3 problems, I talked about? @@ -210,9 +212,11 @@ 3. Maintenance. Every time you add new file\\class to your project you should modify\\create `Pyste`_ interface files. - They are solved by `pygccxml`_ package. + They are solved by `pygccxml`_ package. Please take a look on `pygccxml`_ + `query intrface`__ documentation. + +.. __ : ./../../pygccxml/query_interface.html - Now about mistakes. There is a gold rule: one class, one responsibility. `Pyste`_ breaks this rule. One more time *Exporter* class responsibilities: @@ -281,12 +285,10 @@ Features list ------------- `pyplusplus`_ supports almost all features `Pyste`_ implements. `pyplusplus`_, -version 0.5.1, does not implements next functionality, implemented by `Pyste`_: +version 0.8.0, does not implements next functionality, implemented by `Pyste`_: * *pow* operator - - * templates - + * good documentation Here you can find the complete features list of `pyplusplus`_. @@ -324,37 +326,42 @@ those directories into account. * To define namespace alias. + :: - | *namespace dt = boost::date_time;* + namespace dt = boost::date_time; - All code, that is generated after this statement, will use *dt* instead of - *boost::date_time*. This allows `pyplusplus`_ to create user friendly code. + All code, that is generated after this statement, will use ``dt`` instead of + ``boost::date_time``. This allows `pyplusplus`_ to create user friendly code. * Classes and functions support 2 modes of code generation. Example: + :: + + struct world{ + void set(std::string msg) { this->msg = msg; } + std::string greet() { return msg; } + std::string msg; + }; - | *struct world{* - | *void set(std::string msg) { this->msg = msg; }* - | *std::string greet() { return msg; }* - | *std::string msg;* - | *};* - First mode: - - | *class_<world>("world")* - | *.def("greet", &world::greet)* - | *.def("set", &world::set)* - | *;* + :: + class_<world>("world") + .def("greet", &world::greet) + .def("set", &world::set) + ; + + Second mode: + :: + + if( true ){ + typedef class_<world> world_exposer_t; + world_exposer_t world_exposer; + boost::python::scope world_scope( exposer ); + world_exposer.def( "greet", ( std::string ( world::* )() )( &world::greet ) ); + world_exposer.def( "set", ( void ( world::* )(std::string) )( &world::set ) ); + } - | *if( true ){* - | *typedef class_<world> world_exposer_t;* - | *world_exposer_t world_exposer;* - | *boost::python::scope world_scope( exposer );* - | *world_exposer.def( "greet", ( std::string ( world::\* )() )( &world::greet ) );* - | *world_exposer.def( "set", ( void ( world::\* )(std::string) )( &world::set ) );* - | *}* - Second mode is better then first, because: 1. It is easier to understand compilation error. @@ -410,7 +417,7 @@ .. _`screenshot` : ./../pyplusplus_demo.png .. _`pyplusplus` : ./../pyplusplus.html -.. _`pygccxml` : http://pygccxml.sourceforge.net +.. _`pygccxml` : ./../../pygccxml/pygccxml.html .. _`Pyste`: http://www.boost.org/libs/python/doc/index.html .. _`boost.python`: http://www.boost.org/libs/python/doc/index.html .. _`SourceForge`: http://sourceforge.net/index.php Modified: pyplusplus_dev/docs/download.rest =================================================================== --- pyplusplus_dev/docs/download.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/download.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -13,6 +13,13 @@ 1) get access to source code 2) get access to latest release version of pyplusplus + + +----------------- +Subversion access +----------------- + +http://sourceforge.net/svn/?group_id=118209 -------- Download @@ -20,12 +27,6 @@ https://sourceforge.net/project/showfiles.php?group_id=118209 ----------- -SVN access ----------- - -http://sourceforge.net/svn/?group_id=118209 - ------------ Installation ------------ Modified: pyplusplus_dev/docs/quotes.rest =================================================================== --- pyplusplus_dev/docs/quotes.rest 2006-05-27 20:18:49 UTC (rev 168) +++ pyplusplus_dev/docs/quotes.rest 2006-05-28 07:08:12 UTC (rev 169) @@ -1,6 +1,12 @@ =============================== What they say about pyplusplus? =============================== + +.. contents:: Table of contents + +----------------- +What do they say? +----------------- "... If you can, use pyplusplus over pyste. I say that for ALL users of pyste, pyplusplus is now mature enough to be useful as well as being @@ -8,7 +14,7 @@ Niall Douglas, the author of `TnFOX`_ library - + "... On a related note, I highly suggest that any users out there that have tried/used Pyste but have found it to be too lacking in power should really give pyplusplus a try. It has allowed me to do everything I @@ -18,8 +24,32 @@ Allen Bierbaum, the author of `PyOpenSG`_ library - - +------------------------ +Who is using pyplusplus? +------------------------ + +* Matthias Baas, the author of `Python Computer Graphics Kit`_ project, is using + `pyplusplus`_ to create Python bindings for `Maya C++ SDK`__. + + + .. __ : http://www.highend3d.com/maya + +* I am :-). I created Python bindings for next libraries: + + * `boost.date_time`_ + * `boost.crc`_ + * `boost.rational`_ + * `boost.random`_ + +.. _`boost.date_time` : http://boost.org/doc/html/date_time.html +.. _`boost.crc` : http://boost.org/libs/crc/index.html +.. _`boost.rational` : http://boost.org/libs/rational/index.html +.. _`boost.random` : http://boost.org/libs/random/index.html + + You can download the bindings from https://sourceforge.net/project/showfiles.php?group_id=118209 . + +.. _`pyplusplus` : ./pyplusplus.html +.. _`Python Computer Graphics Kit` : http://cgkit.sourceforge.net/ .. _`TnFOX`: http://www.nedprod.com/TnFOX/ .. _`PyOpenSG`: https://realityforge.vrsource.org/view/PyOpenSG/WebHome This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-05-28 07:40:28
|
Revision: 170 Author: roman_yakovenko Date: 2006-05-28 00:40:14 -0700 (Sun, 28 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=170&view=rev Log Message: ----------- fixing broken links within documentation Modified Paths: -------------- pygccxml_dev/docs/pygccxml.rest pyplusplus_dev/docs/comparisons/pyste.rest pyplusplus_dev/docs/examples/examples.rest Modified: pygccxml_dev/docs/pygccxml.rest =================================================================== --- pygccxml_dev/docs/pygccxml.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pygccxml_dev/docs/pygccxml.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -87,7 +87,7 @@ `pygccxml`_ provides simple and powerful API to query declarations tree. I will try to give small example, that will prove my point. If you want to know more -about provided API please read `query api`__ document or API documentation. +about provided API please read `query interface`__ document or API documentation. Examples: :: @@ -107,7 +107,7 @@ function has two arguments second argument type is int -.. __: ./query_api.html +.. __: ./query_interface.html ------- License Modified: pyplusplus_dev/docs/comparisons/pyste.rest =================================================================== --- pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pyplusplus_dev/docs/comparisons/pyste.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -415,7 +415,7 @@ thought about them, long before I created `pyplusplus`_. But unfortunately, lack of time and motivation prevents him to work on `Pyste`_. -.. _`screenshot` : ./../pyplusplus_demo.png +.. _`screenshot` : ./../tutorials/pyplusplus_demo.png .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html .. _`Pyste`: http://www.boost.org/libs/python/doc/index.html Modified: pyplusplus_dev/docs/examples/examples.rest =================================================================== --- pyplusplus_dev/docs/examples/examples.rest 2006-05-28 07:08:12 UTC (rev 169) +++ pyplusplus_dev/docs/examples/examples.rest 2006-05-28 07:40:14 UTC (rev 170) @@ -21,7 +21,7 @@ needed to work with Windows bitmap (BMP) image files. I took me only few minutes to create Python bindings for the library. Read more `here`__. - __ : ./easybmp/easybmp.html +.. __ : ./easybmp/easybmp.html --------------- boost.date_time This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-07-30 21:02:25
|
Revision: 370 Author: roman_yakovenko Date: 2006-07-30 14:02:11 -0700 (Sun, 30 Jul 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=370&view=rev Log Message: ----------- updating documentation Modified Paths: -------------- pygccxml_dev/docs/design.rest pyplusplus_dev/docs/documentation/index.rest pyplusplus_dev/docs/documentation/www_configuration.py Added Paths: ----------- pyplusplus_dev/docs/documentation/best_practices.rest Modified: pygccxml_dev/docs/design.rest =================================================================== --- pygccxml_dev/docs/design.rest 2006-07-30 20:55:48 UTC (rev 369) +++ pygccxml_dev/docs/design.rest 2006-07-30 21:02:11 UTC (rev 370) @@ -226,25 +226,32 @@ Cache classes ------------- -There are few cache classes, that implements different cache strategies. My -advise - don't use them. Your best choice is ``file_configuration_t``, -configured to C++ source file + `GCC-XML`_ generated file. +There are few cache classes, that implements different cache strategies. -* ``file_cache_t`` class, will save all declarations from all files within single - binary file. +1. ``file_configuration_t`` class, that keeps pass to C++ source file and path to + `GCC-XML`_ generated XML file. This class is not a cache class, but it also + allows you to save your time. -* ``directory_cache_t`` class will store one index file called "index.dat" which - is always read by the cache when the cache object is created. Each header file - will have its corresponding \*.cache file that stores the declarations found - in the header file. The index file is used to determine whether a \*.cache file - is still valid or not (by checking if one of the dependent files - (i.e. the header file itself and all included files) have been modified since - the last run). +2. ``file_cache_t`` class, will save all declarations from all files within single + binary file. -As you can guess, ``directory_cache_t`` class gives much better performance, than +3. ``directory_cache_t`` class will store one index file called "index.dat" which + is always read by the cache when the cache object is created. Each header file + will have its corresponding \*.cache file that stores the declarations found + in the header file. The index file is used to determine whether a \*.cache file + is still valid or not (by checking if one of the dependent files + (i.e. the header file itself and all included files) have been modified since + the last run). + +In some cases, ``directory_cache_t`` class gives much better performance, than ``file_cache_t``. Many thanks to Matthias Baas for its implemention. +**Warning**: when `pygccxml`_ writes information to files, using cache classes, +it does not write any version information. It means, that when you upgrade +`pygccxml`_ you have to delete all your cache files. Otherwise you will get very +strange errors. For example: missing attribute. + Patchers -------- Added: pyplusplus_dev/docs/documentation/best_practices.rest =================================================================== --- pyplusplus_dev/docs/documentation/best_practices.rest (rev 0) +++ pyplusplus_dev/docs/documentation/best_practices.rest 2006-07-30 21:02:11 UTC (rev 370) @@ -0,0 +1,107 @@ +============== +Best practices +============== + +.. contents:: Table of contents + +------------ +Introduction +------------ + +`pyplusplus`_ has reach interface and a lot of functionality. Sometimes reach +interface helps, but sometimes it can confuse. This document will describe how +effectivly to use `pyplusplus`_. + +------------ +Big projects +------------ + +Definition +---------- + +First of all, let me to define "big project". "Big project" is a project with +few handred of header files. `pyplusplus`_ was born to create `Python`_ bindings +for such projects. If you take a look `here`__ you will find few such projects, +that use `pyplusplus`_. + +.. __ : ./../../pygccxml/quotes.html + +Tips +---- + +* Create one header file, that will include all project header files. + + Doing it this way makes it so `GCC-XML`_ is only called once and it reduces the + overhead that would occur if you pass `GCC-XML`_ all the files individually. + Namely `GCC-XML`_ would have to run hundreds of times and each call would + actually end up including quite a bit of common code anyway. This way takes a + `GCC-XML`_ processing time from multiple hours with gigabytes of caches to a + couple minutes with a reasonable cache size. + + You can read more about different caches supported by `pygccxml`_ `here`__. + ``module_builder_t.__init__`` methods takes reference to an instance of cache + class or ``None``: + + :: + + from module_builder import * + mb = module_builder_t( ..., cache=file_cache_t( path to project cache file ), ... ) + +* Single header file, will also improve performance compiling the generated bindings. + + When `pyplusplus`_ generated the bindings, you have a lot of .cpp files to + compile. The project you are working on is big. I am sure it takes a lot of + time to compile projects that depend on it. Generated code also depend on it, + more over this code contains a lot of template isnstantiations. So it could + take a great deal of time to compile it. Allen Bierbaum investigated this + problem. He found out that most of the time is really spent processing all the + headers, templates, macros from the project and from the boost library. So he + come to conclusion, that in order to improve compilation speed, user should + be able to control( to be able to generate ) precompiled header file. He + implemented an initial version of the functionality. After small discussion, + we agreed on next interface: + + :: + + class module_builder_t( ... ): + ... + def split_module( self, directory_path, huge_classes=None, precompiled_header=None ): + ... + ... + + ``precompiled_header`` argument could be ``None`` or string, that contains + name of precompiled header file, that will be created in the directory. + `pyplusplus`_ will add to it header files from `boost.python`_ library and + your header files. + + What is ``huge_classes`` argument for? ``huge_classes`` could be ``None`` or + list of references to class declarations. It is there to provide a solution to + `this error`_. ``pyplusplus`` will automaticly split generated code for the + huge classes to few files: + + :: + + mb = module_builder_t( ... ) + ... + my_big_class = mb.class_( my_big_class ) + mb.split_module( ..., huge_classes=[my_big_class], ... ) + + +.. _`this error` : http://boost.org/libs/python/doc/v2/faq.html#c1204 +.. __ : ./../../pygccxml/design.html + + + +.. _`pyplusplus` : ./../pyplusplus.html +.. _`pygccxml` : ./../../pygccxml/pygccxml.html +.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Python`: http://www.python.org +.. _`GCC-XML`: http://www.gccxml.org + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: Modified: pyplusplus_dev/docs/documentation/index.rest =================================================================== --- pyplusplus_dev/docs/documentation/index.rest 2006-07-30 20:55:48 UTC (rev 369) +++ pyplusplus_dev/docs/documentation/index.rest 2006-07-30 21:02:11 UTC (rev 370) @@ -14,14 +14,16 @@ How can you help? * Lets face it: today it is not possible to use `pyplusplus`_ without looking - into source code. `pyplusplus`_ uses `Epydoc`_ to generate documentation from - source files. So, if you found some undocumented piece of code and you understand - what it does, please write documentation string and send it to me. + into source code sometimes. `pyplusplus`_ uses `Epydoc`_ to generate + documentation from source files. So, if you found some undocumented piece of + code and you understand what it does, please write documentation string. * You are reading documentation and my English cause you to scream? Please, fix - those errors and send me new version of document. I will integrate the changes. - + those errors and send me new version of the document. I will integrate the + changes. +* Do you think, that the documentation is not clear, I will be glad to improve it, + just point me to the place. .. _`Epydoc` : http://epydoc.sourceforge.net/ .. _`pyplusplus` : ./../pyplusplus.html Modified: pyplusplus_dev/docs/documentation/www_configuration.py =================================================================== --- pyplusplus_dev/docs/documentation/www_configuration.py 2006-07-30 20:55:48 UTC (rev 369) +++ pyplusplus_dev/docs/documentation/www_configuration.py 2006-07-30 21:02:11 UTC (rev 370) @@ -5,4 +5,5 @@ , 'how_to' : 'how to ... ?' , 'doc_string' : 'documentation string' , 'inserting_code' : 'inserting code' + , 'best_practices' : 'best practices' } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-08-13 06:24:34
|
Revision: 393 Author: roman_yakovenko Date: 2006-08-12 23:23:50 -0700 (Sat, 12 Aug 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=393&view=rev Log Message: ----------- renaming 'boost.python' to 'Boost.Python' Modified Paths: -------------- pygccxml_dev/docs/query_interface.rest pyplusplus_dev/docs/comparisons/compare_to.rest pyplusplus_dev/docs/comparisons/pyste.rest pyplusplus_dev/docs/definition.rest pyplusplus_dev/docs/documentation/architecture.rest pyplusplus_dev/docs/documentation/best_practices.rest pyplusplus_dev/docs/documentation/containers.rest pyplusplus_dev/docs/documentation/doc_string.rest pyplusplus_dev/docs/documentation/feedback.rest pyplusplus_dev/docs/documentation/hints.rest pyplusplus_dev/docs/documentation/how_to.rest pyplusplus_dev/docs/documentation/index.rest pyplusplus_dev/docs/documentation/inserting_code.rest pyplusplus_dev/docs/documentation/tutorials/module_builder/module_builder.rest pyplusplus_dev/docs/documentation/tutorials/tutorials.rest pyplusplus_dev/docs/examples/boost/boost.rest pyplusplus_dev/docs/examples/easybmp/easybmp.rest pyplusplus_dev/docs/examples/examples.rest pyplusplus_dev/docs/history/history.rest pyplusplus_dev/docs/links.rest pyplusplus_dev/docs/osdc2006/presentation-talk.rest pyplusplus_dev/docs/peps/call_wrapper_policies.rest pyplusplus_dev/docs/peps/indexing_suite.rest pyplusplus_dev/docs/peps/peps_index.rest pyplusplus_dev/docs/pyplusplus.rest Modified: pygccxml_dev/docs/query_interface.rest =================================================================== --- pygccxml_dev/docs/query_interface.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pygccxml_dev/docs/query_interface.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -176,7 +176,7 @@ Return value of ``member_functions`` is not Python list or set, but instance of ``mdecl_wrapper_t`` class. This class allows you to work on all selected objects at once. I will give an example from another project - `pyplusplus`_. -In order to help `boost.python`_ to manage objects life time, all functions +In order to help `Boost.Python`_ to manage objects life time, all functions should have `call policies`_. For example: :: @@ -266,7 +266,7 @@ query method, you can take a look on API documentation or into source code. -.. _`boost.python`: http://boost.org/libs/python/doc/tutorial/doc/html/index.html +.. _`Boost.Python`: http://boost.org/libs/python/doc/tutorial/doc/html/index.html .. _`call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies .. _`Call policies`: http://boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies .. _`pygccxml`: ./pygccxml.html Modified: pyplusplus_dev/docs/comparisons/compare_to.rest =================================================================== --- pyplusplus_dev/docs/comparisons/compare_to.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/comparisons/compare_to.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -8,7 +8,7 @@ Pyste ----- -`Pyste`_ is the boost.python code generator, that is not under active development +`Pyste`_ is the Boost.Python code generator, that is not under active development any more. Nevertheless, users request to compare `pyplusplus`_ and `Pyste`_. You can read `here`_ the comparison. @@ -30,7 +30,7 @@ .. _`Python-OGRE` : http://lakin.weckers.net/index_ogre_python.html -Some other links, that compare boost.python, SWIG, SIP and other tools: +Some other links, that compare Boost.Python, SWIG, SIP and other tools: * `Evaluation of Python/C++ interfacing packages`_ Modified: pyplusplus_dev/docs/comparisons/pyste.rest =================================================================== --- pyplusplus_dev/docs/comparisons/pyste.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/comparisons/pyste.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -14,9 +14,9 @@ What is `Pyste`_? ----------------- -`Pyste`_ is a `boost.python`_ code generator. The user specifies the classes and +`Pyste`_ is a `Boost.Python`_ code generator. The user specifies the classes and functions to be exported using a simple interface file, which following the -`boost.python`_'s philosophy, is simple `Python`_ code. `Pyste`_ then uses +`Boost.Python`_'s philosophy, is simple `Python`_ code. `Pyste`_ then uses `GCC-XML`_ to parse all the headers and extract the necessary information to automatically generate C++ code. @@ -24,7 +24,7 @@ Preamble -------- -If you are reading this document, I can assume that you know what `boost.python`_, +If you are reading this document, I can assume that you know what `Boost.Python`_, `Pyste`_ and `pyplusplus`_ are. This document compares `Pyste`_ and `pyplusplus`_. I am going to compare: @@ -36,7 +36,7 @@ * features list: - * supported `boost.python`_ components + * supported `Boost.Python`_ components * nice features @@ -44,7 +44,7 @@ analyzes. If you identify one, please report it. I will try to fix it, as quick as possible. In the past, I created bindings to few projects using `Pyste`_. Code, generated by `Pyste`_, was pretty good and gave me a good start both with -my projects and with `boost.python`_ library. As for me, there are 2 main +my projects and with `Boost.Python`_ library. As for me, there are 2 main problems with `Pyste`_: 1. It is time consuming operation to maintain `Pyste`_ scripts in a big, @@ -70,7 +70,7 @@ Carefully read `Pyste`_ definition - "... The user specifies the classes and functions to be exported using a simple - interface file, which following the `boost.python`_'s philosophy, is simple + interface file, which following the `Boost.Python`_'s philosophy, is simple `Python`_ code. ..." @@ -104,7 +104,7 @@ `pyplusplus`_ has 2 user interfaces: 1. GUI - small and simple graphic user interface, that does not request from - user any knowledge about `boost.python`_ or `pyplusplus`_. You can see + user any knowledge about `Boost.Python`_ or `pyplusplus`_. You can see its `screenshot`_. 2. API - object-oriented framework, that helps you to create code generator, @@ -307,7 +307,7 @@ + smart pointers of derived and base class - * class wrappers generated using `boost.python`_ wrapper class + * class wrappers generated using `Boost.Python`_ wrapper class * operator() always exposed ( this is not the case with `Pyste`_ ) @@ -404,7 +404,7 @@ difference between `Pyste`_ and `pyplusplus`_. `Pyste`_ - `Pyste`_ is `boost.python`_ code generator. + `Pyste`_ is `Boost.Python`_ code generator. `pyplusplus`_ .. include:: ../definition.rest @@ -419,7 +419,7 @@ .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html .. _`Pyste`: http://www.boost.org/libs/python/doc/index.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`SourceForge`: http://sourceforge.net/index.php .. _`Docutils`: http://docutils.sourceforge.net .. _`Python`: http://www.python.org Modified: pyplusplus_dev/docs/definition.rest =================================================================== --- pyplusplus_dev/docs/definition.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/definition.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -1,4 +1,4 @@ `pyplusplus`_ is an object-oriented framework for creating a code generator for -`boost.python`_ library. +`Boost.Python`_ library. -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html \ No newline at end of file +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html \ No newline at end of file Modified: pyplusplus_dev/docs/documentation/architecture.rest =================================================================== --- pyplusplus_dev/docs/documentation/architecture.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/architecture.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -141,7 +141,7 @@ Code generation engine ---------------------- -Code generation for `boost.python`_ library is a difficult process. I don't know +Code generation for `Boost.Python`_ library is a difficult process. I don't know what about you, but when I have to solve some complex task, I prefer to use `divide and conquer`_ paradigm. There are 2 different problems the code generation engine should solve: @@ -150,7 +150,7 @@ * What code should be created in order to export a declaration? - I mean what `boost.python`_ code should be generated if you want to export this + I mean what `Boost.Python`_ code should be generated if you want to export this or that declaration. Code creators is the solution to this problem. @@ -207,7 +207,7 @@ `pyplusplus`_ builds more then one ``code creator``. For example: in order to export virtual function 2 ``code creator``'s are built: -( I will reuse example from `boost.python`_ `tutorials`__.) +( I will reuse example from `Boost.Python`_ `tutorials`__.) .. __ : http://boost.org/libs/python/doc/tutorial/doc/html/python/exposing.html#python.virtual_functions_with_default_implementations @@ -318,7 +318,7 @@ .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/best_practices.rest =================================================================== --- pyplusplus_dev/docs/documentation/best_practices.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/best_practices.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -71,7 +71,7 @@ ``precompiled_header`` argument could be ``None`` or string, that contains name of precompiled header file, that will be created in the directory. - `pyplusplus`_ will add to it header files from `boost.python`_ library and + `pyplusplus`_ will add to it header files from `Boost.Python`_ library and your header files. What is ``huge_classes`` argument for? ``huge_classes`` could be ``None`` or @@ -94,7 +94,7 @@ .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/containers.rest =================================================================== --- pyplusplus_dev/docs/documentation/containers.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/containers.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -37,7 +37,7 @@ containers. Well, actually he did much more - he implemented new framework. This framework provides support for almost all C++ containers and also an easy way to add support for custom ones. You'd better read his `post`_ to -`boost.python`_ mailing list or `documentation`_ for the new indexing suite. +`Boost.Python`_ mailing list or `documentation`_ for the new indexing suite. Now, I am sure you have next question: if this suite is soo good, why it is not @@ -57,7 +57,7 @@ ------------------------------ `pyplusplus`_ implements support for both indexing suites. More over, you can freely mix indexing suites. For example you can expose ``std::vector<int>`` using -`boost.python`_ built-in indexing suite and ``std::map< int, std::string>`` using +`Boost.Python`_ built-in indexing suite and ``std::map< int, std::string>`` using Raoul Gough's indexing suite. ----------------- @@ -189,7 +189,7 @@ .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/doc_string.rest =================================================================== --- pyplusplus_dev/docs/documentation/doc_string.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/doc_string.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -26,7 +26,7 @@ In `pyplusplus`_ every class, that describes C++ declarations has ``documentation`` property. This property should contain valid C++ string or ``None``. -`boost.python`_ not always provides functionality, that exports documentation string. +`Boost.Python`_ not always provides functionality, that exports documentation string. In those cases, `pyplusplus`_ will not generate documentation string. Also the previous method is pretty clear, it is not practical. There should be a @@ -62,7 +62,7 @@ .. _`doxygen` : http://www.stack.nl/~dimitri/doxygen/ .. _`documentation string` : http://docs.python.org/tut/node6.html#SECTION006760000000000000000 .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/feedback.rest =================================================================== --- pyplusplus_dev/docs/documentation/feedback.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/feedback.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -10,12 +10,12 @@ `pyplusplus`_ has been created with few goals in mind: -* to allow users create `Python`_ bindings for large projects using the `boost.python`_ +* to allow users create `Python`_ bindings for large projects using the `Boost.Python`_ library * to minimize maintenance time -* to serve as a user's guide for `boost.python`_ library +* to serve as a user's guide for `Boost.Python`_ library Those goals all have something in common. In order to achive them, `pyplusplus`_ must @@ -156,7 +156,7 @@ .. _`logging` : http://docs.python.org/lib/module-logging.html .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/hints.rest =================================================================== --- pyplusplus_dev/docs/documentation/hints.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/hints.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -39,7 +39,7 @@ property ``aliases`` you can get access to all ``typedef``'s of the class. .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/how_to.rest =================================================================== --- pyplusplus_dev/docs/documentation/how_to.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/how_to.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -247,7 +247,7 @@ .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/index.rest =================================================================== --- pyplusplus_dev/docs/documentation/index.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/index.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -27,7 +27,7 @@ .. _`Epydoc` : http://epydoc.sourceforge.net/ .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/inserting_code.rest =================================================================== --- pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -16,7 +16,7 @@ Insert code to module --------------------- -Almost every ``boost.python`` module has next structure: +Almost every ``Boost.Python`` module has next structure: :: @@ -195,7 +195,7 @@ .. _`pyplusplus` : ./../pyplusplus.html .. _`pygccxml` : ./../../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/tutorials/module_builder/module_builder.rest =================================================================== --- pyplusplus_dev/docs/documentation/tutorials/module_builder/module_builder.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/tutorials/module_builder/module_builder.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -153,7 +153,7 @@ .. _`pyplusplus` : ./../../../pyplusplus.html .. _`pygccxml` : ./../../../../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`SourceForge`: http://sourceforge.net/index.php .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/documentation/tutorials/tutorials.rest =================================================================== --- pyplusplus_dev/docs/documentation/tutorials/tutorials.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/documentation/tutorials/tutorials.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -20,10 +20,10 @@ My advise to you - start with `graphical interface`_, because: * you don't have to learn new API - * few clicks with mouse and you have `boost.python`_ code for your file(s) + * few clicks with mouse and you have `Boost.Python`_ code for your file(s) * it is very easy to evaluate `pyplusplus`_ using it * you can check whether `GCC-XML`_ is able to compile your code or not - * you can use it as a guide to `boost.python`_ library + * you can use it as a guide to `Boost.Python`_ library * it is able to generate `pyplusplus`_ code for you .. _`graphical interface` : ./pyplusplus_demo.png @@ -50,7 +50,7 @@ .. _`pyplusplus` : ./../../pyplusplus.html .. _`pygccxml` : ./../....//pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`SourceForge`: http://sourceforge.net/index.php .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/examples/boost/boost.rest =================================================================== --- pyplusplus_dev/docs/examples/boost/boost.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/examples/boost/boost.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -298,7 +298,7 @@ .. _`date_time`: http://boost.org/doc/html/date_time.html .. _`boost`: http://www.boost.org .. _`Boost`: http://www.boost.org -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`boost.operators`: http://www.boost.org/ .. _`GCC-XML`: http://www.gccxml.org .. _`pyplusplus` : ./../../pyplusplus.html Modified: pyplusplus_dev/docs/examples/easybmp/easybmp.rest =================================================================== --- pyplusplus_dev/docs/examples/easybmp/easybmp.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/examples/easybmp/easybmp.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -34,7 +34,7 @@ 1. environment.py - contains different environment settings 2. generate_code.py - contains source code needed to generate - `boost.python`_ bindings for `EasyBMP`_ library. + `Boost.Python`_ bindings for `EasyBMP`_ library. 3. sconstruct - build configuration file @@ -76,7 +76,7 @@ .. _`Python`: http://www.python.org .. _`pygccxml`: http://www.language-binding.net/pygccxml/pygccxml.html .. _`EasyBMP`: http://easybmp.sourceforge.net/ -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. Local Variables: Modified: pyplusplus_dev/docs/examples/examples.rest =================================================================== --- pyplusplus_dev/docs/examples/examples.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/examples/examples.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -50,7 +50,7 @@ .. _`boost.random` : http://boost.org/libs/random/index.html .. _`GUI`: ./../tutorials/pyplusplus_demo.png -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`pyplusplus` : ./../pyplusplus.html .. _`EasyBMP`: http://easybmp.sourceforge.net/ Modified: pyplusplus_dev/docs/history/history.rest =================================================================== --- pyplusplus_dev/docs/history/history.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/history/history.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -33,7 +33,7 @@ * user messages are clear -3. Support for boost.python indexing suite version 2 was implemented. +3. Support for Boost.Python indexing suite version 2 was implemented. 4. Every code creator class took ``parent`` argument in ``__init__`` method. This argument was removed. ``adopt_creator`` and ``remove_creator`` will Modified: pyplusplus_dev/docs/links.rest =================================================================== --- pyplusplus_dev/docs/links.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/links.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -30,7 +30,7 @@ the result using a tool that `understands` the syntax and semantics of both the underlying language and the library. ..." - `pyplusplus`_ + boost.python is a SELL! + `pyplusplus`_ + Boost.Python is a SELL! * `Aspect oriented programming`_ @@ -48,11 +48,11 @@ * http://boost.org/libs/python/doc/index.html - tutorials, FAQs, reference manuals -* `boost.python wiki`_ +* `Boost.Python wiki`_ - .. _`boost.python wiki` : http://wiki.python.org/moin/boost%2epython?action=show&redirect=boost+2epython + .. _`Boost.Python wiki` : http://wiki.python.org/moin/boost%2epython?action=show&redirect=boost+2epython -* http://boost.cvs.sourceforge.net/boost/boost/libs/python/test/ - `boost.python`_ +* http://boost.cvs.sourceforge.net/boost/boost/libs/python/test/ - `Boost.Python`_ unit tests. They could be very, very helpful. * http://svn.sourceforge.net/viewvc/pygccxml/pyplusplus_dev/unittests/ - `pyplusplus`_ @@ -70,7 +70,7 @@ .. _`pyplusplus mailing list` : http://sourceforge.net/mail/?group_id=118209 -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`pyplusplus` : ./pyplusplus.html .. Modified: pyplusplus_dev/docs/osdc2006/presentation-talk.rest =================================================================== --- pyplusplus_dev/docs/osdc2006/presentation-talk.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/osdc2006/presentation-talk.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -57,7 +57,7 @@ * SIP - PyQt, PyKDE ( extending only ) * Robin - ? * pyplusplus - an object-oriented framework for creating a code generator for - boost.python library. ( TnFOX, boost.date_time ) + Boost.Python library. ( TnFOX, boost.date_time ) Libraries: Modified: pyplusplus_dev/docs/peps/call_wrapper_policies.rest =================================================================== --- pyplusplus_dev/docs/peps/call_wrapper_policies.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/peps/call_wrapper_policies.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -73,7 +73,7 @@ Call policies ------------- I don't have any solution to the next problem. -I am going to change a little an example, from `boost.python`_ tutorials: +I am going to change a little an example, from `Boost.Python`_ tutorials: http://www.boost.org/libs/python/doc/tutorial/doc/html/python/functions.html#python.call_policies :: @@ -90,7 +90,7 @@ return y.x; } - //boost.python code + //Boost.Python code def("f", f, return_internal_reference<1, with_custodian_and_ward<1, 2> >() ); What is the difference? Function ``f`` now takes 3rd argument - ``int&``. This @@ -101,7 +101,7 @@ I see only one solution user have to change signature of function ``f``. Now some speculations: -1. May be it is possible with `boost.python`_ library to set call policies on the +1. May be it is possible with `Boost.Python`_ library to set call policies on the part of the return value? :: @@ -113,7 +113,7 @@ def("f", f_wrapper, smart call policies that will work only on first element within the tuple ); -2. May be it is possible to create boost.python ``object`` with life-time management +2. May be it is possible to create Boost.Python ``object`` with life-time management hint? :: @@ -124,7 +124,7 @@ return boost::python::make_tuple( x_obj, error ); } -Anyway, I think we will just ignore the problem - software ( == boost.python ) +Anyway, I think we will just ignore the problem - software ( == Boost.Python ) should not be perfect - it should work in most ( != all ) cases! ------------ @@ -232,7 +232,7 @@ ------- It still not clear to me how it should be implemented. There are also some issues -with `boost.python`_ library before we can implement some policies. +with `Boost.Python`_ library before we can implement some policies. If you can help or have some nice idea, please share: https://lists.sourceforge.net/lists/listinfo/pygccxml-development @@ -240,7 +240,7 @@ .. _`pyplusplus` : ./../pyplusplus.html .. |cwp| replace:: *"call wrapper policies"* -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/peps/indexing_suite.rest =================================================================== --- pyplusplus_dev/docs/peps/indexing_suite.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/peps/indexing_suite.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -52,7 +52,7 @@ classes should be exported too. 3. It will understand that those classes should be exported using indexing suite - functionality provided by `boost.python`_ library or `pyplusplus`_ + functionality provided by `Boost.Python`_ library or `pyplusplus`_ ``code repository``. 4. It will generate the code, that will use that functionality. @@ -85,7 +85,7 @@ .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/peps/peps_index.rest =================================================================== --- pyplusplus_dev/docs/peps/peps_index.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/peps/peps_index.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -56,7 +56,7 @@ .. __ : ./indexing_suite.html .. _`pyplusplus` : ./../pyplusplus.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pyplusplus_dev/docs/pyplusplus.rest =================================================================== --- pyplusplus_dev/docs/pyplusplus.rest 2006-08-12 19:24:28 UTC (rev 392) +++ pyplusplus_dev/docs/pyplusplus.rest 2006-08-13 06:23:50 UTC (rev 393) @@ -22,7 +22,7 @@ Code generation process ----------------------- -`boost.python`_ library allows you to expose C++ code to `Python`_ in quick and +`Boost.Python`_ library allows you to expose C++ code to `Python`_ in quick and elegant way. Almost the whole process of exposing declarations can be automated by use of pyplusplus. Code generation process, using pyplusplus consists from few steps. Next paragraphs will tell you more about every step. @@ -188,7 +188,7 @@ .. _`pyplusplus` : ./pyplusplus.html .. _`pygccxml` : ./../pygccxml/pygccxml.html -.. _`boost.python`: http://www.boost.org/libs/python/doc/index.html +.. _`Boost.Python`: http://www.boost.org/libs/python/doc/index.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org .. _`Boost Software License`: http://boost.org/more/license_info.html This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-10-12 09:29:32
|
Revision: 656 http://svn.sourceforge.net/pygccxml/?rev=656&view=rev Author: roman_yakovenko Date: 2006-10-12 02:29:16 -0700 (Thu, 12 Oct 2006) Log Message: ----------- updating structure of pygccxml docs Modified Paths: -------------- pygccxml_dev/docs/pygccxml.rest Added Paths: ----------- pygccxml_dev/docs/core_class_hierarchy.hpp pygccxml_dev/docs/core_class_hierarchy.hpp.xml pygccxml_dev/docs/example.py Removed Paths: ------------- pygccxml_dev/docs/example/ Copied: pygccxml_dev/docs/core_class_hierarchy.hpp (from rev 646, pygccxml_dev/docs/example/core_class_hierarchy.hpp) =================================================================== --- pygccxml_dev/docs/core_class_hierarchy.hpp (rev 0) +++ pygccxml_dev/docs/core_class_hierarchy.hpp 2006-10-12 09:29:16 UTC (rev 656) @@ -0,0 +1,35 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __core_class_hierarchy_hpp__ +#define __core_class_hierarchy_hpp__ + +//TODO("To add virtual inheritance case"); + +namespace core{ namespace class_hierarchy{ + +class base_t{ +public: + virtual ~base_t(){}; +}; + +class other_base_t{ +}; + +class derived_public_t : public base_t{ +}; + +class derived_protected_t : protected base_t{ +}; + +class derived_private_t : private base_t{ +}; + +class multi_derived_t : derived_private_t, protected base_t, private other_base_t{ +}; + +} } + +#endif//__core_class_hierarchy_hpp__ Copied: pygccxml_dev/docs/core_class_hierarchy.hpp.xml (from rev 646, pygccxml_dev/docs/example/core_class_hierarchy.hpp.xml) =================================================================== --- pygccxml_dev/docs/core_class_hierarchy.hpp.xml (rev 0) +++ pygccxml_dev/docs/core_class_hierarchy.hpp.xml 2006-10-12 09:29:16 UTC (rev 656) @@ -0,0 +1,129 @@ +<?xml version="1.0"?> +<GCC_XML> + <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 _9 _10 _11 _12 _13 _14 _15 _16 _17 _18 _19 " mangled="_Z2::"/> + <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std"/> + <Variable id="_3" name="_ZTIN4core15class_hierarchy15multi_derived_tE" type="_20c" context="_1" location="f0:30" file="f0" line="30" extern="1" artificial="1"/> + <Variable id="_4" name="_ZTIN4core15class_hierarchy17derived_private_tE" type="_22c" context="_1" location="f0:27" file="f0" line="27" extern="1" artificial="1"/> + <Variable id="_5" name="_ZTIN4core15class_hierarchy19derived_protected_tE" type="_22c" context="_1" location="f0:24" file="f0" line="24" extern="1" artificial="1"/> + <Variable id="_6" name="_ZTIN4core15class_hierarchy16derived_public_tE" type="_24c" context="_1" location="f0:21" file="f0" line="21" extern="1" artificial="1"/> + <Variable id="_7" name="_ZTIN4core15class_hierarchy6base_tE" type="_26c" context="_1" location="f0:13" file="f0" line="13" extern="1" artificial="1"/> + <Function id="_8" name="__builtin_expect" returns="_28" context="_1" location="f1:15" file="f1" line="15" extern="1"> + <Argument type="_28"/> + <Argument type="_28"/> + </Function> + <Function id="_9" name="__builtin_prefetch" returns="_29" context="_1" location="f1:16" file="f1" line="16" extern="1"> + <Argument type="_30"/> + <Ellipsis/> + </Function> + <Function id="_10" name="__builtin_return" returns="_29" context="_1" location="f1:12" file="f1" line="12" extern="1" attributes="nothrow noreturn"> + <Argument type="_31"/> + </Function> + <Function id="_11" name="__builtin_return_address" returns="_31" context="_1" location="f1:13" file="f1" line="13" extern="1"> + <Argument type="_32"/> + </Function> + <Function id="_12" name="__builtin_frame_address" returns="_31" context="_1" location="f1:14" file="f1" line="14" extern="1"> + <Argument type="_32"/> + </Function> + <Function id="_13" name="__builtin_nansl" returns="_33" context="_1" mangled="nansl" location="f1:22" file="f1" line="22" extern="1" attributes="nothrow const"> + <Argument type="_34"/> + </Function> + <Function id="_14" name="__builtin_nansf" returns="_35" context="_1" mangled="nansf" location="f1:21" file="f1" line="21" extern="1" attributes="nothrow const"> + <Argument type="_34"/> + </Function> + <Function id="_15" name="__builtin_nans" returns="_36" context="_1" mangled="nans" location="f1:20" file="f1" line="20" extern="1" attributes="nothrow const"> + <Argument type="_34"/> + </Function> + <Function id="_16" name="__builtin_infl" returns="_33" context="_1" location="f1:19" file="f1" line="19" extern="1" attributes="nothrow const"/> + <Function id="_17" name="__builtin_inff" returns="_35" context="_1" location="f1:18" file="f1" line="18" extern="1" attributes="nothrow const"/> + <Function id="_18" name="__builtin_inf" returns="_36" context="_1" location="f1:17" file="f1" line="17" extern="1" attributes="nothrow const"/> + <Namespace id="_19" name="core" context="_1" members="_37 " mangled="_Z4core"/> + <Struct id="_20" name="__vmi_class_type_info_pseudo3" context="_1" mangled="29__vmi_class_type_info_pseudo3" location="f0:30" file="f0" line="30" members="_38 _39 _40 _41 " bases=""/> + <CvQualifiedType id="_20c" type="_20" const="1"/> + <Struct id="_22" name="__vmi_class_type_info_pseudo1" context="_1" mangled="29__vmi_class_type_info_pseudo1" location="f0:24" file="f0" line="24" members="_42 _43 _44 _45 " bases=""/> + <CvQualifiedType id="_22c" type="_22" const="1"/> + <Struct id="_24" name="__si_class_type_info_pseudo" context="_1" mangled="27__si_class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> + <CvQualifiedType id="_24c" type="_24" const="1"/> + <Struct id="_26" name="__class_type_info_pseudo" context="_1" mangled="24__class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> + <CvQualifiedType id="_26c" type="_26" const="1"/> + <FundamentalType id="_28" name="long int"/> + <FundamentalType id="_29" name="void"/> + <PointerType id="_30" type="_29c"/> + <PointerType id="_31" type="_29"/> + <FundamentalType id="_32" name="unsigned int"/> + <FundamentalType id="_33" name="long double"/> + <PointerType id="_34" type="_47c"/> + <FundamentalType id="_35" name="float"/> + <FundamentalType id="_36" name="double"/> + <Namespace id="_37" name="class_hierarchy" context="_19" members="_49 _50 _51 _52 _53 _54 " mangled="_ZN4core15class_hierarchyE"/> + <Field id="_38" name="" type="_55" context="_20" location="f0:30" file="f0" line="30"/> + <Field id="_39" name="" type="_56" context="_20" location="f0:30" file="f0" line="30"/> + <Field id="_40" name="" type="_56" context="_20" location="f0:30" file="f0" line="30"/> + <Field id="_41" name="" type="_57" context="_20" location="f0:30" file="f0" line="30"/> + <Field id="_42" name="" type="_55" context="_22" location="f0:24" file="f0" line="24"/> + <Field id="_43" name="" type="_56" context="_22" location="f0:24" file="f0" line="24"/> + <Field id="_44" name="" type="_56" context="_22" location="f0:24" file="f0" line="24"/> + <Field id="_45" name="" type="_58" context="_22" location="f0:24" file="f0" line="24"/> + <Class id="_49" name="multi_derived_t" context="_37" mangled="N4core15class_hierarchy15multi_derived_tE" location="f0:30" file="f0" line="30" members="_59 _60 _61 " bases="private:_50 protected:_54 private:_53 "/> + <Class id="_50" name="derived_private_t" context="_37" mangled="N4core15class_hierarchy17derived_private_tE" location="f0:27" file="f0" line="27" members="_62 _63 _64 " bases="private:_54 "/> + <Class id="_51" name="derived_protected_t" context="_37" mangled="N4core15class_hierarchy19derived_protected_tE" location="f0:24" file="f0" line="24" members="_65 _66 _67 " bases="protected:_54 "/> + <Class id="_52" name="derived_public_t" context="_37" mangled="N4core15class_hierarchy16derived_public_tE" location="f0:21" file="f0" line="21" members="_68 _69 _70 " bases="_54 "/> + <Class id="_53" name="other_base_t" context="_37" mangled="N4core15class_hierarchy12other_base_tE" location="f0:18" file="f0" line="18" members="_71 _72 " bases=""/> + <Class id="_54" name="base_t" context="_37" mangled="N4core15class_hierarchy6base_tE" location="f0:13" file="f0" line="13" members="_73 _74 _75 " bases=""/> + <Struct id="_55" name="__type_info_pseudo" context="_1" mangled="18__type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> + <FundamentalType id="_56" name="int"/> + <ArrayType id="_57" min="0" max="3" type="_76"/> + <ArrayType id="_58" min="0" max="1" type="_76"/> + <Constructor id="_59" name="multi_derived_t" artificial="1" throw="" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tC1ERKS1_ *INTERNAL* " location="f0:30" file="f0" line="30"> + <Argument name="_ctor_arg" type="_77"/> + </Constructor> + <Constructor id="_60" name="multi_derived_t" artificial="1" throw="" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tC1Ev *INTERNAL* " location="f0:30" file="f0" line="30"/> + <Destructor id="_61" name="multi_derived_t" virtual="1" artificial="1" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tD1Ev *INTERNAL* " location="f0:30" file="f0" line="30"> + </Destructor> + <Constructor id="_62" name="derived_private_t" artificial="1" throw="" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tC1ERKS1_ *INTERNAL* " location="f0:27" file="f0" line="27"> + <Argument name="_ctor_arg" type="_78"/> + </Constructor> + <Constructor id="_63" name="derived_private_t" artificial="1" throw="" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tC1Ev *INTERNAL* " location="f0:27" file="f0" line="27"/> + <Destructor id="_64" name="derived_private_t" virtual="1" artificial="1" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tD1Ev *INTERNAL* " location="f0:27" file="f0" line="27"> + </Destructor> + <Constructor id="_65" name="derived_protected_t" artificial="1" throw="" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tC1ERKS1_ *INTERNAL* " location="f0:24" file="f0" line="24"> + <Argument name="_ctor_arg" type="_79"/> + </Constructor> + <Constructor id="_66" name="derived_protected_t" artificial="1" throw="" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tC1Ev *INTERNAL* " location="f0:24" file="f0" line="24"/> + <Destructor id="_67" name="derived_protected_t" virtual="1" artificial="1" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tD1Ev *INTERNAL* " location="f0:24" file="f0" line="24"> + </Destructor> + <Constructor id="_68" name="derived_public_t" artificial="1" throw="" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tC1ERKS1_ *INTERNAL* " location="f0:21" file="f0" line="21"> + <Argument name="_ctor_arg" type="_80"/> + </Constructor> + <Constructor id="_69" name="derived_public_t" artificial="1" throw="" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tC1Ev *INTERNAL* " location="f0:21" file="f0" line="21"/> + <Destructor id="_70" name="derived_public_t" virtual="1" artificial="1" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tD1Ev *INTERNAL* " location="f0:21" file="f0" line="21"> + </Destructor> + <Constructor id="_71" name="other_base_t" artificial="1" throw="" context="_53" mangled="_ZN4core15class_hierarchy12other_base_tC1ERKS1_ *INTERNAL* " location="f0:18" file="f0" line="18"> + <Argument name="_ctor_arg" type="_81"/> + </Constructor> + <Constructor id="_72" name="other_base_t" artificial="1" throw="" context="_53" mangled="_ZN4core15class_hierarchy12other_base_tC1Ev *INTERNAL* " location="f0:18" file="f0" line="18"/> + <Constructor id="_73" name="base_t" artificial="1" throw="" context="_54" mangled="_ZN4core15class_hierarchy6base_tC1ERKS1_ *INTERNAL* " location="f0:13" file="f0" line="13"> + <Argument name="_ctor_arg" type="_82"/> + </Constructor> + <Constructor id="_74" name="base_t" artificial="1" throw="" context="_54" mangled="_ZN4core15class_hierarchy6base_tC1Ev *INTERNAL* " location="f0:13" file="f0" line="13"/> + <Destructor id="_75" name="base_t" virtual="1" context="_54" mangled="_ZN4core15class_hierarchy6base_tD1Ev *INTERNAL* " location="f0:15" file="f0" line="15" endline="15"> + </Destructor> + <Struct id="_76" name="__base_class_type_info_pseudo" context="_1" mangled="29__base_class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> + <ReferenceType id="_77" type="_49c"/> + <ReferenceType id="_78" type="_50c"/> + <ReferenceType id="_79" type="_51c"/> + <ReferenceType id="_80" type="_52c"/> + <ReferenceType id="_81" type="_53c"/> + <ReferenceType id="_82" type="_54c"/> + <FundamentalType id="_47" name="char"/> + <CvQualifiedType id="_47c" type="_47" const="1"/> + <CvQualifiedType id="_29c" type="_29" const="1"/> + <CvQualifiedType id="_54c" type="_54" const="1"/> + <CvQualifiedType id="_53c" type="_53" const="1"/> + <CvQualifiedType id="_52c" type="_52" const="1"/> + <CvQualifiedType id="_51c" type="_51" const="1"/> + <CvQualifiedType id="_50c" type="_50" const="1"/> + <CvQualifiedType id="_49c" type="_49" const="1"/> + <File id="f0" name="core_class_hierarchy.hpp"/> + <File id="f1" name="/usr/local/share/gccxml-0.6/GCC/3.3/gccxml_builtins.h"/> + <File id="f2" name="<internal>"/> +</GCC_XML> Copied: pygccxml_dev/docs/example.py (from rev 646, pygccxml_dev/docs/example/example.py) =================================================================== --- pygccxml_dev/docs/example.py (rev 0) +++ pygccxml_dev/docs/example.py 2006-10-12 09:29:16 UTC (rev 656) @@ -0,0 +1,26 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import sys +sys.path.append('../..') #adding pygccxml to the path + +from pygccxml import parser +from pygccxml import declarations + +#configure GCC-XML parser +config = parser.config_t( gccxml_path='/home/roman/gccxml-build/bin/gccxml' ) + +#parsing source file +decls = parser.parse( ['core_class_hierarchy.hpp'], config ) +global_ns = declarations.get_global_namespace( decls ) + +#printing all declarations found in file and its includes +declarations.print_declarations( global_ns ) + +#print all base and derived class names +for class_ in global_ns.classes(): + print class_.name + print '\tbases: ', `[base.related_class.name for base in class_.bases]` + print '\tderived: ', `[derive.related_class.name for derive in class_.derived]` \ No newline at end of file Modified: pygccxml_dev/docs/pygccxml.rest =================================================================== --- pygccxml_dev/docs/pygccxml.rest 2006-10-12 09:18:29 UTC (rev 655) +++ pygccxml_dev/docs/pygccxml.rest 2006-10-12 09:29:16 UTC (rev 656) @@ -42,9 +42,9 @@ looks "in the real life", I mean how xml file is look like, you may look at the `original XML file`_ generated by `GCC-XML`_. -.. _`original XML file` : ./example/core_class_hierarchy.hpp.xml -.. _`core_class_hierarchy.hpp` : ./example/core_class_hierarchy.hpp -.. _`example` : ./example/example.py +.. _`original XML file` : ./core_class_hierarchy.hpp.xml.html +.. _`core_class_hierarchy.hpp` : ./core_class_hierarchy.hpp.html +.. _`example` : ./example.py.html -------- Features This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2006-10-12 09:41:19
|
Revision: 657 http://svn.sourceforge.net/pygccxml/?rev=657&view=rev Author: roman_yakovenko Date: 2006-10-12 02:40:59 -0700 (Thu, 12 Oct 2006) Log Message: ----------- updating structure of pygccxml docs Modified Paths: -------------- pygccxml_dev/docs/pygccxml.rest Added Paths: ----------- pygccxml_dev/docs/example.hpp pygccxml_dev/docs/example.hpp.rest pygccxml_dev/docs/example.hpp.xml pygccxml_dev/docs/example.hpp.xml.rest pygccxml_dev/docs/example.py.rest Removed Paths: ------------- pygccxml_dev/docs/core_class_hierarchy.hpp pygccxml_dev/docs/core_class_hierarchy.hpp.xml Deleted: pygccxml_dev/docs/core_class_hierarchy.hpp =================================================================== --- pygccxml_dev/docs/core_class_hierarchy.hpp 2006-10-12 09:29:16 UTC (rev 656) +++ pygccxml_dev/docs/core_class_hierarchy.hpp 2006-10-12 09:40:59 UTC (rev 657) @@ -1,35 +0,0 @@ -// Copyright 2004 Roman Yakovenko. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef __core_class_hierarchy_hpp__ -#define __core_class_hierarchy_hpp__ - -//TODO("To add virtual inheritance case"); - -namespace core{ namespace class_hierarchy{ - -class base_t{ -public: - virtual ~base_t(){}; -}; - -class other_base_t{ -}; - -class derived_public_t : public base_t{ -}; - -class derived_protected_t : protected base_t{ -}; - -class derived_private_t : private base_t{ -}; - -class multi_derived_t : derived_private_t, protected base_t, private other_base_t{ -}; - -} } - -#endif//__core_class_hierarchy_hpp__ Deleted: pygccxml_dev/docs/core_class_hierarchy.hpp.xml =================================================================== --- pygccxml_dev/docs/core_class_hierarchy.hpp.xml 2006-10-12 09:29:16 UTC (rev 656) +++ pygccxml_dev/docs/core_class_hierarchy.hpp.xml 2006-10-12 09:40:59 UTC (rev 657) @@ -1,129 +0,0 @@ -<?xml version="1.0"?> -<GCC_XML> - <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 _9 _10 _11 _12 _13 _14 _15 _16 _17 _18 _19 " mangled="_Z2::"/> - <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std"/> - <Variable id="_3" name="_ZTIN4core15class_hierarchy15multi_derived_tE" type="_20c" context="_1" location="f0:30" file="f0" line="30" extern="1" artificial="1"/> - <Variable id="_4" name="_ZTIN4core15class_hierarchy17derived_private_tE" type="_22c" context="_1" location="f0:27" file="f0" line="27" extern="1" artificial="1"/> - <Variable id="_5" name="_ZTIN4core15class_hierarchy19derived_protected_tE" type="_22c" context="_1" location="f0:24" file="f0" line="24" extern="1" artificial="1"/> - <Variable id="_6" name="_ZTIN4core15class_hierarchy16derived_public_tE" type="_24c" context="_1" location="f0:21" file="f0" line="21" extern="1" artificial="1"/> - <Variable id="_7" name="_ZTIN4core15class_hierarchy6base_tE" type="_26c" context="_1" location="f0:13" file="f0" line="13" extern="1" artificial="1"/> - <Function id="_8" name="__builtin_expect" returns="_28" context="_1" location="f1:15" file="f1" line="15" extern="1"> - <Argument type="_28"/> - <Argument type="_28"/> - </Function> - <Function id="_9" name="__builtin_prefetch" returns="_29" context="_1" location="f1:16" file="f1" line="16" extern="1"> - <Argument type="_30"/> - <Ellipsis/> - </Function> - <Function id="_10" name="__builtin_return" returns="_29" context="_1" location="f1:12" file="f1" line="12" extern="1" attributes="nothrow noreturn"> - <Argument type="_31"/> - </Function> - <Function id="_11" name="__builtin_return_address" returns="_31" context="_1" location="f1:13" file="f1" line="13" extern="1"> - <Argument type="_32"/> - </Function> - <Function id="_12" name="__builtin_frame_address" returns="_31" context="_1" location="f1:14" file="f1" line="14" extern="1"> - <Argument type="_32"/> - </Function> - <Function id="_13" name="__builtin_nansl" returns="_33" context="_1" mangled="nansl" location="f1:22" file="f1" line="22" extern="1" attributes="nothrow const"> - <Argument type="_34"/> - </Function> - <Function id="_14" name="__builtin_nansf" returns="_35" context="_1" mangled="nansf" location="f1:21" file="f1" line="21" extern="1" attributes="nothrow const"> - <Argument type="_34"/> - </Function> - <Function id="_15" name="__builtin_nans" returns="_36" context="_1" mangled="nans" location="f1:20" file="f1" line="20" extern="1" attributes="nothrow const"> - <Argument type="_34"/> - </Function> - <Function id="_16" name="__builtin_infl" returns="_33" context="_1" location="f1:19" file="f1" line="19" extern="1" attributes="nothrow const"/> - <Function id="_17" name="__builtin_inff" returns="_35" context="_1" location="f1:18" file="f1" line="18" extern="1" attributes="nothrow const"/> - <Function id="_18" name="__builtin_inf" returns="_36" context="_1" location="f1:17" file="f1" line="17" extern="1" attributes="nothrow const"/> - <Namespace id="_19" name="core" context="_1" members="_37 " mangled="_Z4core"/> - <Struct id="_20" name="__vmi_class_type_info_pseudo3" context="_1" mangled="29__vmi_class_type_info_pseudo3" location="f0:30" file="f0" line="30" members="_38 _39 _40 _41 " bases=""/> - <CvQualifiedType id="_20c" type="_20" const="1"/> - <Struct id="_22" name="__vmi_class_type_info_pseudo1" context="_1" mangled="29__vmi_class_type_info_pseudo1" location="f0:24" file="f0" line="24" members="_42 _43 _44 _45 " bases=""/> - <CvQualifiedType id="_22c" type="_22" const="1"/> - <Struct id="_24" name="__si_class_type_info_pseudo" context="_1" mangled="27__si_class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> - <CvQualifiedType id="_24c" type="_24" const="1"/> - <Struct id="_26" name="__class_type_info_pseudo" context="_1" mangled="24__class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> - <CvQualifiedType id="_26c" type="_26" const="1"/> - <FundamentalType id="_28" name="long int"/> - <FundamentalType id="_29" name="void"/> - <PointerType id="_30" type="_29c"/> - <PointerType id="_31" type="_29"/> - <FundamentalType id="_32" name="unsigned int"/> - <FundamentalType id="_33" name="long double"/> - <PointerType id="_34" type="_47c"/> - <FundamentalType id="_35" name="float"/> - <FundamentalType id="_36" name="double"/> - <Namespace id="_37" name="class_hierarchy" context="_19" members="_49 _50 _51 _52 _53 _54 " mangled="_ZN4core15class_hierarchyE"/> - <Field id="_38" name="" type="_55" context="_20" location="f0:30" file="f0" line="30"/> - <Field id="_39" name="" type="_56" context="_20" location="f0:30" file="f0" line="30"/> - <Field id="_40" name="" type="_56" context="_20" location="f0:30" file="f0" line="30"/> - <Field id="_41" name="" type="_57" context="_20" location="f0:30" file="f0" line="30"/> - <Field id="_42" name="" type="_55" context="_22" location="f0:24" file="f0" line="24"/> - <Field id="_43" name="" type="_56" context="_22" location="f0:24" file="f0" line="24"/> - <Field id="_44" name="" type="_56" context="_22" location="f0:24" file="f0" line="24"/> - <Field id="_45" name="" type="_58" context="_22" location="f0:24" file="f0" line="24"/> - <Class id="_49" name="multi_derived_t" context="_37" mangled="N4core15class_hierarchy15multi_derived_tE" location="f0:30" file="f0" line="30" members="_59 _60 _61 " bases="private:_50 protected:_54 private:_53 "/> - <Class id="_50" name="derived_private_t" context="_37" mangled="N4core15class_hierarchy17derived_private_tE" location="f0:27" file="f0" line="27" members="_62 _63 _64 " bases="private:_54 "/> - <Class id="_51" name="derived_protected_t" context="_37" mangled="N4core15class_hierarchy19derived_protected_tE" location="f0:24" file="f0" line="24" members="_65 _66 _67 " bases="protected:_54 "/> - <Class id="_52" name="derived_public_t" context="_37" mangled="N4core15class_hierarchy16derived_public_tE" location="f0:21" file="f0" line="21" members="_68 _69 _70 " bases="_54 "/> - <Class id="_53" name="other_base_t" context="_37" mangled="N4core15class_hierarchy12other_base_tE" location="f0:18" file="f0" line="18" members="_71 _72 " bases=""/> - <Class id="_54" name="base_t" context="_37" mangled="N4core15class_hierarchy6base_tE" location="f0:13" file="f0" line="13" members="_73 _74 _75 " bases=""/> - <Struct id="_55" name="__type_info_pseudo" context="_1" mangled="18__type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> - <FundamentalType id="_56" name="int"/> - <ArrayType id="_57" min="0" max="3" type="_76"/> - <ArrayType id="_58" min="0" max="1" type="_76"/> - <Constructor id="_59" name="multi_derived_t" artificial="1" throw="" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tC1ERKS1_ *INTERNAL* " location="f0:30" file="f0" line="30"> - <Argument name="_ctor_arg" type="_77"/> - </Constructor> - <Constructor id="_60" name="multi_derived_t" artificial="1" throw="" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tC1Ev *INTERNAL* " location="f0:30" file="f0" line="30"/> - <Destructor id="_61" name="multi_derived_t" virtual="1" artificial="1" context="_49" mangled="_ZN4core15class_hierarchy15multi_derived_tD1Ev *INTERNAL* " location="f0:30" file="f0" line="30"> - </Destructor> - <Constructor id="_62" name="derived_private_t" artificial="1" throw="" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tC1ERKS1_ *INTERNAL* " location="f0:27" file="f0" line="27"> - <Argument name="_ctor_arg" type="_78"/> - </Constructor> - <Constructor id="_63" name="derived_private_t" artificial="1" throw="" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tC1Ev *INTERNAL* " location="f0:27" file="f0" line="27"/> - <Destructor id="_64" name="derived_private_t" virtual="1" artificial="1" context="_50" mangled="_ZN4core15class_hierarchy17derived_private_tD1Ev *INTERNAL* " location="f0:27" file="f0" line="27"> - </Destructor> - <Constructor id="_65" name="derived_protected_t" artificial="1" throw="" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tC1ERKS1_ *INTERNAL* " location="f0:24" file="f0" line="24"> - <Argument name="_ctor_arg" type="_79"/> - </Constructor> - <Constructor id="_66" name="derived_protected_t" artificial="1" throw="" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tC1Ev *INTERNAL* " location="f0:24" file="f0" line="24"/> - <Destructor id="_67" name="derived_protected_t" virtual="1" artificial="1" context="_51" mangled="_ZN4core15class_hierarchy19derived_protected_tD1Ev *INTERNAL* " location="f0:24" file="f0" line="24"> - </Destructor> - <Constructor id="_68" name="derived_public_t" artificial="1" throw="" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tC1ERKS1_ *INTERNAL* " location="f0:21" file="f0" line="21"> - <Argument name="_ctor_arg" type="_80"/> - </Constructor> - <Constructor id="_69" name="derived_public_t" artificial="1" throw="" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tC1Ev *INTERNAL* " location="f0:21" file="f0" line="21"/> - <Destructor id="_70" name="derived_public_t" virtual="1" artificial="1" context="_52" mangled="_ZN4core15class_hierarchy16derived_public_tD1Ev *INTERNAL* " location="f0:21" file="f0" line="21"> - </Destructor> - <Constructor id="_71" name="other_base_t" artificial="1" throw="" context="_53" mangled="_ZN4core15class_hierarchy12other_base_tC1ERKS1_ *INTERNAL* " location="f0:18" file="f0" line="18"> - <Argument name="_ctor_arg" type="_81"/> - </Constructor> - <Constructor id="_72" name="other_base_t" artificial="1" throw="" context="_53" mangled="_ZN4core15class_hierarchy12other_base_tC1Ev *INTERNAL* " location="f0:18" file="f0" line="18"/> - <Constructor id="_73" name="base_t" artificial="1" throw="" context="_54" mangled="_ZN4core15class_hierarchy6base_tC1ERKS1_ *INTERNAL* " location="f0:13" file="f0" line="13"> - <Argument name="_ctor_arg" type="_82"/> - </Constructor> - <Constructor id="_74" name="base_t" artificial="1" throw="" context="_54" mangled="_ZN4core15class_hierarchy6base_tC1Ev *INTERNAL* " location="f0:13" file="f0" line="13"/> - <Destructor id="_75" name="base_t" virtual="1" context="_54" mangled="_ZN4core15class_hierarchy6base_tD1Ev *INTERNAL* " location="f0:15" file="f0" line="15" endline="15"> - </Destructor> - <Struct id="_76" name="__base_class_type_info_pseudo" context="_1" mangled="29__base_class_type_info_pseudo" location="f2:0" file="f2" line="0" members="" bases=""/> - <ReferenceType id="_77" type="_49c"/> - <ReferenceType id="_78" type="_50c"/> - <ReferenceType id="_79" type="_51c"/> - <ReferenceType id="_80" type="_52c"/> - <ReferenceType id="_81" type="_53c"/> - <ReferenceType id="_82" type="_54c"/> - <FundamentalType id="_47" name="char"/> - <CvQualifiedType id="_47c" type="_47" const="1"/> - <CvQualifiedType id="_29c" type="_29" const="1"/> - <CvQualifiedType id="_54c" type="_54" const="1"/> - <CvQualifiedType id="_53c" type="_53" const="1"/> - <CvQualifiedType id="_52c" type="_52" const="1"/> - <CvQualifiedType id="_51c" type="_51" const="1"/> - <CvQualifiedType id="_50c" type="_50" const="1"/> - <CvQualifiedType id="_49c" type="_49" const="1"/> - <File id="f0" name="core_class_hierarchy.hpp"/> - <File id="f1" name="/usr/local/share/gccxml-0.6/GCC/3.3/gccxml_builtins.h"/> - <File id="f2" name="<internal>"/> -</GCC_XML> Copied: pygccxml_dev/docs/example.hpp (from rev 656, pygccxml_dev/docs/core_class_hierarchy.hpp) =================================================================== --- pygccxml_dev/docs/example.hpp (rev 0) +++ pygccxml_dev/docs/example.hpp 2006-10-12 09:40:59 UTC (rev 657) @@ -0,0 +1,34 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef example_hpp_12_10_2006 +#define example_hpp_12_10_2006 + + +namespace core{ namespace class_hierarchy{ + +class base_t{ +public: + virtual ~base_t(){}; +}; + +class other_base_t{ +}; + +class derived_public_t : public base_t{ +}; + +class derived_protected_t : protected base_t{ +}; + +class derived_private_t : private base_t{ +}; + +class multi_derived_t : derived_private_t, protected base_t, private other_base_t{ +}; + +} } + +#endif//example_hpp_12_10_2006 Added: pygccxml_dev/docs/example.hpp.rest =================================================================== --- pygccxml_dev/docs/example.hpp.rest (rev 0) +++ pygccxml_dev/docs/example.hpp.rest 2006-10-12 09:40:59 UTC (rev 657) @@ -0,0 +1,3 @@ +.. code-block:: + :language: C++ + :source-file: ./example.hpp Copied: pygccxml_dev/docs/example.hpp.xml (from rev 656, pygccxml_dev/docs/core_class_hierarchy.hpp.xml) =================================================================== --- pygccxml_dev/docs/example.hpp.xml (rev 0) +++ pygccxml_dev/docs/example.hpp.xml 2006-10-12 09:40:59 UTC (rev 657) @@ -0,0 +1,97 @@ +<?xml version="1.0"?> +<GCC_XML cvs_revision="1.112"> + <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 " mangled="_Z2::" demangled="::"/> + <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std" demangled="std"/> + <Variable id="_3" name="_ZTIN4core15class_hierarchy15multi_derived_tE" type="_9c" context="_1" location="f0:30" file="f0" line="30" extern="1" artificial="1"/> + <Variable id="_4" name="_ZTIN4core15class_hierarchy17derived_private_tE" type="_11c" context="_1" location="f0:27" file="f0" line="27" extern="1" artificial="1"/> + <Variable id="_5" name="_ZTIN4core15class_hierarchy19derived_protected_tE" type="_11c" context="_1" location="f0:24" file="f0" line="24" extern="1" artificial="1"/> + <Variable id="_6" name="_ZTIN4core15class_hierarchy16derived_public_tE" type="_13c" context="_1" location="f0:21" file="f0" line="21" extern="1" artificial="1"/> + <Variable id="_7" name="_ZTIN4core15class_hierarchy6base_tE" type="_15c" context="_1" location="f0:13" file="f0" line="13" extern="1" artificial="1"/> + <Namespace id="_8" name="core" context="_1" members="_17 " mangled="_Z4core" demangled="core"/> + <Struct id="_9" name="__vmi_class_type_info_pseudo3" context="_1" mangled="29__vmi_class_type_info_pseudo3" demangled="__vmi_class_type_info_pseudo3" location="f0:30" file="f0" line="30" size="384" align="32" members="_18 _19 _20 _21 " bases=""/> + <CvQualifiedType id="_9c" type="_9" const="1"/> + <Struct id="_11" name="__vmi_class_type_info_pseudo1" context="_1" mangled="29__vmi_class_type_info_pseudo1" demangled="__vmi_class_type_info_pseudo1" location="f0:24" file="f0" line="24" size="256" align="32" members="_22 _23 _24 _25 " bases=""/> + <CvQualifiedType id="_11c" type="_11" const="1"/> + <Struct id="_13" name="__si_class_type_info_pseudo" context="_1" mangled="27__si_class_type_info_pseudo" demangled="__si_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="96" align="32" members="" bases=""/> + <CvQualifiedType id="_13c" type="_13" const="1"/> + <Struct id="_15" name="__class_type_info_pseudo" context="_1" mangled="24__class_type_info_pseudo" demangled="__class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <CvQualifiedType id="_15c" type="_15" const="1"/> + <Namespace id="_17" name="class_hierarchy" context="_8" members="_26 _27 _28 _29 _30 _31 " mangled="_ZN4core15class_hierarchyE" demangled="core::class_hierarchy"/> + <Field id="_18" name="" type="_32" offset="0" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_19" name="" type="_33" offset="64" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_20" name="" type="_33" offset="96" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_21" name="" type="_34" offset="128" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_22" name="" type="_32" offset="0" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_23" name="" type="_33" offset="64" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_24" name="" type="_33" offset="96" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_25" name="" type="_35" offset="128" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Class id="_26" name="multi_derived_t" context="_17" mangled="N4core15class_hierarchy15multi_derived_tE" demangled="core::class_hierarchy::multi_derived_t" location="f0:30" file="f0" line="30" artificial="1" size="64" align="32" members="_36 _37 _38 " bases="private:_27 protected:_31 private:_30 "> + <Base type="_27" access="private" virtual="0" offset="0"/> + <Base type="_31" access="protected" virtual="0" offset="4"/> + <Base type="_30" access="private" virtual="0" offset="0"/> + </Class> + <Class id="_27" name="derived_private_t" context="_17" mangled="N4core15class_hierarchy17derived_private_tE" demangled="core::class_hierarchy::derived_private_t" location="f0:27" file="f0" line="27" artificial="1" size="32" align="32" members="_39 _40 _41 " bases="private:_31 "> + <Base type="_31" access="private" virtual="0" offset="0"/> + </Class> + <Class id="_28" name="derived_protected_t" context="_17" mangled="N4core15class_hierarchy19derived_protected_tE" demangled="core::class_hierarchy::derived_protected_t" location="f0:24" file="f0" line="24" artificial="1" size="32" align="32" members="_42 _43 _44 " bases="protected:_31 "> + <Base type="_31" access="protected" virtual="0" offset="0"/> + </Class> + <Class id="_29" name="derived_public_t" context="_17" mangled="N4core15class_hierarchy16derived_public_tE" demangled="core::class_hierarchy::derived_public_t" location="f0:21" file="f0" line="21" artificial="1" size="32" align="32" members="_45 _46 _47 " bases="_31 "> + <Base type="_31" access="public" virtual="0" offset="0"/> + </Class> + <Class id="_30" name="other_base_t" context="_17" mangled="N4core15class_hierarchy12other_base_tE" demangled="core::class_hierarchy::other_base_t" location="f0:18" file="f0" line="18" artificial="1" size="8" align="8" members="_48 _49 " bases=""/> + <Class id="_31" name="base_t" context="_17" mangled="N4core15class_hierarchy6base_tE" demangled="core::class_hierarchy::base_t" location="f0:13" file="f0" line="13" artificial="1" size="32" align="32" members="_50 _51 _52 " bases=""/> + <Struct id="_32" name="__type_info_pseudo" context="_1" mangled="18__type_info_pseudo" demangled="__type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <FundamentalType id="_33" name="int" size="32" align="32"/> + <ArrayType id="_34" min="0" max="3" type="_53" size="256" align="32"/> + <ArrayType id="_35" min="0" max="1" type="_53" size="128" align="32"/> + <Constructor id="_36" name="multi_derived_t" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t(core::class_hierarchy::multi_derived_t const&)" location="f0:30" file="f0" line="30" inline="1"> + <Argument name="_ctor_arg" type="_54" location="f0:30" file="f0" line="30"/> + </Constructor> + <Constructor id="_37" name="multi_derived_t" explicit="1" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"/> + <Destructor id="_38" name="multi_derived_t" virtual="1" artificial="1" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::~multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"> + </Destructor> + <Constructor id="_39" name="derived_private_t" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t(core::class_hierarchy::derived_private_t const&)" location="f0:27" file="f0" line="27" inline="1"> + <Argument name="_ctor_arg" type="_55" location="f0:27" file="f0" line="27"/> + </Constructor> + <Constructor id="_40" name="derived_private_t" explicit="1" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t()" location="f0:27" file="f0" line="27" inline="1"/> + <Destructor id="_41" name="derived_private_t" virtual="1" artificial="1" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::~derived_private_t()" location="f0:27" file="f0" line="27" inline="1"> + </Destructor> + <Constructor id="_42" name="derived_protected_t" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t(core::class_hierarchy::derived_protected_t const&)" location="f0:24" file="f0" line="24" inline="1"> + <Argument name="_ctor_arg" type="_56" location="f0:24" file="f0" line="24"/> + </Constructor> + <Constructor id="_43" name="derived_protected_t" explicit="1" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"/> + <Destructor id="_44" name="derived_protected_t" virtual="1" artificial="1" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::~derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"> + </Destructor> + <Constructor id="_45" name="derived_public_t" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t(core::class_hierarchy::derived_public_t const&)" location="f0:21" file="f0" line="21" inline="1"> + <Argument name="_ctor_arg" type="_57" location="f0:21" file="f0" line="21"/> + </Constructor> + <Constructor id="_46" name="derived_public_t" explicit="1" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t()" location="f0:21" file="f0" line="21" inline="1"/> + <Destructor id="_47" name="derived_public_t" virtual="1" artificial="1" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::~derived_public_t()" location="f0:21" file="f0" line="21" inline="1"> + </Destructor> + <Constructor id="_48" name="other_base_t" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t(core::class_hierarchy::other_base_t const&)" location="f0:18" file="f0" line="18" inline="1"> + <Argument name="_ctor_arg" type="_58" location="f0:18" file="f0" line="18"/> + </Constructor> + <Constructor id="_49" name="other_base_t" explicit="1" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t()" location="f0:18" file="f0" line="18" inline="1"/> + <Constructor id="_50" name="base_t" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t(core::class_hierarchy::base_t const&)" location="f0:13" file="f0" line="13" inline="1"> + <Argument name="_ctor_arg" type="_59" location="f0:13" file="f0" line="13"/> + </Constructor> + <Constructor id="_51" name="base_t" explicit="1" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t()" location="f0:13" file="f0" line="13" inline="1"/> + <Destructor id="_52" name="base_t" virtual="1" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::~base_t()" location="f0:15" file="f0" line="15" endline="15" inline="1"> + </Destructor> + <Struct id="_53" name="__base_class_type_info_pseudo" context="_1" mangled="29__base_class_type_info_pseudo" demangled="__base_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <ReferenceType id="_54" type="_26c" size="32" align="32"/> + <ReferenceType id="_55" type="_27c" size="32" align="32"/> + <ReferenceType id="_56" type="_28c" size="32" align="32"/> + <ReferenceType id="_57" type="_29c" size="32" align="32"/> + <ReferenceType id="_58" type="_30c" size="32" align="32"/> + <ReferenceType id="_59" type="_31c" size="32" align="32"/> + <CvQualifiedType id="_31c" type="_31" const="1"/> + <CvQualifiedType id="_30c" type="_30" const="1"/> + <CvQualifiedType id="_29c" type="_29" const="1"/> + <CvQualifiedType id="_28c" type="_28" const="1"/> + <CvQualifiedType id="_27c" type="_27" const="1"/> + <CvQualifiedType id="_26c" type="_26" const="1"/> + <File id="f0" name="D:/pygccxml_sources/sources/pygccxml_dev/docs/example.hpp"/> + <File id="f1" name="<internal>"/> +</GCC_XML> Added: pygccxml_dev/docs/example.hpp.xml.rest =================================================================== --- pygccxml_dev/docs/example.hpp.xml.rest (rev 0) +++ pygccxml_dev/docs/example.hpp.xml.rest 2006-10-12 09:40:59 UTC (rev 657) @@ -0,0 +1,3 @@ +.. code-block:: + :language: XML + :source-file: ./example.hpp.xml Added: pygccxml_dev/docs/example.py.rest =================================================================== --- pygccxml_dev/docs/example.py.rest (rev 0) +++ pygccxml_dev/docs/example.py.rest 2006-10-12 09:40:59 UTC (rev 657) @@ -0,0 +1,3 @@ +.. code-block:: + :language: Python + :source-file: ./example.py Modified: pygccxml_dev/docs/pygccxml.rest =================================================================== --- pygccxml_dev/docs/pygccxml.rest 2006-10-12 09:29:16 UTC (rev 656) +++ pygccxml_dev/docs/pygccxml.rest 2006-10-12 09:40:59 UTC (rev 657) @@ -36,14 +36,14 @@ Usage example ------------- First of all let's see a small and simple `example`_. This example prints all -declarations, reported by `GCC-XML`_ after parsing `core_class_hierarchy.hpp`_ -file. Also it prints all classes, and for every class it will print it's base -and derived classes. It was simple task, right? If you are still curious how it -looks "in the real life", I mean how xml file is look like, you may look at the +declarations, reported by `GCC-XML`_ after parsing `example.hpp`_ file. Also it +prints all classes, and for every class it will print it's base and derived +classes. It was simple task, right? If you are still curious how it looks +"in the real life", I mean how xml file is look like, you may look at the `original XML file`_ generated by `GCC-XML`_. -.. _`original XML file` : ./core_class_hierarchy.hpp.xml.html -.. _`core_class_hierarchy.hpp` : ./core_class_hierarchy.hpp.html +.. _`original XML file` : ./example.hpp.xml.html +.. _`example.hpp` : ./example.hpp.html .. _`example` : ./example.py.html -------- This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2007-12-04 21:56:09
|
Revision: 1194 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1194&view=rev Author: roman_yakovenko Date: 2007-12-04 13:56:13 -0800 (Tue, 04 Dec 2007) Log Message: ----------- moving example to separate directory Modified Paths: -------------- pygccxml_dev/docs/history/history.rest pygccxml_dev/docs/query_interface.rest Added Paths: ----------- pygccxml_dev/docs/example/ pygccxml_dev/docs/example/example.hpp pygccxml_dev/docs/example/example.hpp.rest pygccxml_dev/docs/example/example.hpp.xml pygccxml_dev/docs/example/example.hpp.xml.rest pygccxml_dev/docs/example/example.py pygccxml_dev/docs/example/example.py.rest pygccxml_dev/docs/example/example.rest pygccxml_dev/docs/example/www_configuration.py Removed Paths: ------------- pygccxml_dev/docs/example.hpp pygccxml_dev/docs/example.hpp.rest pygccxml_dev/docs/example.hpp.xml pygccxml_dev/docs/example.hpp.xml.rest pygccxml_dev/docs/example.py pygccxml_dev/docs/example.py.rest Added: pygccxml_dev/docs/example/example.hpp =================================================================== --- pygccxml_dev/docs/example/example.hpp (rev 0) +++ pygccxml_dev/docs/example/example.hpp 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,34 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef example_hpp_12_10_2006 +#define example_hpp_12_10_2006 + + +namespace core{ namespace class_hierarchy{ + +class base_t{ +public: + virtual ~base_t(){}; +}; + +class other_base_t{ +}; + +class derived_public_t : public base_t{ +}; + +class derived_protected_t : protected base_t{ +}; + +class derived_private_t : private base_t{ +}; + +class multi_derived_t : derived_private_t, protected base_t, private other_base_t{ +}; + +} } + +#endif//example_hpp_12_10_2006 Added: pygccxml_dev/docs/example/example.hpp.rest =================================================================== --- pygccxml_dev/docs/example/example.hpp.rest (rev 0) +++ pygccxml_dev/docs/example/example.hpp.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,3 @@ +.. code-block:: + :language: C++ + :source-file: ./example.hpp Added: pygccxml_dev/docs/example/example.hpp.xml =================================================================== --- pygccxml_dev/docs/example/example.hpp.xml (rev 0) +++ pygccxml_dev/docs/example/example.hpp.xml 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,97 @@ +<?xml version="1.0"?> +<GCC_XML cvs_revision="1.112"> + <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 " mangled="_Z2::" demangled="::"/> + <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std" demangled="std"/> + <Variable id="_3" name="_ZTIN4core15class_hierarchy15multi_derived_tE" type="_9c" context="_1" location="f0:30" file="f0" line="30" extern="1" artificial="1"/> + <Variable id="_4" name="_ZTIN4core15class_hierarchy17derived_private_tE" type="_11c" context="_1" location="f0:27" file="f0" line="27" extern="1" artificial="1"/> + <Variable id="_5" name="_ZTIN4core15class_hierarchy19derived_protected_tE" type="_11c" context="_1" location="f0:24" file="f0" line="24" extern="1" artificial="1"/> + <Variable id="_6" name="_ZTIN4core15class_hierarchy16derived_public_tE" type="_13c" context="_1" location="f0:21" file="f0" line="21" extern="1" artificial="1"/> + <Variable id="_7" name="_ZTIN4core15class_hierarchy6base_tE" type="_15c" context="_1" location="f0:13" file="f0" line="13" extern="1" artificial="1"/> + <Namespace id="_8" name="core" context="_1" members="_17 " mangled="_Z4core" demangled="core"/> + <Struct id="_9" name="__vmi_class_type_info_pseudo3" context="_1" mangled="29__vmi_class_type_info_pseudo3" demangled="__vmi_class_type_info_pseudo3" location="f0:30" file="f0" line="30" size="384" align="32" members="_18 _19 _20 _21 " bases=""/> + <CvQualifiedType id="_9c" type="_9" const="1"/> + <Struct id="_11" name="__vmi_class_type_info_pseudo1" context="_1" mangled="29__vmi_class_type_info_pseudo1" demangled="__vmi_class_type_info_pseudo1" location="f0:24" file="f0" line="24" size="256" align="32" members="_22 _23 _24 _25 " bases=""/> + <CvQualifiedType id="_11c" type="_11" const="1"/> + <Struct id="_13" name="__si_class_type_info_pseudo" context="_1" mangled="27__si_class_type_info_pseudo" demangled="__si_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="96" align="32" members="" bases=""/> + <CvQualifiedType id="_13c" type="_13" const="1"/> + <Struct id="_15" name="__class_type_info_pseudo" context="_1" mangled="24__class_type_info_pseudo" demangled="__class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <CvQualifiedType id="_15c" type="_15" const="1"/> + <Namespace id="_17" name="class_hierarchy" context="_8" members="_26 _27 _28 _29 _30 _31 " mangled="_ZN4core15class_hierarchyE" demangled="core::class_hierarchy"/> + <Field id="_18" name="" type="_32" offset="0" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_19" name="" type="_33" offset="64" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_20" name="" type="_33" offset="96" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_21" name="" type="_34" offset="128" context="_9" access="public" location="f0:30" file="f0" line="30"/> + <Field id="_22" name="" type="_32" offset="0" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_23" name="" type="_33" offset="64" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_24" name="" type="_33" offset="96" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Field id="_25" name="" type="_35" offset="128" context="_11" access="public" location="f0:24" file="f0" line="24"/> + <Class id="_26" name="multi_derived_t" context="_17" mangled="N4core15class_hierarchy15multi_derived_tE" demangled="core::class_hierarchy::multi_derived_t" location="f0:30" file="f0" line="30" artificial="1" size="64" align="32" members="_36 _37 _38 " bases="private:_27 protected:_31 private:_30 "> + <Base type="_27" access="private" virtual="0" offset="0"/> + <Base type="_31" access="protected" virtual="0" offset="4"/> + <Base type="_30" access="private" virtual="0" offset="0"/> + </Class> + <Class id="_27" name="derived_private_t" context="_17" mangled="N4core15class_hierarchy17derived_private_tE" demangled="core::class_hierarchy::derived_private_t" location="f0:27" file="f0" line="27" artificial="1" size="32" align="32" members="_39 _40 _41 " bases="private:_31 "> + <Base type="_31" access="private" virtual="0" offset="0"/> + </Class> + <Class id="_28" name="derived_protected_t" context="_17" mangled="N4core15class_hierarchy19derived_protected_tE" demangled="core::class_hierarchy::derived_protected_t" location="f0:24" file="f0" line="24" artificial="1" size="32" align="32" members="_42 _43 _44 " bases="protected:_31 "> + <Base type="_31" access="protected" virtual="0" offset="0"/> + </Class> + <Class id="_29" name="derived_public_t" context="_17" mangled="N4core15class_hierarchy16derived_public_tE" demangled="core::class_hierarchy::derived_public_t" location="f0:21" file="f0" line="21" artificial="1" size="32" align="32" members="_45 _46 _47 " bases="_31 "> + <Base type="_31" access="public" virtual="0" offset="0"/> + </Class> + <Class id="_30" name="other_base_t" context="_17" mangled="N4core15class_hierarchy12other_base_tE" demangled="core::class_hierarchy::other_base_t" location="f0:18" file="f0" line="18" artificial="1" size="8" align="8" members="_48 _49 " bases=""/> + <Class id="_31" name="base_t" context="_17" mangled="N4core15class_hierarchy6base_tE" demangled="core::class_hierarchy::base_t" location="f0:13" file="f0" line="13" artificial="1" size="32" align="32" members="_50 _51 _52 " bases=""/> + <Struct id="_32" name="__type_info_pseudo" context="_1" mangled="18__type_info_pseudo" demangled="__type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <FundamentalType id="_33" name="int" size="32" align="32"/> + <ArrayType id="_34" min="0" max="3" type="_53" size="256" align="32"/> + <ArrayType id="_35" min="0" max="1" type="_53" size="128" align="32"/> + <Constructor id="_36" name="multi_derived_t" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t(core::class_hierarchy::multi_derived_t const&)" location="f0:30" file="f0" line="30" inline="1"> + <Argument name="_ctor_arg" type="_54" location="f0:30" file="f0" line="30"/> + </Constructor> + <Constructor id="_37" name="multi_derived_t" explicit="1" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"/> + <Destructor id="_38" name="multi_derived_t" virtual="1" artificial="1" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::~multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"> + </Destructor> + <Constructor id="_39" name="derived_private_t" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t(core::class_hierarchy::derived_private_t const&)" location="f0:27" file="f0" line="27" inline="1"> + <Argument name="_ctor_arg" type="_55" location="f0:27" file="f0" line="27"/> + </Constructor> + <Constructor id="_40" name="derived_private_t" explicit="1" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t()" location="f0:27" file="f0" line="27" inline="1"/> + <Destructor id="_41" name="derived_private_t" virtual="1" artificial="1" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::~derived_private_t()" location="f0:27" file="f0" line="27" inline="1"> + </Destructor> + <Constructor id="_42" name="derived_protected_t" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t(core::class_hierarchy::derived_protected_t const&)" location="f0:24" file="f0" line="24" inline="1"> + <Argument name="_ctor_arg" type="_56" location="f0:24" file="f0" line="24"/> + </Constructor> + <Constructor id="_43" name="derived_protected_t" explicit="1" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"/> + <Destructor id="_44" name="derived_protected_t" virtual="1" artificial="1" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::~derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"> + </Destructor> + <Constructor id="_45" name="derived_public_t" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t(core::class_hierarchy::derived_public_t const&)" location="f0:21" file="f0" line="21" inline="1"> + <Argument name="_ctor_arg" type="_57" location="f0:21" file="f0" line="21"/> + </Constructor> + <Constructor id="_46" name="derived_public_t" explicit="1" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t()" location="f0:21" file="f0" line="21" inline="1"/> + <Destructor id="_47" name="derived_public_t" virtual="1" artificial="1" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::~derived_public_t()" location="f0:21" file="f0" line="21" inline="1"> + </Destructor> + <Constructor id="_48" name="other_base_t" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t(core::class_hierarchy::other_base_t const&)" location="f0:18" file="f0" line="18" inline="1"> + <Argument name="_ctor_arg" type="_58" location="f0:18" file="f0" line="18"/> + </Constructor> + <Constructor id="_49" name="other_base_t" explicit="1" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t()" location="f0:18" file="f0" line="18" inline="1"/> + <Constructor id="_50" name="base_t" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t(core::class_hierarchy::base_t const&)" location="f0:13" file="f0" line="13" inline="1"> + <Argument name="_ctor_arg" type="_59" location="f0:13" file="f0" line="13"/> + </Constructor> + <Constructor id="_51" name="base_t" explicit="1" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t()" location="f0:13" file="f0" line="13" inline="1"/> + <Destructor id="_52" name="base_t" virtual="1" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::~base_t()" location="f0:15" file="f0" line="15" endline="15" inline="1"> + </Destructor> + <Struct id="_53" name="__base_class_type_info_pseudo" context="_1" mangled="29__base_class_type_info_pseudo" demangled="__base_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> + <ReferenceType id="_54" type="_26c" size="32" align="32"/> + <ReferenceType id="_55" type="_27c" size="32" align="32"/> + <ReferenceType id="_56" type="_28c" size="32" align="32"/> + <ReferenceType id="_57" type="_29c" size="32" align="32"/> + <ReferenceType id="_58" type="_30c" size="32" align="32"/> + <ReferenceType id="_59" type="_31c" size="32" align="32"/> + <CvQualifiedType id="_31c" type="_31" const="1"/> + <CvQualifiedType id="_30c" type="_30" const="1"/> + <CvQualifiedType id="_29c" type="_29" const="1"/> + <CvQualifiedType id="_28c" type="_28" const="1"/> + <CvQualifiedType id="_27c" type="_27" const="1"/> + <CvQualifiedType id="_26c" type="_26" const="1"/> + <File id="f0" name="D:/pygccxml_sources/sources/pygccxml_dev/docs/example.hpp"/> + <File id="f1" name="<internal>"/> +</GCC_XML> Added: pygccxml_dev/docs/example/example.hpp.xml.rest =================================================================== --- pygccxml_dev/docs/example/example.hpp.xml.rest (rev 0) +++ pygccxml_dev/docs/example/example.hpp.xml.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,3 @@ +.. code-block:: + :language: XML + :source-file: ./example.hpp.xml Added: pygccxml_dev/docs/example/example.py =================================================================== --- pygccxml_dev/docs/example/example.py (rev 0) +++ pygccxml_dev/docs/example/example.py 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,26 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import sys +sys.path.append('../..') #adding pygccxml to the path + +from pygccxml import parser +from pygccxml import declarations + +#configure GCC-XML parser +config = parser.config_t( gccxml_path='/home/roman/gccxml-build/bin/gccxml' ) + +#parsing source file +decls = parser.parse( ['example.hpp'], config ) +global_ns = declarations.get_global_namespace( decls ) + +#printing all declarations found in file and its includes +declarations.print_declarations( global_ns ) + +#print all base and derived class names +for class_ in global_ns.classes(): + print class_.name + print '\tbases: ', `[base.related_class.name for base in class_.bases]` + print '\tderived: ', `[derive.related_class.name for derive in class_.derived]` Added: pygccxml_dev/docs/example/example.py.rest =================================================================== --- pygccxml_dev/docs/example/example.py.rest (rev 0) +++ pygccxml_dev/docs/example/example.py.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,3 @@ +.. code-block:: + :language: Python + :source-file: ./example.py Added: pygccxml_dev/docs/example/example.rest =================================================================== --- pygccxml_dev/docs/example/example.rest (rev 0) +++ pygccxml_dev/docs/example/example.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,16 @@ +======= +Example +======= + +This directory contains C++ source file, GCC-XML generated file and Python script +that uses `pygccxml`_ to extract information from the source file. + +.. _`pygccxml`: ./../pygccxml.html + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: Added: pygccxml_dev/docs/example/www_configuration.py =================================================================== --- pygccxml_dev/docs/example/www_configuration.py (rev 0) +++ pygccxml_dev/docs/example/www_configuration.py 2007-12-04 21:56:13 UTC (rev 1194) @@ -0,0 +1,3 @@ +name = 'example' +files_to_skip = [] +names = {} Deleted: pygccxml_dev/docs/example.hpp =================================================================== --- pygccxml_dev/docs/example.hpp 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.hpp 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,34 +0,0 @@ -// Copyright 2004 Roman Yakovenko. -// Distributed under the Boost Software License, Version 1.0. (See -// accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -#ifndef example_hpp_12_10_2006 -#define example_hpp_12_10_2006 - - -namespace core{ namespace class_hierarchy{ - -class base_t{ -public: - virtual ~base_t(){}; -}; - -class other_base_t{ -}; - -class derived_public_t : public base_t{ -}; - -class derived_protected_t : protected base_t{ -}; - -class derived_private_t : private base_t{ -}; - -class multi_derived_t : derived_private_t, protected base_t, private other_base_t{ -}; - -} } - -#endif//example_hpp_12_10_2006 Deleted: pygccxml_dev/docs/example.hpp.rest =================================================================== --- pygccxml_dev/docs/example.hpp.rest 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.hpp.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,3 +0,0 @@ -.. code-block:: - :language: C++ - :source-file: ./example.hpp Deleted: pygccxml_dev/docs/example.hpp.xml =================================================================== --- pygccxml_dev/docs/example.hpp.xml 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.hpp.xml 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,97 +0,0 @@ -<?xml version="1.0"?> -<GCC_XML cvs_revision="1.112"> - <Namespace id="_1" name="::" members="_3 _4 _5 _6 _7 _8 " mangled="_Z2::" demangled="::"/> - <Namespace id="_2" name="std" context="_1" members="" mangled="_Z3std" demangled="std"/> - <Variable id="_3" name="_ZTIN4core15class_hierarchy15multi_derived_tE" type="_9c" context="_1" location="f0:30" file="f0" line="30" extern="1" artificial="1"/> - <Variable id="_4" name="_ZTIN4core15class_hierarchy17derived_private_tE" type="_11c" context="_1" location="f0:27" file="f0" line="27" extern="1" artificial="1"/> - <Variable id="_5" name="_ZTIN4core15class_hierarchy19derived_protected_tE" type="_11c" context="_1" location="f0:24" file="f0" line="24" extern="1" artificial="1"/> - <Variable id="_6" name="_ZTIN4core15class_hierarchy16derived_public_tE" type="_13c" context="_1" location="f0:21" file="f0" line="21" extern="1" artificial="1"/> - <Variable id="_7" name="_ZTIN4core15class_hierarchy6base_tE" type="_15c" context="_1" location="f0:13" file="f0" line="13" extern="1" artificial="1"/> - <Namespace id="_8" name="core" context="_1" members="_17 " mangled="_Z4core" demangled="core"/> - <Struct id="_9" name="__vmi_class_type_info_pseudo3" context="_1" mangled="29__vmi_class_type_info_pseudo3" demangled="__vmi_class_type_info_pseudo3" location="f0:30" file="f0" line="30" size="384" align="32" members="_18 _19 _20 _21 " bases=""/> - <CvQualifiedType id="_9c" type="_9" const="1"/> - <Struct id="_11" name="__vmi_class_type_info_pseudo1" context="_1" mangled="29__vmi_class_type_info_pseudo1" demangled="__vmi_class_type_info_pseudo1" location="f0:24" file="f0" line="24" size="256" align="32" members="_22 _23 _24 _25 " bases=""/> - <CvQualifiedType id="_11c" type="_11" const="1"/> - <Struct id="_13" name="__si_class_type_info_pseudo" context="_1" mangled="27__si_class_type_info_pseudo" demangled="__si_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="96" align="32" members="" bases=""/> - <CvQualifiedType id="_13c" type="_13" const="1"/> - <Struct id="_15" name="__class_type_info_pseudo" context="_1" mangled="24__class_type_info_pseudo" demangled="__class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> - <CvQualifiedType id="_15c" type="_15" const="1"/> - <Namespace id="_17" name="class_hierarchy" context="_8" members="_26 _27 _28 _29 _30 _31 " mangled="_ZN4core15class_hierarchyE" demangled="core::class_hierarchy"/> - <Field id="_18" name="" type="_32" offset="0" context="_9" access="public" location="f0:30" file="f0" line="30"/> - <Field id="_19" name="" type="_33" offset="64" context="_9" access="public" location="f0:30" file="f0" line="30"/> - <Field id="_20" name="" type="_33" offset="96" context="_9" access="public" location="f0:30" file="f0" line="30"/> - <Field id="_21" name="" type="_34" offset="128" context="_9" access="public" location="f0:30" file="f0" line="30"/> - <Field id="_22" name="" type="_32" offset="0" context="_11" access="public" location="f0:24" file="f0" line="24"/> - <Field id="_23" name="" type="_33" offset="64" context="_11" access="public" location="f0:24" file="f0" line="24"/> - <Field id="_24" name="" type="_33" offset="96" context="_11" access="public" location="f0:24" file="f0" line="24"/> - <Field id="_25" name="" type="_35" offset="128" context="_11" access="public" location="f0:24" file="f0" line="24"/> - <Class id="_26" name="multi_derived_t" context="_17" mangled="N4core15class_hierarchy15multi_derived_tE" demangled="core::class_hierarchy::multi_derived_t" location="f0:30" file="f0" line="30" artificial="1" size="64" align="32" members="_36 _37 _38 " bases="private:_27 protected:_31 private:_30 "> - <Base type="_27" access="private" virtual="0" offset="0"/> - <Base type="_31" access="protected" virtual="0" offset="4"/> - <Base type="_30" access="private" virtual="0" offset="0"/> - </Class> - <Class id="_27" name="derived_private_t" context="_17" mangled="N4core15class_hierarchy17derived_private_tE" demangled="core::class_hierarchy::derived_private_t" location="f0:27" file="f0" line="27" artificial="1" size="32" align="32" members="_39 _40 _41 " bases="private:_31 "> - <Base type="_31" access="private" virtual="0" offset="0"/> - </Class> - <Class id="_28" name="derived_protected_t" context="_17" mangled="N4core15class_hierarchy19derived_protected_tE" demangled="core::class_hierarchy::derived_protected_t" location="f0:24" file="f0" line="24" artificial="1" size="32" align="32" members="_42 _43 _44 " bases="protected:_31 "> - <Base type="_31" access="protected" virtual="0" offset="0"/> - </Class> - <Class id="_29" name="derived_public_t" context="_17" mangled="N4core15class_hierarchy16derived_public_tE" demangled="core::class_hierarchy::derived_public_t" location="f0:21" file="f0" line="21" artificial="1" size="32" align="32" members="_45 _46 _47 " bases="_31 "> - <Base type="_31" access="public" virtual="0" offset="0"/> - </Class> - <Class id="_30" name="other_base_t" context="_17" mangled="N4core15class_hierarchy12other_base_tE" demangled="core::class_hierarchy::other_base_t" location="f0:18" file="f0" line="18" artificial="1" size="8" align="8" members="_48 _49 " bases=""/> - <Class id="_31" name="base_t" context="_17" mangled="N4core15class_hierarchy6base_tE" demangled="core::class_hierarchy::base_t" location="f0:13" file="f0" line="13" artificial="1" size="32" align="32" members="_50 _51 _52 " bases=""/> - <Struct id="_32" name="__type_info_pseudo" context="_1" mangled="18__type_info_pseudo" demangled="__type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> - <FundamentalType id="_33" name="int" size="32" align="32"/> - <ArrayType id="_34" min="0" max="3" type="_53" size="256" align="32"/> - <ArrayType id="_35" min="0" max="1" type="_53" size="128" align="32"/> - <Constructor id="_36" name="multi_derived_t" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t(core::class_hierarchy::multi_derived_t const&)" location="f0:30" file="f0" line="30" inline="1"> - <Argument name="_ctor_arg" type="_54" location="f0:30" file="f0" line="30"/> - </Constructor> - <Constructor id="_37" name="multi_derived_t" explicit="1" artificial="1" throw="" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"/> - <Destructor id="_38" name="multi_derived_t" virtual="1" artificial="1" context="_26" access="public" mangled="_ZN4core15class_hierarchy15multi_derived_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::multi_derived_t::~multi_derived_t()" location="f0:30" file="f0" line="30" inline="1"> - </Destructor> - <Constructor id="_39" name="derived_private_t" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t(core::class_hierarchy::derived_private_t const&)" location="f0:27" file="f0" line="27" inline="1"> - <Argument name="_ctor_arg" type="_55" location="f0:27" file="f0" line="27"/> - </Constructor> - <Constructor id="_40" name="derived_private_t" explicit="1" artificial="1" throw="" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::derived_private_t()" location="f0:27" file="f0" line="27" inline="1"/> - <Destructor id="_41" name="derived_private_t" virtual="1" artificial="1" context="_27" access="public" mangled="_ZN4core15class_hierarchy17derived_private_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_private_t::~derived_private_t()" location="f0:27" file="f0" line="27" inline="1"> - </Destructor> - <Constructor id="_42" name="derived_protected_t" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t(core::class_hierarchy::derived_protected_t const&)" location="f0:24" file="f0" line="24" inline="1"> - <Argument name="_ctor_arg" type="_56" location="f0:24" file="f0" line="24"/> - </Constructor> - <Constructor id="_43" name="derived_protected_t" explicit="1" artificial="1" throw="" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"/> - <Destructor id="_44" name="derived_protected_t" virtual="1" artificial="1" context="_28" access="public" mangled="_ZN4core15class_hierarchy19derived_protected_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_protected_t::~derived_protected_t()" location="f0:24" file="f0" line="24" inline="1"> - </Destructor> - <Constructor id="_45" name="derived_public_t" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t(core::class_hierarchy::derived_public_t const&)" location="f0:21" file="f0" line="21" inline="1"> - <Argument name="_ctor_arg" type="_57" location="f0:21" file="f0" line="21"/> - </Constructor> - <Constructor id="_46" name="derived_public_t" explicit="1" artificial="1" throw="" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::derived_public_t()" location="f0:21" file="f0" line="21" inline="1"/> - <Destructor id="_47" name="derived_public_t" virtual="1" artificial="1" context="_29" access="public" mangled="_ZN4core15class_hierarchy16derived_public_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::derived_public_t::~derived_public_t()" location="f0:21" file="f0" line="21" inline="1"> - </Destructor> - <Constructor id="_48" name="other_base_t" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t(core::class_hierarchy::other_base_t const&)" location="f0:18" file="f0" line="18" inline="1"> - <Argument name="_ctor_arg" type="_58" location="f0:18" file="f0" line="18"/> - </Constructor> - <Constructor id="_49" name="other_base_t" explicit="1" artificial="1" throw="" context="_30" access="public" mangled="_ZN4core15class_hierarchy12other_base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::other_base_t::other_base_t()" location="f0:18" file="f0" line="18" inline="1"/> - <Constructor id="_50" name="base_t" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1ERKS1_ *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t(core::class_hierarchy::base_t const&)" location="f0:13" file="f0" line="13" inline="1"> - <Argument name="_ctor_arg" type="_59" location="f0:13" file="f0" line="13"/> - </Constructor> - <Constructor id="_51" name="base_t" explicit="1" artificial="1" throw="" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tC1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::base_t()" location="f0:13" file="f0" line="13" inline="1"/> - <Destructor id="_52" name="base_t" virtual="1" context="_31" access="public" mangled="_ZN4core15class_hierarchy6base_tD1Ev *INTERNAL* " demangled="core::class_hierarchy::base_t::~base_t()" location="f0:15" file="f0" line="15" endline="15" inline="1"> - </Destructor> - <Struct id="_53" name="__base_class_type_info_pseudo" context="_1" mangled="29__base_class_type_info_pseudo" demangled="__base_class_type_info_pseudo" location="f1:0" file="f1" line="0" size="64" align="32" members="" bases=""/> - <ReferenceType id="_54" type="_26c" size="32" align="32"/> - <ReferenceType id="_55" type="_27c" size="32" align="32"/> - <ReferenceType id="_56" type="_28c" size="32" align="32"/> - <ReferenceType id="_57" type="_29c" size="32" align="32"/> - <ReferenceType id="_58" type="_30c" size="32" align="32"/> - <ReferenceType id="_59" type="_31c" size="32" align="32"/> - <CvQualifiedType id="_31c" type="_31" const="1"/> - <CvQualifiedType id="_30c" type="_30" const="1"/> - <CvQualifiedType id="_29c" type="_29" const="1"/> - <CvQualifiedType id="_28c" type="_28" const="1"/> - <CvQualifiedType id="_27c" type="_27" const="1"/> - <CvQualifiedType id="_26c" type="_26" const="1"/> - <File id="f0" name="D:/pygccxml_sources/sources/pygccxml_dev/docs/example.hpp"/> - <File id="f1" name="<internal>"/> -</GCC_XML> Deleted: pygccxml_dev/docs/example.hpp.xml.rest =================================================================== --- pygccxml_dev/docs/example.hpp.xml.rest 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.hpp.xml.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,3 +0,0 @@ -.. code-block:: - :language: XML - :source-file: ./example.hpp.xml Deleted: pygccxml_dev/docs/example.py =================================================================== --- pygccxml_dev/docs/example.py 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.py 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,26 +0,0 @@ -# Copyright 2004 Roman Yakovenko. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -import sys -sys.path.append('../..') #adding pygccxml to the path - -from pygccxml import parser -from pygccxml import declarations - -#configure GCC-XML parser -config = parser.config_t( gccxml_path='/home/roman/gccxml-build/bin/gccxml' ) - -#parsing source file -decls = parser.parse( ['example.hpp'], config ) -global_ns = declarations.get_global_namespace( decls ) - -#printing all declarations found in file and its includes -declarations.print_declarations( global_ns ) - -#print all base and derived class names -for class_ in global_ns.classes(): - print class_.name - print '\tbases: ', `[base.related_class.name for base in class_.bases]` - print '\tderived: ', `[derive.related_class.name for derive in class_.derived]` Deleted: pygccxml_dev/docs/example.py.rest =================================================================== --- pygccxml_dev/docs/example.py.rest 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/example.py.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -1,3 +0,0 @@ -.. code-block:: - :language: Python - :source-file: ./example.py Modified: pygccxml_dev/docs/history/history.rest =================================================================== --- pygccxml_dev/docs/history/history.rest 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/history/history.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -21,6 +21,7 @@ * Martin Preisler * Miguel Lobo * Jeremy Sanders +* Ben Schleimer ----------- SVN Version @@ -36,6 +37,9 @@ 3. A bug in parsing a function exception specification was fixed. Many thanks to Jeremy Sanders. + +4. Support for a type/class "align", "offset" and "size" was added. Many thanks to + Ben Schleimer for the implementation. ------------- Version 0.9.0 Modified: pygccxml_dev/docs/query_interface.rest =================================================================== --- pygccxml_dev/docs/query_interface.rest 2007-12-04 20:52:37 UTC (rev 1193) +++ pygccxml_dev/docs/query_interface.rest 2007-12-04 21:56:13 UTC (rev 1194) @@ -67,6 +67,7 @@ header_file=None, recursive=None ) + mem_fun = member_function #just an alias def member_functions( self, name=None, @@ -77,7 +78,9 @@ header_file=None, recursive=None, allow_empty=None ) + mem_funs = member_functions + As you can see, from the method arguments you can search for member function by: @@ -201,9 +204,9 @@ ... }; -`Call policies`_ of the member function ``clone`` is ``return_value_policy<manage_new_object>()``. -Next code applies `call policies`_ on all ``clone`` member functions within the -project. +``clone`` member function `call policies`_ is ``return_value_policy<manage_new_object>()``. +Next code applies the `call policies`_ on all ``clone`` member functions within the +project: .. code-block:: Python This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2007-12-24 22:02:32
|
Revision: 1210 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1210&view=rev Author: roman_yakovenko Date: 2007-12-24 14:02:36 -0800 (Mon, 24 Dec 2007) Log Message: ----------- updating documentation Modified Paths: -------------- pygccxml_dev/docs/upgrade_issues.rest pygccxml_dev/docs/www_configuration.py Modified: pygccxml_dev/docs/upgrade_issues.rest =================================================================== --- pygccxml_dev/docs/upgrade_issues.rest 2007-12-24 19:17:09 UTC (rev 1209) +++ pygccxml_dev/docs/upgrade_issues.rest 2007-12-24 22:02:36 UTC (rev 1210) @@ -8,9 +8,9 @@ Introduction ------------ -Recently, GCC-XML internal parser was updated to GCC 4.2. The internal representation -of source code, provided by GCC's parser, has changed a lot and few backward -compatibility issues were introduced. In this document, I will try to cover all +Recently, GCC-XML internal parser was updated to GCC 4.2. The internal representation +of source code, provided by GCC's parser, has changed a lot and few backward +compatibility issues were introduced. In this document, I will try to cover all problems you may encounter. @@ -18,10 +18,10 @@ Default constructor ------------------- -GCC-XML 0.9 doesn't report compiler generated default and copy constructors as +GCC-XML 0.9 doesn't report compiler generated default and copy constructors as an implicit ones. -If you rely havily on their existence in the generated XML, I suggest you to swith +If you rely heavily on their existence in the generated XML, I suggest you to switch to `type_traits.has_trivial_constructor`_/`type_traits.has_trivial_copy`_ functions. .. _`type_traits.has_trivial_constructor` : ./apidocs/pygccxml.declarations.type_traits-pysrc.html#has_trivial_constructor @@ -47,7 +47,7 @@ typedef int (xyz_t::*mfun_ptr_t)( double ); typedef int (xyz_t::*mvar_ptr_t); - + GCC-XML 0.7: .. code-block:: XML @@ -57,7 +57,7 @@ <MethodType id="_128" basetype="_7" returns="_136"> <Argument type="_140"/> </MethodType> - + <Typedef id="_4" name="mvar_ptr_t" type="_3" /> <PointerType id="_3" type="_127" size="32" align="32"/> <OffsetType id="_127" basetype="_7" type="_136" size="32" align="32"/> @@ -71,11 +71,11 @@ <MethodType id="_147" basetype="_92" returns="_131"> <Argument type="_127"/> </MethodType> - + <Typedef id="_52" name="mvar_ptr_t" type="_139" /> <OffsetType id="_139" basetype="_92" type="_131" size="32" align="32"/> -`pygccxml`_ handles this problem automatically, you don't have to change your code. +`pygccxml`_ handles this issue automatically, you don't have to change your code. ----------------------- Constant variable value @@ -87,8 +87,8 @@ .. code-block:: C++ - const long unsigned int initialized = 10122004; - + const long unsigned int initialized = 10122004; + GCC-XML 0.9 will report the ``initialized`` value as ``10122004ul``, while GCC-XML 0.7 as ``10122004``. @@ -101,11 +101,11 @@ Both versions of GCC-XML have a few issues, related to default arguments. GCC-XML 0.9 fixes some issues, but introduces another ones. Take a look on next examples: -* +* .. code-block:: C++ void fix_numeric( ull arg=(ull)-1 ); - + GCC-XML 0.7 .. code-block:: XML @@ -119,11 +119,11 @@ <Argument name="arg" type="_103" default="0xffffffffffffffffu"/> -* +* .. code-block:: C++ void fix_function_call( int i=calc( 1,2,3) ); - + GCC-XML 0.7 .. code-block:: XML @@ -137,11 +137,11 @@ <Argument name="i" type="_34" default="function_call::calc(1, 2, 3)"/> -* +* .. code-block:: C++ void typedef__func( const typedef_::alias& position = typedef_::alias() ); - + GCC-XML 0.7 .. code-block:: XML @@ -155,11 +155,11 @@ <Argument name="position" type="_1703" default="typedef_::original_name()"/> -* +* .. code-block:: C++ void typedef__func2( const typedef_::alias& position = alias() ); - + GCC-XML 0.7 .. code-block:: XML @@ -173,12 +173,12 @@ <Argument name="position" type="_1703" default="typedef_::original_name()"/> - -* + +* .. code-block:: C++ node* clone_tree( const std::vector<std::string> &types=std::vector<std::string>() ); - + GCC-XML 0.7 .. code-block:: XML @@ -192,33 +192,59 @@ <Argument name="types" type="_3096" default="std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >(((const std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&)((const std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >*)(& std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >()))))"/> +Basically `pygccxml`_ can't help you here. The good news is that you always can +change the default value expression from the script: +.. code-block:: Python + + #f is "calldef_t" instance + for arg in f.arguments: + arg.default_value = <new default value or None> + + ------------- Name mangling ------------- -GCC-XML 0.9 manlges names different than the previous one. +GCC-XML 0.9 mangles names different than the previous one. This change is the most +dramatic one, because it may require from you to change the code. +Consider next C++ code: +.. code-block:: C++ + template< unsigned long i1> + struct item_t{ + static const unsigned long v1 = i1; + }; + struct buggy{ + typedef unsigned long ulong; + typedef item_t< ulong( 0xDEECE66DUL ) | (ulong(0x5) << 32) > my_item_t; + my_item_t my_item_var; + }; +==================== ====================== ======================= + generated data GCC-XML 0.7 GCC-XML 0.9 +==================== ====================== ======================= +class name item_t<0x0deece66d> item_t<-554899859ul> +class mangled name 6item_tILm3740067437EE 6item_tILm3740067437EE +class demangled name item_t<3740067437l> item_t<3740067437ul> +==================== ====================== ======================= +`pygccxml`_ uses class demangled name as a "name" of the class. This was done to +overcome few bugs GCC-XML has, when it works on libraries with extreme usage of +templates. +As you can see the name of the class is different. `pygccxml`_ is unable to help +you in such situations. I suggest you to use query API strict mode. This is the +default one. If the class/declaration with the given name could not be found, it +will raise an error with clear description of the problem. +You can also to print the declarations tree to ``stdout`` and find out the name +of the class/declaration from it. - - - - - - - - - - - .. _`pygccxml`: ./pygccxml.html .. _`Python`: http://www.python.org .. _`GCC-XML`: http://www.gccxml.org Modified: pygccxml_dev/docs/www_configuration.py =================================================================== --- pygccxml_dev/docs/www_configuration.py 2007-12-24 19:17:09 UTC (rev 1209) +++ pygccxml_dev/docs/www_configuration.py 2007-12-24 22:02:36 UTC (rev 1210) @@ -1,3 +1,4 @@ name = 'pygccxml' files_to_skip = ['definition.rest'] -names = { 'query_interface' : 'query interface' } +names = { 'query_interface' : 'query interface' + , 'upgrade_issues' : 'gccxml 0.7 => 0.9 upgrade issues' } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2008-07-01 12:38:44
|
Revision: 1363 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1363&view=rev Author: roman_yakovenko Date: 2008-07-01 05:38:49 -0700 (Tue, 01 Jul 2008) Log Message: ----------- adding msvc backend documentation Added Paths: ----------- pygccxml_dev/docs/msvc/ pygccxml_dev/docs/msvc/msvc.rest Added: pygccxml_dev/docs/msvc/msvc.rest =================================================================== --- pygccxml_dev/docs/msvc/msvc.rest (rev 0) +++ pygccxml_dev/docs/msvc/msvc.rest 2008-07-01 12:38:49 UTC (rev 1363) @@ -0,0 +1,88 @@ +========================= +MS Visual Studio backends +========================= + +.. contents:: Table of contents + +---------------------------------------- +Why we need other than GCC-XML backends? +---------------------------------------- + +It is not a secret, that Windows is not a native environment for GCC. There are +cases, that it cant compile the code, "produced" for other compilers. On Windows, +if you want to use `GCC-XML`_, you should treat it as another compiler and adopt +your source code. Sometimes, changing the source code is not an option and different +solution is needed. + +Recently, I started to work on another back-end for `pygccxml`_, based on free tools, +available and freely redistributable with MS Visual Studio: + +* PDB - program database. A .pdb files hold debugging information about your + program. In other words, it contains information about every type and function + you use. +* BSC - browse source code. A .bsc file is a comprehensive database that contains + information about a program's symbols, including symbol references, + function calltrees, and definition tables. + +Both .pdb and .bsc files contain valuable information about your source code. +I guess, you will be surprised how much information it is possible to extract +from them. + +---------------------------- +How it works? +---------------------------- + +Microsoft provides API for extracting information from the files: + +* `DIA SDK`_ - Debug Interface Access Software Development Kit is able to read and + provide more-or-less convenient access to the information stored in .pdb files. + DIA SDK exposes it functionality via "COM" technology. `pygccxml`_ uses "comtypes" + project to work with the API. + +* `BSC Toolkit`_ comes with C API. `pygccxml`_ uses "ctypes" module, from the Python + standard library. + +Both toolkits comes with their own terminolgy. Unless you want to help me, to +develop this backend, you can fully ignore this fact. `pygccxml`_ bridges the +domains and provide clear and consistent API. + +Both files, .pdb and .bsc, contain valuable information, but some pieces are +presented in one file and not in other one. In near future `pygccxml`_ will be able +to combine the information, extracted from the files. Hint: you can send me the +patch :-). + +------------------ +The backend status +------------------ + +The short version +----------------- + +I feel like this backend has "beta" state. + +The long version +---------------- + +`pygccxml`_ pdb backend is able to extract almost all declarations from the .pdb +file. There are few exceptions and problems, that should be solved, before I will +consider this backend as "production" ready: + +* add support for bit fields - should not be a problem +* function exception specification - this information is missing in the file +* a declaration location within source code - from the DIA API I understand the + information is there and should be available, but for some reason I can access + it. +* there is some problem with extracting the exact integral type, used in the + source code - for example I have a problem to decide whether "long long int" + or "long int" is used within the code. I believe, it should be possible to + partially solve this problem. +* unit test - `pygccxml`_ comes with impressive amount of unit tests. Today only + small amount of them supports pdb backend. This should be fixed. +* performance - the backend is very slow right now, but this is "by design" and + I believe it is possible to improve it. + + +.. _`DIA SDK`: http://msdn.microsoft.com/en-us/library/x93ctkx8.aspx +.. _`BSC Toolkit`: http://www.microsoft.com/downloads/details.aspx?FamilyId=621AE185-1C2A-4D6B-8146-183D66FE709D&displaylang=en +.. _`pygccxml`: ./../pygccxml.html +.. _`GCC-XML`: http://www.gccxml.org This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |