From GridLAB-D Wiki
Code templates - Code templates for module developers
The code templates may be downloaded to create a new module or class. In each template you will find a number of instances of <<<KEYWORD>>>, indicating that a substitution is required to properly implement your module or class. In addition, you may find a number of TODO comments indicating where you may have to write additional code to properly implemented the desired functionality.
The following keywords are used:
- <<<MODULE>>>
- The name of the module
- <<<YEAR>>>
- The year (or year range) of the copyright
- <<<COMPANY>>>
- The name of copyright holder, i.e., the author or company to which the copyright is assigned
- <<<CLASS>>>
- The class you are implementing
- <<<GUID>>>
- A global unique identifier (see GUID for details)
Required code
module/main.cpp
// $Id$ // Copyright (c) <<<YEAR>>> <<<COMPANY>>> // Template valid as of Hassayampa (Version 3.0) #define DLMAIN // required to enable module main code in gridlabd.h #include "gridlabd.h" #include "<<<CLASS>>>.h" // TODO add class includes here // TODO define module globals here EXPORT CLASS *init(CALLBACKS *fntable, MODULE *module, int argc, char *argv[]) { if (set_callback(fntable)==NULL) { errno = EINVAL; return NULL; } // TODO publish module globals here new <<<CLASS>>>(module); // TODO add other classes here // always return the first class registered return <<<CLASS>>>::oclass; } EXPORT int do_kill(void*) { // TODO module cleanup if any return 0; } // TODO add optional functions
module/class.h
// $Id$ // Copyright (c) <<<YEAR>>> <<<COMPANY>>> // Template valid as of Hassayampa (Version 3.0) #ifndef _<<<CLASS>>>_H #define _<<<CLASS>>>_H #include "gridlabd.h" class <<<CLASS>>> : public gld_object { public: // published variables // TODO add public typedefs // TODO declare published variables using GL_* macros private: // unpublished variables // TODO add private typedefs // TODO add unpublished variables public: // required functions <<<CLASS>>>(MODULE *module); int create(void); int init(OBJECT *parent); // TODO add optional class functions public: // optional/user-defined functions // TODO add published class functions private: // internal functions // TODO add desired internal functions public: // required members static CLASS *oclass; static <<<CLASS>>> *defaults; }; #endif // _<<<CLASS>>>_H
module/class.cpp
// $Id$ // Copyright (c) <<<YEAR>>> <<<COMPANY>>> // Template valid as of Hassayampa (Version 3.0) #include "<<<CLASS>>>.h" EXPORT_CREATE(<<<CLASS>>>); EXPORT_INIT(<<<CLASS>>>); // TODO add optional functions declarations CLASS <<<CLASS>>>::oclass = NULL; <<<CLASS>>> *<<<CLASS>>>::defaults = NULL; // TODO add declaration of class globals <<<CLASS>>>::<<<CLASS>>>(MODULE *module) { if ( oclass!=NULL ) exception("cannot register class more than once"); oclass = gld_class::create(module,"<<<CLASS>>>",sizeof(<<<CLASS>>>),<<<OPTIONS>>>); if ( oclass==NULL ) exception("class registration failed"); oclass->trl = <<<TRL>>>; if ( gl_publish_variable(oclass, <<<VARIABLESPECS>>>, NULL)<1 ) exception("unable to publish properties"); memset(defaults=this,0,sizeof(*this)); // TODO set defaults } <<<CLASS>>>::create(void) { memcpy(this,defaults,sizeof(*this)); // TODO set defaults return SUCCESS; // return FAILED on create error } <<<CLASS>>>::init(OBJECT *parent) { // TODO initialize object return SUCCESS; // return FAILED on create error } // TODO add implementations of optional class functions
module/Makefile.am
pkglib_LTLIBRARIES = <<<MODULE>>>.la
<<<MODULE>>>_la_SOURCES = main.cpp \
<<<CLASS>>>.cpp <<<CLASS>>>.h \
# TODO add new classes before this line
<<<MODULE>>>_la_LDFLAGS = -module -no-undefined -avoid-version -version-info 1:0:0
uninstall-hook:
-rmdir $(DESTDIR)$(pkglibdir)
module/module.vcproj
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="<<<MODULE>>>"
ProjectGUID="{<<<GUID>>>}"
RootNamespace="gridlabd"
Keyword="Win32Proj"
>
<Platforms>
<Platform Name="Win32" />
<Platform Name="x64" />
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="..\VS2005\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
CharacterSet="2"
DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;$(TargetPath)"
>
<Tool Name="VCPreBuildEventTool" />
<Tool Name="VCCustomBuildTool" />
<Tool Name="VCXMLDataGeneratorTool" />
<Tool Name="VCWebServiceProxyGeneratorTool" />
<Tool Name="VCMIDLTool" />
<Tool Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\core;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_TESTING"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
DisableSpecificWarnings="4996"
/>
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLinkerTool"
LinkIncremental="2"
AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="1"
/>
<Tool Name="VCALinkTool" />
<Tool Name="VCManifestTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
<Tool Name="VCFxCopTool" />
<Tool Name="VCAppVerifierTool" />
<Tool Name="VCWebDeploymentTool" />
<Tool Name="VCPostBuildEventTool" />
</Configuration>
<Configuration
Name="Debug|x64"
OutputDirectory="..\VS2005\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
CharacterSet="2"
DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;$(TargetPath)"
>
<Tool Name="VCPreBuildEventTool" />
<Tool Name="VCCustomBuildTool" />
<Tool Name="VCXMLDataGeneratorTool" />
<Tool Name="VCWebServiceProxyGeneratorTool" />
<Tool Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\core;"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_TESTING"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
DisableSpecificWarnings="4996"
/>
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLinkerTool"
LinkIncremental="2"
AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)$(PlatformName)\$(ConfigurationName)""
GenerateDebugInformation="true"
SubSystem="2"
TargetMachine="17"
/>
<Tool Name="VCALinkTool" />
<Tool Name="VCManifestTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
<Tool Name="VCFxCopTool" />
<Tool Name="VCAppVerifierTool" />
<Tool Name="VCWebDeploymentTool" />
<Tool Name="VCPostBuildEventTool" />
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="..\VS2005\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
UseOfMFC="1"
CharacterSet="2"
DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;$(TargetPath)"
WholeProgramOptimization="1"
>
<Tool Name="VCPreBuildEventTool" />
<Tool Name="VCCustomBuildTool" />
<Tool Name="VCXMLDataGeneratorTool" />
<Tool Name="VCWebServiceProxyGeneratorTool" />
<Tool Name="VCMIDLTool" />
<Tool Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\core;"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_NO_CPPUNIT"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
DisableSpecificWarnings="4996"
/>
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLinkerTool"
LinkIncremental="1"
AdditionalLibraryDirectories="$(OutDir)"
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool Name="VCALinkTool" />
<Tool Name="VCManifestTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
<Tool Name="VCFxCopTool" />
<Tool Name="VCAppVerifierTool" />
<Tool Name="VCWebDeploymentTool" />
<Tool Name="VCPostBuildEventTool" />
</Configuration>
<Configuration
Name="Release|x64"
OutputDirectory="..\VS2005\$(PlatformName)\$(ConfigurationName)"
IntermediateDirectory="$(PlatformName)\$(ConfigurationName)\$(ProjectName)"
ConfigurationType="2"
UseOfMFC="1"
CharacterSet="2"
DeleteExtensionsOnClean="*.obj;*.ilk;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;$(TargetPath)"
WholeProgramOptimization="1"
>
<Tool Name="VCPreBuildEventTool" />
<Tool Name="VCCustomBuildTool" />
<Tool Name="VCXMLDataGeneratorTool" />
<Tool Name="VCWebServiceProxyGeneratorTool" />
<Tool Name="VCMIDLTool"
TargetEnvironment="3"
/>
<Tool Name="VCCLCompilerTool"
AdditionalIncludeDirectories="..\core;"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_NO_CPPUNIT"
RuntimeLibrary="0"
UsePrecompiledHeader="0"
WarningLevel="3"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="3"
DisableSpecificWarnings="4996"
/>
<Tool Name="VCManagedResourceCompilerTool" />
<Tool Name="VCResourceCompilerTool" />
<Tool Name="VCPreLinkEventTool" />
<Tool Name="VCLinkerTool"
LinkIncremental="1"
AdditionalLibraryDirectories=""$(OutDir)";"$(SolutionDir)$(PlatformName)\$(ConfigurationName)""
GenerateDebugInformation="true"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="17"
/>
<Tool Name="VCALinkTool" />
<Tool Name="VCManifestTool" />
<Tool Name="VCXDCMakeTool" />
<Tool Name="VCBscMakeTool" />
<Tool Name="VCFxCopTool" />
<Tool Name="VCAppVerifierTool" />
<Tool Name="VCWebDeploymentTool" />
<Tool Name="VCPostBuildEventTool" />
</Configuration>
</Configurations>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{<<<GUID>>>}"
>
<File RelativePath=".\<<<CLASS>>>.cpp" >
</File>
<File RelativePath=".\main.cpp" >
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{<<<GUID>>>}"
>
<File RelativePath=".\<<<CLASS>>>.h" >
</File>
</Filter>
<Filter
Name="Test files"
>
<File RelativePath=".\autotest\test_<<<CLASS>>>.glm" >
</File>
</Filter>
<File
RelativePath=".\Makefile.am"
>
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>
Optional code
TODO:
See also
- Guide to Programming GridLAB-D
- Introduction
- Creating a module
- Creating a class
- Special Topics
- Source documentation
- Validation
- Debugging
- Code templates