- merge v0.01 --> Añadido fileselector - Añadidas fuentes de Gem y Pure Data - pix2jpg incluído en Gem. Archivos de construcción de Gem modificados. - Añadido fichero ompiling.txt con instrucciones de compilación
145 lines
3.8 KiB
Text
145 lines
3.8 KiB
Text
Coding Guidelines for Gem
|
|
=========================
|
|
2011, IOhannes m zmölnig
|
|
|
|
in no special order...
|
|
|
|
directory structure
|
|
-------------------
|
|
src/Gem
|
|
Gem core architecture classes
|
|
src/Utils
|
|
Utilitiy code that can be re-used in several different contexts
|
|
src/RTE
|
|
Pd-specific code (RTE=Real Time Environment)
|
|
(in the far future i would like to have all Pd-specific code wrapped in
|
|
here)
|
|
src/plugins
|
|
plugin infrastructure and (pure virtual) baseclasses for the various
|
|
plugins
|
|
src/Base
|
|
Base classes for objectclasses
|
|
src/deprecated
|
|
deprecated headers for backward compatibility
|
|
|
|
src/Controls/
|
|
objectclasses: CONTROL
|
|
src/Manips/
|
|
objectclasses: MANIPulatorS
|
|
src/Geos/
|
|
objectclasses: GEometric ObjectS
|
|
src/Nongeos/
|
|
objectclasses: positionable Objects that are not Geos
|
|
src/openGL/
|
|
objectclasses: OPENGL wrapper objects
|
|
src/Particles/
|
|
objectclasses: PARTICLE engine
|
|
src/Pixes/
|
|
objectclasses: PIXEl proceSsing
|
|
|
|
src/Output/
|
|
objectclasses: window handling
|
|
|
|
plugins/*/
|
|
plugin implementations for various backends
|
|
|
|
extra/*/
|
|
additional objectclasses
|
|
|
|
directories containing objectclasses, should not hold auxiliary files!
|
|
these should go into src/Utils/ (if they are of general interest) or the code
|
|
should be embedded into the objectclass code.
|
|
a noteable exception is the extra/*/ folder
|
|
|
|
|
|
file structure
|
|
--------------
|
|
C++ files are suffixed ".cpp".
|
|
they are accompanied by a header file ".h" containing the public interface.
|
|
there is a file for each objectclass named like the objectclass. e.g.
|
|
> src/Manips/ortho.cpp
|
|
contains the code for the [ortho] objectclass.
|
|
|
|
|
|
private/protected/public
|
|
------------------------
|
|
ctor/dtor should be public
|
|
methods should be protected/public
|
|
members should be protected
|
|
|
|
private members should be hidden using a PIMPL idiom
|
|
|
|
|
|
callbacks
|
|
---------
|
|
message callbacks from the RTE should be implemented using the CPPEXTERN_MSG*
|
|
macros defined in src/RTE/MessageCallbacks.h
|
|
this removes the need for static callbacks in the header-files
|
|
|
|
|
|
C-style vs C++-style
|
|
--------------------
|
|
while Pd is written in C, Gem is written in C++;
|
|
please try to use C++ idioms whenever possible.
|
|
|
|
use STL instead of inventing your own data containers!
|
|
esp. use "std::string" instead of "char*" whenever possible
|
|
|
|
the Gem code base is full of C-idioms and types; this is mainly because i
|
|
started as a C-programmer and only gradually learned using C++; don't repeat my
|
|
follies :-)
|
|
|
|
|
|
variable naming
|
|
---------------
|
|
member variables are usually prefixed with "m_"
|
|
static variables are usually prefixed with "s_"
|
|
|
|
|
|
initialization
|
|
--------------
|
|
initialize all member variables in the constructor(s).
|
|
use "member initialization lists" when possible.
|
|
e.g. use
|
|
> foo::foo(void) : m_x(0), m_y(0) {}
|
|
rather than
|
|
> foo::foo(void) { m_x=0; m_y=0; }
|
|
|
|
|
|
import/export
|
|
-------------
|
|
all functions/classes that should be visible from outside must be exported using
|
|
the GEM_EXTERN macro.
|
|
all objectclasses are exported.
|
|
all utility classes are exported.
|
|
|
|
|
|
dependencies
|
|
------------
|
|
the dependencies of Gem should be kept at a minimum (ideally only openGL)
|
|
objectclasses that use special libraries should go into extra/
|
|
if you want to add functionality to Gem that is (or can be) implemented by a
|
|
number of different backends (libraries), this should be done via an abstract
|
|
interface and plugins, thus moving the binary dependency outside of Gem.
|
|
|
|
|
|
Indentation
|
|
-----------
|
|
TODO
|
|
|
|
|
|
git commits
|
|
-----------
|
|
try to avoid committing pd-patches and C++ code within the same
|
|
commit. conflicts in C++-code can usually easily be resolved, whereas
|
|
conflicts in Pd-patches are usually impossible to resolve (but for the
|
|
most trivial cases)
|
|
|
|
|
|
git branching
|
|
-------------
|
|
try to avoid forking from branches other than master.
|
|
esp. avoid branches on top of branches.
|
|
before committing a pull rqeuest, make sure that your branch applies clean to
|
|
current master.
|
|
|