diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3ed6866 --- /dev/null +++ b/.clang-format @@ -0,0 +1,104 @@ +Language: Cpp +# BasedOnStyle: Google +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: TopLevelDefinitions +AlwaysBreakBeforeMultilineStrings: true +AlwaysBreakTemplateDeclarations: true +BinPackArguments: false +BinPackParameters: false +BreakBeforeBraces : Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: true + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: None +BreakBeforeInheritanceComma: true +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeCategories: + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: false +IndentWidth: 2 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: false +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 1 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 200 +PointerAlignment: Left +ReflowComments: true +SortIncludes: true +SortUsingDeclarations: true +SpaceAfterCStyleCast: true +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 2 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 2 +UseTab: Never diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..2df8804 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,411 @@ +--- +Checks: 'clang-diagnostic-*,clang-analyzer-*,*' +WarningsAsErrors: '' +HeaderFilterRegex: '' +AnalyzeTemporaryDtors: false +User: brgirgis +CheckOptions: + - key: cert-dcl59-cpp.HeaderFileExtensions + value: h,hh,hpp,hxx + - key: cert-err09-cpp.CheckThrowTemporaries + value: '1' + - key: cert-err61-cpp.CheckThrowTemporaries + value: '1' + - key: cert-oop11-cpp.IncludeStyle + value: llvm + - key: cppcoreguidelines-pro-bounds-constant-array-index.GslHeader + value: '' + - key: cppcoreguidelines-pro-bounds-constant-array-index.IncludeStyle + value: '0' + - key: cppcoreguidelines-pro-type-member-init.IgnoreArrays + value: '0' + - key: google-build-namespaces.HeaderFileExtensions + value: h,hh,hpp,hxx + - key: google-global-names-in-headers.HeaderFileExtensions + value: h + - key: google-readability-braces-around-statements.ShortStatementLines + value: '1' + - key: google-readability-function-size.BranchThreshold + value: '100' + - key: google-readability-function-size.LineThreshold + value: '300' + - key: google-readability-function-size.StatementThreshold + value: '5' + - key: google-readability-namespace-comments.ShortNamespaceLines + value: '10' + - key: google-readability-namespace-comments.SpacesBeforeComments + value: '2' + - key: google-runtime-int.SignedTypePrefix + value: int + - key: google-runtime-int.TypeSuffix + value: '' + - key: google-runtime-int.UnsignedTypePrefix + value: uint + - key: google-runtime-references.WhiteListTypes + value: '' + - key: llvm-header-guard.HeaderFileExtensions + value: ',h,hh,hpp,hxx' + - key: llvm-namespace-comment.ShortNamespaceLines + value: '1' + - key: llvm-namespace-comment.SpacesBeforeComments + value: '2' + - key: misc-argument-comment.StrictMode + value: '0' + - key: misc-assert-side-effect.AssertMacros + value: assert + - key: misc-assert-side-effect.CheckFunctionCalls + value: '0' + - key: misc-dangling-handle.HandleClasses + value: 'std::basic_string_view;std::experimental::basic_string_view' + - key: misc-definitions-in-headers.HeaderFileExtensions + value: ',h,hh,hpp,hxx' + - key: misc-definitions-in-headers.UseHeaderFileExtension + value: '0' + - key: misc-misplaced-widening-cast.CheckImplicitCasts + value: '1' + - key: misc-move-constructor-init.IncludeStyle + value: llvm + - key: misc-sizeof-expression.WarnOnSizeOfCompareToConstant + value: '1' + - key: misc-sizeof-expression.WarnOnSizeOfConstant + value: '1' + - key: misc-sizeof-expression.WarnOnSizeOfThis + value: '1' + - key: misc-string-constructor.LargeLengthThreshold + value: '8388608' + - key: misc-string-constructor.WarnOnLargeLength + value: '1' + - key: misc-suspicious-enum-usage.StrictMode + value: '0' + - key: misc-suspicious-missing-comma.MaxConcatenatedTokens + value: '5' + - key: misc-suspicious-missing-comma.RatioThreshold + value: '0.200000' + - key: misc-suspicious-missing-comma.SizeThreshold + value: '5' + - key: misc-suspicious-string-compare.StringCompareLikeFunctions + value: '' + - key: misc-suspicious-string-compare.WarnOnImplicitComparison + value: '1' + - key: misc-suspicious-string-compare.WarnOnLogicalNotComparison + value: '0' + - key: misc-throw-by-value-catch-by-reference.CheckThrowTemporaries + value: '1' + - key: modernize-loop-convert.MaxCopySize + value: '16' + - key: modernize-loop-convert.MinConfidence + value: reasonable + - key: modernize-loop-convert.NamingStyle + value: CamelCase + - key: modernize-pass-by-value.IncludeStyle + value: llvm + - key: modernize-pass-by-value.ValuesOnly + value: '0' + - key: modernize-replace-auto-ptr.IncludeStyle + value: llvm + - key: modernize-use-auto.RemoveStars + value: '0' + - key: modernize-use-default-member-init.UseAssignment + value: '0' + - key: modernize-use-emplace.ContainersWithPushBack + value: '::std::vector;::std::list;::std::deque' + - key: modernize-use-emplace.SmartPointers + value: '::std::shared_ptr;::std::unique_ptr;::std::auto_ptr;::std::weak_ptr' + - key: modernize-use-nullptr.NullMacros + value: 'NULL' + - key: modernize-use-transparent-functors.SafeMode + value: '0' + - key: performance-faster-string-find.StringLikeClasses + value: 'std::basic_string' + - key: performance-for-range-copy.WarnOnAllAutoCopies + value: '0' + - key: performance-inefficient-string-concatenation.StrictMode + value: '0' + - key: performance-type-promotion-in-math-fn.IncludeStyle + value: llvm + - key: performance-unnecessary-value-param.IncludeStyle + value: llvm + - key: readability-braces-around-statements.ShortStatementLines + value: '0' + - key: readability-function-size.BranchThreshold + value: '100' + - key: readability-function-size.LineThreshold + value: '300' + - key: readability-function-size.StatementThreshold + value: '5' + - key: readability-identifier-naming.AbstractClassCase + value: CamelCase + - key: readability-identifier-naming.AbstractClassPrefix + value: 'I' + - key: readability-identifier-naming.AbstractClassSuffix + value: '' + - key: readability-identifier-naming.ClassCase + value: CamelCase + - key: readability-identifier-naming.ClassConstantCase + value: aNy_CasE + - key: readability-identifier-naming.ClassConstantPrefix + value: '' + - key: readability-identifier-naming.ClassConstantSuffix + value: '' + - key: readability-identifier-naming.ClassMemberCase + value: CamelCase + - key: readability-identifier-naming.ClassMemberPrefix + value: '' + - key: readability-identifier-naming.ClassMemberSuffix + value: '' + - key: readability-identifier-naming.ClassMethodCase + value: camelBack + - key: readability-identifier-naming.ClassMethodPrefix + value: '' + - key: readability-identifier-naming.ClassMethodSuffix + value: '' + - key: readability-identifier-naming.ClassPrefix + value: '' + - key: readability-identifier-naming.ClassSuffix + value: '' + - key: readability-identifier-naming.ConstantCase + value: aNy_CasE + - key: readability-identifier-naming.ConstantMemberCase + value: camelBack + - key: readability-identifier-naming.ConstantMemberPrefix + value: '' + - key: readability-identifier-naming.ConstantMemberSuffix + value: '' + - key: readability-identifier-naming.ConstantParameterCase + value: camelBack + - key: readability-identifier-naming.ConstantParameterPrefix + value: '' + - key: readability-identifier-naming.ConstantParameterSuffix + value: '' + - key: readability-identifier-naming.ConstantPrefix + value: '' + - key: readability-identifier-naming.ConstantSuffix + value: '' + - key: readability-identifier-naming.ConstexprFunctionCase + value: camelBack + - key: readability-identifier-naming.ConstexprFunctionPrefix + value: '' + - key: readability-identifier-naming.ConstexprFunctionSuffix + value: '' + - key: readability-identifier-naming.ConstexprMethodCase + value: camelBack + - key: readability-identifier-naming.ConstexprMethodPrefix + value: '' + - key: readability-identifier-naming.ConstexprMethodSuffix + value: '' + - key: readability-identifier-naming.ConstexprVariableCase + value: camelBack + - key: readability-identifier-naming.ConstexprVariablePrefix + value: '' + - key: readability-identifier-naming.ConstexprVariableSuffix + value: '' + - key: readability-identifier-naming.EnumCase + value: aNy_CasE + - key: readability-identifier-naming.EnumConstantCase + value: aNy_CasE + - key: readability-identifier-naming.EnumConstantPrefix + value: '' + - key: readability-identifier-naming.EnumConstantSuffix + value: '' + - key: readability-identifier-naming.EnumPrefix + value: '' + - key: readability-identifier-naming.EnumSuffix + value: '' + - key: readability-identifier-naming.FunctionCase + value: camelBack + - key: readability-identifier-naming.FunctionPrefix + value: '' + - key: readability-identifier-naming.FunctionSuffix + value: '' + - key: readability-identifier-naming.GlobalConstantCase + value: camelBack + - key: readability-identifier-naming.GlobalConstantPrefix + value: '' + - key: readability-identifier-naming.GlobalConstantSuffix + value: '' + - key: readability-identifier-naming.GlobalFunctionCase + value: camelBack + - key: readability-identifier-naming.GlobalFunctionPrefix + value: '' + - key: readability-identifier-naming.GlobalFunctionSuffix + value: '' + - key: readability-identifier-naming.GlobalVariableCase + value: lower_case + - key: readability-identifier-naming.GlobalVariablePrefix + value: '' + - key: readability-identifier-naming.GlobalVariableSuffix + value: '' + - key: readability-identifier-naming.IgnoreFailedSplit + value: '0' + - key: readability-identifier-naming.InlineNamespaceCase + value: lower_case + - key: readability-identifier-naming.InlineNamespacePrefix + value: '' + - key: readability-identifier-naming.InlineNamespaceSuffix + value: '' + - key: readability-identifier-naming.LocalConstantCase + value: camelBack + - key: readability-identifier-naming.LocalConstantPrefix + value: '' + - key: readability-identifier-naming.LocalConstantSuffix + value: '' + - key: readability-identifier-naming.LocalVariableCase + value: camelBack + - key: readability-identifier-naming.LocalVariablePrefix + value: '' + - key: readability-identifier-naming.LocalVariableSuffix + value: '' + - key: readability-identifier-naming.MacroDefinitionCase + value: UPPER_CASE + - key: readability-identifier-naming.MacroDefinitionPrefix + value: '' + - key: readability-identifier-naming.MacroDefinitionSuffix + value: '' + - key: readability-identifier-naming.MemberCase + value: camelBack + - key: readability-identifier-naming.MemberPrefix + value: '' + - key: readability-identifier-naming.MemberSuffix + value: '' + - key: readability-identifier-naming.MethodCase + value: camelBack + - key: readability-identifier-naming.MethodPrefix + value: '' + - key: readability-identifier-naming.MethodSuffix + value: '' + - key: readability-identifier-naming.NamespaceCase + value: lower_case + - key: readability-identifier-naming.NamespacePrefix + value: '' + - key: readability-identifier-naming.NamespaceSuffix + value: '' + - key: readability-identifier-naming.ParameterCase + value: camelBack + - key: readability-identifier-naming.ParameterPackCase + value: camelBack + - key: readability-identifier-naming.ParameterPackPrefix + value: '' + - key: readability-identifier-naming.ParameterPackSuffix + value: '' + - key: readability-identifier-naming.ParameterPrefix + value: '' + - key: readability-identifier-naming.ParameterSuffix + value: '' + - key: readability-identifier-naming.PrivateMemberCase + value: camelBack + - key: readability-identifier-naming.PrivateMemberPrefix + value: 'm_' + - key: readability-identifier-naming.PrivateMemberSuffix + value: '' + - key: readability-identifier-naming.PrivateMethodCase + value: camelBack + - key: readability-identifier-naming.PrivateMethodPrefix + value: '' + - key: readability-identifier-naming.PrivateMethodSuffix + value: '' + - key: readability-identifier-naming.ProtectedMemberCase + value: camelBack + - key: readability-identifier-naming.ProtectedMemberPrefix + value: '' + - key: readability-identifier-naming.ProtectedMemberSuffix + value: '' + - key: readability-identifier-naming.ProtectedMethodCase + value: camelBack + - key: readability-identifier-naming.ProtectedMethodPrefix + value: '' + - key: readability-identifier-naming.ProtectedMethodSuffix + value: '' + - key: readability-identifier-naming.PublicMemberCase + value: camelBack + - key: readability-identifier-naming.PublicMemberPrefix + value: '' + - key: readability-identifier-naming.PublicMemberSuffix + value: '' + - key: readability-identifier-naming.PublicMethodCase + value: camelBack + - key: readability-identifier-naming.PublicMethodPrefix + value: '' + - key: readability-identifier-naming.PublicMethodSuffix + value: '' + - key: readability-identifier-naming.StaticConstantCase + value: camelBack + - key: readability-identifier-naming.StaticConstantPrefix + value: '' + - key: readability-identifier-naming.StaticConstantSuffix + value: '' + - key: readability-identifier-naming.StaticVariableCase + value: camelBack + - key: readability-identifier-naming.StaticVariablePrefix + value: '' + - key: readability-identifier-naming.StaticVariableSuffix + value: '' + - key: readability-identifier-naming.StructCase + value: CamelCase + - key: readability-identifier-naming.StructPrefix + value: '' + - key: readability-identifier-naming.StructSuffix + value: '' + - key: readability-identifier-naming.TemplateParameterCase + value: CamelCase + - key: readability-identifier-naming.TemplateParameterPrefix + value: '' + - key: readability-identifier-naming.TemplateParameterSuffix + value: '' + - key: readability-identifier-naming.TemplateTemplateParameterCase + value: CamelCase + - key: readability-identifier-naming.TemplateTemplateParameterPrefix + value: '' + - key: readability-identifier-naming.TemplateTemplateParameterSuffix + value: '' + - key: readability-identifier-naming.TypeAliasCase + value: CamelCase + - key: readability-identifier-naming.TypeAliasPrefix + value: '' + - key: readability-identifier-naming.TypeAliasSuffix + value: '' + - key: readability-identifier-naming.TypeTemplateParameterCase + value: CamelCase + - key: readability-identifier-naming.TypeTemplateParameterPrefix + value: '' + - key: readability-identifier-naming.TypeTemplateParameterSuffix + value: '' + - key: readability-identifier-naming.TypedefCase + value: CamelCase + - key: readability-identifier-naming.TypedefPrefix + value: '' + - key: readability-identifier-naming.TypedefSuffix + value: '' + - key: readability-identifier-naming.UnionCase + value: aNy_CasE + - key: readability-identifier-naming.UnionPrefix + value: '' + - key: readability-identifier-naming.UnionSuffix + value: '' + - key: readability-identifier-naming.ValueTemplateParameterCase + value: CamelCase + - key: readability-identifier-naming.ValueTemplateParameterPrefix + value: '' + - key: readability-identifier-naming.ValueTemplateParameterSuffix + value: '' + - key: readability-identifier-naming.VariableCase + value: camelBack + - key: readability-identifier-naming.VariablePrefix + value: '' + - key: readability-identifier-naming.VariableSuffix + value: '' + - key: readability-identifier-naming.VirtualMethodCase + value: camelBack + - key: readability-identifier-naming.VirtualMethodPrefix + value: '' + - key: readability-identifier-naming.VirtualMethodSuffix + value: '' + - key: readability-implicit-bool-cast.AllowConditionalIntegerCasts + value: '0' + - key: readability-implicit-bool-cast.AllowConditionalPointerCasts + value: '0' + - key: readability-simplify-boolean-expr.ChainedConditionalAssignment + value: '0' + - key: readability-simplify-boolean-expr.ChainedConditionalReturn + value: '0' +... + diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..7c2fecd --- /dev/null +++ b/.cproject @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore index 259148f..113acee 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,12 @@ *.exe *.out *.app + +build/ +install/ +.test/ + +*.dblite +*.pdb +*.out + diff --git a/.project b/.project new file mode 100644 index 0000000..5ed610a --- /dev/null +++ b/.project @@ -0,0 +1,33 @@ + + + CPP-Patterns + + + + + + org.python.pydev.PyDevBuilder + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + org.python.pydev.pythonNature + + diff --git a/.pydevproject b/.pydevproject new file mode 100644 index 0000000..31b2c77 --- /dev/null +++ b/.pydevproject @@ -0,0 +1,8 @@ + + +Default +python 3.6 + +/${PROJECT_DIR_NAME}/src/site_scons + + diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml new file mode 100644 index 0000000..879de53 --- /dev/null +++ b/.settings/language.settings.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.cdt.codan.core.prefs b/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 0000000..9eb9a80 --- /dev/null +++ b/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,201 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.wangzw.plugin.cppstyle.cpplint.build.c++11=Error +org.wangzw.plugin.cppstyle.cpplint.build.c++11.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.categorized=Error +org.wangzw.plugin.cppstyle.cpplint.build.categorized.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.deprecated=Error +org.wangzw.plugin.cppstyle.cpplint.build.deprecated.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.endif_comment=Error +org.wangzw.plugin.cppstyle.cpplint.build.endif_comment.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.explicit_make_pair=Error +org.wangzw.plugin.cppstyle.cpplint.build.explicit_make_pair.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.forward_decl=Error +org.wangzw.plugin.cppstyle.cpplint.build.forward_decl.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.header_guard=Error +org.wangzw.plugin.cppstyle.cpplint.build.header_guard.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.include=Error +org.wangzw.plugin.cppstyle.cpplint.build.include.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.include_alpha=Error +org.wangzw.plugin.cppstyle.cpplint.build.include_alpha.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.include_order=Error +org.wangzw.plugin.cppstyle.cpplint.build.include_order.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.include_what_you_use=Error +org.wangzw.plugin.cppstyle.cpplint.build.include_what_you_use.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.namespaces=Error +org.wangzw.plugin.cppstyle.cpplint.build.namespaces.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.printf_format=Error +org.wangzw.plugin.cppstyle.cpplint.build.printf_format.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.build.storage_class=Error +org.wangzw.plugin.cppstyle.cpplint.build.storage_class.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.legal.copyright=Error +org.wangzw.plugin.cppstyle.cpplint.legal.copyright.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.alt_tokens=Error +org.wangzw.plugin.cppstyle.cpplint.readability.alt_tokens.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.braces=Error +org.wangzw.plugin.cppstyle.cpplint.readability.braces.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.casting=Error +org.wangzw.plugin.cppstyle.cpplint.readability.casting.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.check=Error +org.wangzw.plugin.cppstyle.cpplint.readability.check.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.constructors=Error +org.wangzw.plugin.cppstyle.cpplint.readability.constructors.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.fn_size=Error +org.wangzw.plugin.cppstyle.cpplint.readability.fn_size.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.function=Error +org.wangzw.plugin.cppstyle.cpplint.readability.function.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.inheritance=Error +org.wangzw.plugin.cppstyle.cpplint.readability.inheritance.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.multiline_comment=Error +org.wangzw.plugin.cppstyle.cpplint.readability.multiline_comment.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.multiline_string=Error +org.wangzw.plugin.cppstyle.cpplint.readability.multiline_string.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.namespace=Error +org.wangzw.plugin.cppstyle.cpplint.readability.namespace.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.nolint=Error +org.wangzw.plugin.cppstyle.cpplint.readability.nolint.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.nul=Error +org.wangzw.plugin.cppstyle.cpplint.readability.nul.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.strings=Error +org.wangzw.plugin.cppstyle.cpplint.readability.strings.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.todo=Error +org.wangzw.plugin.cppstyle.cpplint.readability.todo.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.readability.utf8=Error +org.wangzw.plugin.cppstyle.cpplint.readability.utf8.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.arrays=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.arrays.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.casting=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.casting.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.explicit=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.explicit.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.indentation_namespace=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.indentation_namespace.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.init=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.init.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.int=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.int.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.invalid_increment=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.invalid_increment.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.member_string_references=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.member_string_references.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.memset=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.memset.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.operator=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.operator.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.printf=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.printf.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.printf_format=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.printf_format.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.references=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.references.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.string=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.string.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.threadsafe_fn=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.threadsafe_fn.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.runtime.vlog=Error +org.wangzw.plugin.cppstyle.cpplint.runtime.vlog.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.blank_line=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.blank_line.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.braces=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.braces.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.comma=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.comma.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.comments=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.comments.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.empty_conditional_body=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.empty_conditional_body.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.empty_loop_body=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.empty_loop_body.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.end_of_line=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.end_of_line.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.ending_newline=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.ending_newline.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.forcolon=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.forcolon.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.indent=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.indent.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.line_length=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.line_length.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.newline=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.newline.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.operators=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.operators.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.parens=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.parens.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.semicolon=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.semicolon.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.tab=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.tab.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} +org.wangzw.plugin.cppstyle.cpplint.whitespace.todo=Error +org.wangzw.plugin.cppstyle.cpplint.whitespace.todo.params={fileScope\=>inclusion\=>("*.cc","*.h","*.cpp","*.cu","*.cuh","*.hpp"),exclusion\=>(),launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>true,RUN_AS_YOU_TYPE\=>false,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/.settings/org.eclipse.cdt.core.prefs b/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 0000000..0d27426 --- /dev/null +++ b/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,165 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.core.code_formatter=org.eclipse.cdt.core.defaultCodeFormatter +org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=83 +org.eclipse.cdt.core.formatter.alignment_for_assignment=16 +org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80 +org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.cdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34 +org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=83 +org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16 +org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=83 +org.eclipse.cdt.core.formatter.alignment_for_expression_list=0 +org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=18 +org.eclipse.cdt.core.formatter.alignment_for_member_access=0 +org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=18 +org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=83 +org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=83 +org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.cdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line +org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=end_of_line +org.eclipse.cdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false +org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1 +org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true +org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true +org.eclipse.cdt.core.formatter.compact_else_if=true +org.eclipse.cdt.core.formatter.continuation_indentation=2 +org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2 +org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false +org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0 +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true +org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false +org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false +org.eclipse.cdt.core.formatter.indent_empty_lines=false +org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=false +org.eclipse.cdt.core.formatter.indentation.size=2 +org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=insert +org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert +org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.cdt.core.formatter.join_wrapped_lines=true +org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false +org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false +org.eclipse.cdt.core.formatter.lineSplit=80 +org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.cdt.core.formatter.tabulation.char=space +org.eclipse.cdt.core.formatter.tabulation.size=2 +org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false diff --git a/.settings/org.eclipse.cdt.ui.prefs b/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 0000000..647df3c --- /dev/null +++ b/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +formatter_profile=_K&R [built-in] modified +formatter_settings_version=1 diff --git a/src/.style.yapf b/src/.style.yapf new file mode 100644 index 0000000..39d7823 --- /dev/null +++ b/src/.style.yapf @@ -0,0 +1,217 @@ +[style] +# Align closing bracket with visual indentation. +align_closing_bracket_with_visual_indent=False + +# Allow dictionary keys to exist on multiple lines. For example: +# +# x = { +# ('this is the first element of a tuple', +# 'this is the second element of a tuple'): +# value, +# } +allow_multiline_dictionary_keys=False + +# Allow lambdas to be formatted on more than one line. +allow_multiline_lambdas=False + +# Allow splits before the dictionary value. +allow_split_before_dict_value=True + +# Insert a blank line before a class-level docstring. +blank_line_before_class_docstring=False + +# Insert a blank line before a 'def' or 'class' immediately nested +# within another 'def' or 'class'. For example: +# +# class Foo: +# # <------ this blank line +# def method(): +# ... +blank_line_before_nested_class_or_def=True + +# Do not split consecutive brackets. Only relevant when +# dedent_closing_brackets is set. For example: +# +# call_func_that_takes_a_dict( +# { +# 'key1': 'value1', +# 'key2': 'value2', +# } +# ) +# +# would reformat to: +# +# call_func_that_takes_a_dict({ +# 'key1': 'value1', +# 'key2': 'value2', +# }) +coalesce_brackets=False + +# The column limit. +column_limit=80 + +# Indent width used for line continuations. +continuation_indent_width=4 + +# Put closing brackets on a separate line, dedented, if the bracketed +# expression can't fit in a single line. Applies to all kinds of brackets, +# including function definitions and calls. For example: +# +# config = { +# 'key1': 'value1', +# 'key2': 'value2', +# } # <--- this bracket is dedented and on a separate line +# +# time_series = self.remote_client.query_entity_counters( +# entity='dev3246.region1', +# key='dns.query_latency_tcp', +# transform=Transformation.AVERAGE(window=timedelta(seconds=60)), +# start_ts=now()-timedelta(days=3), +# end_ts=now(), +# ) # <--- this bracket is dedented and on a separate line +dedent_closing_brackets=True + +# Place each dictionary entry onto its own line. +each_dict_entry_on_separate_line=True + +# The regex for an i18n comment. The presence of this comment stops +# reformatting of that line, because the comments are required to be +# next to the string they translate. +i18n_comment=#\..* + +# The i18n function call names. The presence of this function stops +# reformattting on that line, because the string it has cannot be moved +# away from the i18n comment. +i18n_function_call=['N_', '_'] + +# Indent the dictionary value if it cannot fit on the same line as the +# dictionary key. For example: +# +# config = { +# 'key1': +# 'value1', +# 'key2': value1 + +# value2, +# } +indent_dictionary_value=False + +# The number of columns to use for indentation. +indent_width=4 + +# Join short lines into one line. E.g., single line 'if' statements. +join_multiple_lines=True + +# Do not include spaces around selected binary operators. For example: +# +# 1 + 2 * 3 - 4 / 5 +# +# will be formatted as follows when configured with a value "*,/": +# +# 1 + 2*3 - 4/5 +# +no_spaces_around_selected_binary_operators=set() + +# Use spaces around default or named assigns. +spaces_around_default_or_named_assign=False + +# Use spaces around the power operator. +spaces_around_power_operator=False + +# The number of spaces required before a trailing comment. +spaces_before_comment=2 + +# Insert a space between the ending comma and closing bracket of a list, +# etc. +space_between_ending_comma_and_closing_bracket=False + +# Split before arguments if the argument list is terminated by a +# comma. +split_arguments_when_comma_terminated=False + +# Set to True to prefer splitting before '&', '|' or '^' rather than +# after. +split_before_bitwise_operator=False + +# Split before a dictionary or set generator (comp_for). For example, note +# the split before the 'for': +# +# foo = { +# variable: 'Hello world, have a nice day!' +# for variable in bar if variable != 42 +# } +split_before_dict_set_generator=True + +# Split after the opening paren which surrounds an expression if it doesn't +# fit on a single line. +split_before_expression_after_opening_paren=False + +# If an argument / parameter list is going to be split, then split before +# the first argument. +split_before_first_argument=False + +# Set to True to prefer splitting before 'and' or 'or' rather than +# after. +split_before_logical_operator=False + +# Split named assignments onto individual lines. +split_before_named_assigns=True + +# Set to True to split list comprehensions and generators that have +# non-trivial expressions and multiple clauses before each of these +# clauses. For example: +# +# result = [ +# a_long_var + 100 for a_long_var in xrange(1000) +# if a_long_var % 10] +# +# would reformat to something like: +# +# result = [ +# a_long_var + 100 +# for a_long_var in xrange(1000) +# if a_long_var % 10] +split_complex_comprehension=True + +# The penalty for splitting right after the opening bracket. +split_penalty_after_opening_bracket=30 + +# The penalty for splitting the line after a unary operator. +split_penalty_after_unary_operator=10000 + +# The penalty for splitting right before an if expression. +split_penalty_before_if_expr=0 + +# The penalty of splitting the line around the '&', '|', and '^' +# operators. +split_penalty_bitwise_operator=300 + +# The penalty for splitting a list comprehension or generator +# expression. +split_penalty_comprehension=2100 + +# The penalty for characters over the column limit. +split_penalty_excess_character=4500 + +# The penalty incurred by adding a line split to the unwrapped line. The +# more line splits added the higher the penalty. +split_penalty_for_added_line_split=30 + +# The penalty of splitting a list of "import as" names. For example: +# +# from a_very_long_or_indented_module_name_yada_yad import (long_argument_1, +# long_argument_2, +# long_argument_3) +# +# would reformat to something like: +# +# from a_very_long_or_indented_module_name_yada_yad import ( +# long_argument_1, long_argument_2, long_argument_3) +split_penalty_import_names=0 + +# The penalty of splitting the line around the 'and' and 'or' +# operators. +split_penalty_logical_operator=300 + +# Use the Tab character for indentation. +use_tabs=False + diff --git a/src/SConstruct b/src/SConstruct new file mode 100644 index 0000000..a62dd78 --- /dev/null +++ b/src/SConstruct @@ -0,0 +1,31 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +Help(""" + + DEBUG=1,0 - enable debug build, default 1 + +""") + +def build(): + from miscsetup import CustomBuildEnvironment + env = CustomBuildEnvironment() + env.build() + + +if not GetOption('help'): + build() diff --git a/src/site_scons/.gitignore b/src/site_scons/.gitignore new file mode 100644 index 0000000..80d4ca5 --- /dev/null +++ b/src/site_scons/.gitignore @@ -0,0 +1,3 @@ + +__pycache__/ + diff --git a/src/site_scons/localtargets/Executable.py b/src/site_scons/localtargets/Executable.py new file mode 100644 index 0000000..91969e6 --- /dev/null +++ b/src/site_scons/localtargets/Executable.py @@ -0,0 +1,62 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +from .RunableTarget import RunableTarget + + +class Executable(RunableTarget): + + def __init__( + self, env, name, sources, localStaticLibs, localSharedLibs, + externalLibs, isBin + ): + + self.__target = None + self.__isBin = isBin + + super(Executable, self).__init__( + env, name, sources, localStaticLibs, localSharedLibs, externalLibs + ) + + self.writeScript() + + self.env.Install(self.installDir, self.target) + + @property + def installDir(self): + return self.binDir if self.__isBin else \ + self.etcDir + + @property + def scriptFileDir(self): + return self.installDir + + @property + def target(self): + + if self.__target is None: + self.__target = \ + self.env.Program(target=self.name, + source=self.sources, + LIBS=self.localSharedLibsNames + self.externalLibsNames, + LIBPATH=self.env['LIBPATH'] + + self.externalLibsPaths, + CPPPATH=self.env['CPPPATH'] + + self.externalLibsIncludes, + CPPFLAGS=self.cppFlags, + LINKFLAGS=self.linkFlags) + return self.__target diff --git a/src/site_scons/localtargets/LocalTarget.py b/src/site_scons/localtargets/LocalTarget.py new file mode 100644 index 0000000..d50dbdb --- /dev/null +++ b/src/site_scons/localtargets/LocalTarget.py @@ -0,0 +1,163 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +import os + + +class LocalTarget(object): + + def __init__( + self, env, name, sources, localStaticLibs, localSharedLibs, externalLibs + ): + + self.__env = env + self.__name = name + self.__sources = sources + self.__localStaticLibs = localStaticLibs + self.__localSharedLibs = localSharedLibs + self.__externalLibs = externalLibs + + self.__localDir = os.getcwd() + + @property + def installDir(self): + assert False + + @property + def target(self): + assert False + + @property + def env(self): + return self.defaultEnv + + @property + def defaultEnv(self): + return self.__env.defaultEnv + + @property + def swigEnv(self): + return self.__env.swigEnv + + @property + def srcDir(self): + return self.__env.srcDir + + @property + def buildDir(self): + return self.__env.buildDir + + @property + def binDir(self): + return self.__env.binDir + + @property + def libDir(self): + return self.__env.libDir + + @property + def libPyDir(self): + return self.__env.libPyDir + + @property + def testDir(self): + return self.__env.testDir + + @property + def etcDir(self): + return self.__env.etcDir + + @property + def isWindows(self): + return self.__env.isWindows + + @property + def isLinux(self): + return self.__env.isLinux + + @property + def isClean(self): + return self.__env.isClean + + @property + def name(self): + return self.__name + + @property + def sources(self): + return self.__sources + + @property + def cppFlags(self): + return self.env['CPPFLAGS'] + + @property + def linkFlags(self): + return self.env['LINKFLAGS'] + + @property + def cppDefines(self): + return self.env['CPPDEFINES'].copy() + + @property + def localSharedLibsNames(self): + return self.__localSharedLibs + + @property + def externalLibs(self): + return self.__externalLibs + + @property + def localDir(self): + return self.__localDir + + @property + def externalLibsNames(self): + nameList = [] + for externalLib in self.externalLibs: + nameList += externalLib.lib + return nameList + + @property + def externalLibsPaths(self): + return [lib.libPath for lib in self.externalLibs if lib.libPath] + + @property + def externalLibsIncludes(self): + return [lib.include for lib in self.externalLibs if lib.include] + + def absPath(self, path): + return os.path.abspath(path) + + def dirName(self, path): + return os.path.dirname(path) + + def join(self, *paths): + return os.path.join(*paths) + + def isFile(self, fileNamePath): + return os.path.isfile(fileNamePath) + + def clean(self, fileNamePath): + if not all([self.isClean, self.isFile(fileNamePath)]): + return + os.remove(fileNamePath) + print('Removed', fileNamePath) + + def summary(self): + lstr = self.name + '\n' + return lstr diff --git a/src/site_scons/localtargets/RunableTarget.py b/src/site_scons/localtargets/RunableTarget.py new file mode 100644 index 0000000..164f762 --- /dev/null +++ b/src/site_scons/localtargets/RunableTarget.py @@ -0,0 +1,78 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +from .LocalTarget import LocalTarget + + +class RunableTarget(LocalTarget): + + def __init__( + self, env, name, sources, localStaticLibs, localSharedLibs, externalLibs + ): + + super(RunableTarget, self).__init__( + env, name, sources, localStaticLibs, localSharedLibs, externalLibs + ) + + @property + def scriptFileDir(self): + assert False + + def getScriptFilePath(self): + import os + scriptFileDir = self.scriptFileDir + if not os.path.exists(scriptFileDir): + os.makedirs(scriptFileDir) + if self.isLinux: + return os.path.join(scriptFileDir, self.name) + '.sh' + elif self.isWindows: + return os.path.join(scriptFileDir, self.name) + '.exe.bat' + + def _writeLinuxScript(self): + scriptPath = self.getScriptFilePath() + self.clean(scriptPath) + if all([not self.isClean, not self.isFile(scriptPath)]): + print('Writing', scriptPath) + with open(scriptPath, 'w') as f: + f.write(r'#!/bin/sh' + '\n') + f.write(r'SCRIPT=`realpath -s $0`' + '\n') + f.write(r'SCRIPTPATH=`dirname $SCRIPT`' + '\n') + f.write( + r'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:' + self.libDir + + '\n' + ) + f.write(r'$SCRIPTPATH/' + self.name + r' "$@"') + import os + os.system('chmod +x ' + scriptPath) + + def _writeWindowsScript(self): + scriptPath = self.getScriptFilePath() + self.clean(scriptPath) + if all([not self.isClean, not self.isFile(scriptPath)]): + print('Writing', scriptPath) + with open(scriptPath, 'w') as f: + f.write(r'@echo off' + '\n') + f.write(r'setlocal' + '\n') + f.write(r'set scriptPath=%~dp0' + '\n') + f.write(r'PATH=$PATH;' + self.libDir + '\n') + f.write(r'%scriptPath%' + self.name + r' %*') + + def writeScript(self): + if self.isLinux: + return self._writeLinuxScript() + elif self.isWindows: + return self._writeWindowsScript() diff --git a/src/site_scons/localtargets/__init__.py b/src/site_scons/localtargets/__init__.py new file mode 100644 index 0000000..05087cd --- /dev/null +++ b/src/site_scons/localtargets/__init__.py @@ -0,0 +1,18 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +from .Executable import Executable diff --git a/src/site_scons/miscsetup/Architecture.py b/src/site_scons/miscsetup/Architecture.py new file mode 100644 index 0000000..7ed587b --- /dev/null +++ b/src/site_scons/miscsetup/Architecture.py @@ -0,0 +1,95 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +import os +import platform +import sys + +import SCons + + +class Architecture(object): + + def __init__(self): + + self.__osName = platform.system() + self.__pythonVersion = platform.python_version() + self.__sconsVersion = SCons.__version__ + + if self.__osName not in self.supportedSystems: + raise RuntimeError('Unsupported OS architecture.') + + self.__sysDirName = 'unknown' + if self.isLinux: + self.__sysDirName = 'linx64' + if not 'LD_LIBRARY_PATH' in os.environ: + os.environ['LD_LIBRARY_PATH'] = '' + elif self.isWindows: + self.__sysDirName = 'winx64' + + @property + def supportedSystems(self): + return ['Windows', 'Linux'] + + @property + def osName(self): + return self.__osName + + @property + def isWindows(self): + return self.osName == 'Windows' + + @property + def isLinux(self): + return self.osName == 'Linux' + + @property + def pythonVersion(self): + return self.__pythonVersion + + @property + def sconsVersion(self): + return self.__sconsVersion + + @property + def sysDirName(self): + return self.__sysDirName + + def _getFormatedPaths(self, pathStr): + return str(pathStr.split(os.pathsep)).replace(', ', ',\n').replace( + '[', '[\n' + ).replace(']', '\n]') + + def summary(self): + lstr = '=' * 50 + '\n' + lstr += 'Architecture Summary\n' + lstr += '=' * 50 + '\n' + lstr += 'operating system: ' + self.osName + '\n' + lstr += 'python version: ' + self.pythonVersion + '\n' + lstr += 'scons version: ' + self.sconsVersion + '\n' + lstr += 'path: ' + \ + self._getFormatedPaths(os.environ['PATH']) + '\n' + if self.isLinux: + lstr += 'LD_LIBRARY_PATH: ' + \ + self._getFormatedPaths(os.environ['LD_LIBRARY_PATH']) + '\n' + if os.environ.get('PYTHONPATH'): + lstr += 'python path: ' + \ + self._getFormatedPaths(os.environ['PYTHONPATH']) + '\n' + lstr += 'session python path: ' + \ + self._getFormatedPaths(os.pathsep.join(sys.path)) + '\n' + lstr += '-' * 50 + '\n' + return lstr diff --git a/src/site_scons/miscsetup/ArgumentsSetup.py b/src/site_scons/miscsetup/ArgumentsSetup.py new file mode 100644 index 0000000..177b88b --- /dev/null +++ b/src/site_scons/miscsetup/ArgumentsSetup.py @@ -0,0 +1,66 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + + +class ArgumentsSetup(object): + + def __init__(self): + + from SCons.Script import ARGUMENTS, GetOption + + self.__debugArg = ARGUMENTS.get('DEBUG', '1') + if self.__debugArg not in ['0', '1']: + raise RuntimeError('Check the DEBUG input argument.') + + self.__assertArg = '1' if self.__debugArg == '1' else '0' + if self.__assertArg not in ['0', '1']: + raise RuntimeError('Check the ASSERT input argument.') + + self.__compilerName = ARGUMENTS.get('COMPILER', '') + + self.__isClean = GetOption('clean') + + @property + def isDebug(self): + return self.__debugArg == '1' + + @property + def isAssert(self): + return self.__assertArg == '1' + + @property + def compilerName(self): + return self.__compilerName + + @property + def isClean(self): + return self.__isClean + + def summary(self): + + def printDefault(x): + return x if x else '-default-' + + lstr = '=' * 50 + '\n' + lstr += 'Build Arguments Summary\n' + lstr += '=' * 50 + '\n' + lstr += 'debug: ' + str(self.isDebug) + '\n' + lstr += 'assert: ' + str(self.isAssert) + '\n' + lstr += 'compiler name: ' + printDefault(self.compilerName) + '\n' + lstr += 'clean build: ' + str(self.isClean) + '\n' + lstr += '-' * 50 + '\n' + return lstr diff --git a/src/site_scons/miscsetup/BuildPath.py b/src/site_scons/miscsetup/BuildPath.py new file mode 100644 index 0000000..517e170 --- /dev/null +++ b/src/site_scons/miscsetup/BuildPath.py @@ -0,0 +1,162 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + + +class BuildPath(object): + + def __init__(self, archObj, argObj): + + import os + + from SCons.Script import Dir + + # main + self.__srcDir = Dir('#').abspath + + self.__projectDir = os.path.abspath(os.path.join(self.__srcDir, '..')) + self.__runtimeDir = os.path.join(self.__projectDir, 'runtime') + self.__thirdpartyDir = os.path.join(self.__projectDir, 'thirdparty') + + #assert os.path.exists(self.__runtimeDir) + #assert os.path.exists(self.__thirdpartyDir) + + def _exist(path): + if not os.path.exists(path): + os.makedirs(path) + return path + + # build variables + self.__buildDir = os.path.join( + self.__projectDir, 'build', archObj.sysDirName + ) + self.__installDir = os.path.join( + self.__projectDir, 'install', archObj.sysDirName + ) + + self.__buildDir = _exist(self.__buildDir) + + self.__binDir = _exist(os.path.join(self.__installDir, 'bin')) + self.__libDir = _exist(os.path.join(self.__installDir, 'lib')) + self.__libPyDir = _exist(os.path.join(self.__libDir, 'py')) + self.__testDir = _exist(os.path.join(self.__installDir, 'test')) + self.__etcDir = _exist(os.path.join(self.__installDir, 'etc')) + + # lib + self.__runtimeArchDir = os.path.join( + self.__runtimeDir, archObj.sysDirName + ) + #assert os.path.exists(self.__runtimeArchDir) + + # thirdparty + __thirdpartyNoArchDir = os.path.join(self.__thirdpartyDir, 'noarch') + __thirdpartyArchDir = os.path.join( + self.__thirdpartyDir, archObj.sysDirName + ) + + self.__thirdpartyNoArchBinDir = os.path.join( + __thirdpartyNoArchDir, 'bin' + ) + self.__thirdpartyArchBinDir = os.path.join(__thirdpartyArchDir, 'bin') + #assert os.path.exists(self.__thirdpartyNoArchBinDir) + #assert os.path.exists(self.__thirdpartyArchBinDir) + + self.__thirdpartyNoArchIncludeDir = os.path.join( + __thirdpartyNoArchDir, 'include' + ) + self.__thirdpartyArchIncludeDir = os.path.join( + __thirdpartyArchDir, 'include' + ) + #assert os.path.exists(self.__thirdpartyNoArchIncludeDir) + #assert os.path.exists(self.__thirdpartyArchIncludeDir) + + self.__thirdpartyNoArchLibDir = os.path.join( + __thirdpartyNoArchDir, 'lib' + ) + self.__thirdpartyArchLibDir = os.path.join(__thirdpartyArchDir, 'lib') + #assert os.path.exists(self.__thirdpartyNoArchLibDir) + #assert os.path.exists(self.__thirdpartyArchLibDir) + + self.__thirdpartyNoArchLibPyDir = os.path.join( + self.__thirdpartyNoArchLibDir, 'py' + ) + #assert os.path.exists(self.__thirdpartyNoArchLibPyDir) + + @property + def projectDir(self): + return self.__projectDir + + @property + def srcDir(self): + return self.__srcDir + + @property + def buildDir(self): + return self.__buildDir + + @property + def binDir(self): + return self.__binDir + + @property + def libDir(self): + return self.__libDir + + @property + def libPyDir(self): + return self.__libPyDir + + @property + def testDir(self): + return self.__testDir + + @property + def etcDir(self): + return self.__etcDir + + @property + def runtimeArchDir(self): + return self.__runtimeArchDir + + @property + def thirdpartyNoArchIncludeDir(self): + return self.__thirdpartyNoArchIncludeDir + + @property + def thirdpartyArchIncludeDir(self): + return self.__thirdpartyArchIncludeDir + + @property + def thirdpartyArchLibDir(self): + return self.__thirdpartyArchLibDir + + def summary(self): + lstr = '=' * 50 + '\n' + lstr += 'Paths Summary\n' + lstr += '=' * 50 + '\n' + lstr += 'project: ' + self.projectDir + '\n' + lstr += 'build: ' + self.buildDir + '\n' + lstr += 'install bin: ' + self.binDir + '\n' + lstr += 'install lib: ' + self.libDir + '\n' + lstr += 'install py: ' + self.libPyDir + '\n' + lstr += 'install test: ' + self.testDir + '\n' + lstr += 'install etc: ' + self.etcDir + '\n' + lstr += 'runtime: ' + self.runtimeArchDir + '\n' + lstr += 'thirdparty noarch include: ' + self.thirdpartyNoArchIncludeDir + '\n' + lstr += 'thirdparty arch include: ' + self.thirdpartyArchIncludeDir + '\n' + lstr += 'thirdparty arch lib: ' + self.thirdpartyArchLibDir + '\n' + lstr += '-' * 50 + '\n' + return lstr diff --git a/src/site_scons/miscsetup/CompilerSetup.py b/src/site_scons/miscsetup/CompilerSetup.py new file mode 100644 index 0000000..36b134c --- /dev/null +++ b/src/site_scons/miscsetup/CompilerSetup.py @@ -0,0 +1,243 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + + +class CompilerSetup(object): + + def __init__(self, archObj, argObj): + + self.__archObj = archObj + self.__argObj = argObj + + self.__gccCom = 'gcc' + self.__intelCom = 'intel' + self.__clangCom = 'clang' + self.__msvcCom = 'msvc' + + if archObj.isLinux: + self.__defaultCompiler = self.__gccCom + self.__compilers = { + self.__gccCom: ['gcc', 'g++'], + self.__intelCom: ['ic', 'icpc'], + self.__clangCom: ['clang', 'clang++'] + } + elif archObj.isWindows: + self.__defaultCompiler = self.__msvcCom + self.__compilers = { + self.__msvcCom: ['cl', 'cl'], + self.__intelCom: ['ic', 'icpp'], + self.__clangCom: ['clang', 'clang++'] + } + + self.__compiler = argObj.compilerName if argObj.compilerName else \ + self.__defaultCompiler + + if self.__compiler not in self.__compilers: + raise RuntimeError('Check the COMPILER input argument.') + + # + # widnows compilers + # + def _clang_windows(self): + return dict( + ccFlags=["-std=c++1z", '-fms-compatibility-version=21'], + optCFlags=["-O3"], + optLinkFlags=["-Wl,--export-dynamic"], + debugCFlags=[ + "-O0", "-Wall", "-Wuninitialized", "-Wunused", "-Wconversion", + "-fpermissive" + ], + debugLinkFlags=["-g"], + profileCFlags=["-g"], + profileLinkFlags=["-g"], + ompCFlags=["-fopenmp"], + ompLinkFlags=["-fopenmp"], + defFlagsStr="-D", + includeFlagsStr="-I" + ) + + def _intel_windows(self): + return dict( + ccFlags=["/MD", "/EHsc", "/Qvc10"], + optCFlags=[ + "/O3", "/Qrestrict", "/Qprec-div-", "/Qvec-report0", "/Qip" + ], # last not profile only + optLinkFlags=["/MANIFEST"], + debugCFlags=[ + "/Zi", "/Qrestrict", "/Fd${TARGET}.pdb", "/Od", "/W3", "/Wcheck" + ], + debugLinkFlags=["/debug"], + profileCFlags=["/Zi", "/Fd${TARGET}.pdb", "/Qprof-gen-"], + profileLinkFlags=["/debug"], + ompCFlags=["/Qopenmp"], + ompLinkFlags=[""], + defFlagsStr="/D", + includeFlagsStr="/I" + ) + + def _msvc_windows(self): + return dict( + ccFlags=["/MD", "/EHsc", "/wd4251"], + optCFlags=["/O2"], + optLinkFlags=["/MANIFEST"], + debugCFlags=["/Od", "/Zi", "/Fd${TARGET}.pdb", "/W3"], + debugLinkFlags=["/debug"], + profileCFlags=["/Zi", "/Fd${TARGET}.pdb"], + profileLinkFlags=["/debug"], + ompCFlags=["/openmp"], + ompLinkFlags=[""], + defFlagsStr="/D", + includeFlagsStr="/I" + ) + + # + # linux compilers + # + def _clang_linux(self): + return dict( + ccFlags=["-std=c++1z"], + optCFlags=["-O3"], + optLinkFlags=["-Wl,--export-dynamic"], + debugCFlags=[ + "-g", "-O0", "-Wall", "-Wuninitialized", "-Wunused", + "-Wconversion", "-fpermissive" + ], + debugLinkFlags=["-g"], + profileCFlags=["-g"], + profileLinkFlags=["-g"], + ompCFlags=["-fopenmp"], + ompLinkFlags=["-fopenmp"], + defFlagsStr="-D", + includeFlagsStr="-I" + ) + + def _intel_linux(self): + return dict( + ccFlags=["-Wcheck"], + optCFlags=["-O3", "-no-prec-div", "-ip", "-qopt-report"], + optLinkFlags=["-O3"], + debugCFlags=["-g", "-O0", "-Wall"], + debugLinkFlags=["-g", "-O0"], + profileCFlags=["-g"], + profileLinkFlags=["-g"], + ompCFlags=["-openmp"], + ompLinkFlags=["-openmp"], + defFlagsStr="-D", + includeFlagsStr="-I" + ) + + def _gcc_linux(self): + return dict( + ccFlags=["-std=c++1z"], + optCFlags=["-O3"], + optLinkFlags=["-Wl,--export-dynamic"], + debugCFlags=[ + "-g", "-O0", "-Wall", "-Wuninitialized", "-Wunused", + "-Wconversion", "-fpermissive", "-Wimplicit-fallthrough" + ], + debugLinkFlags=["-g"], + profileCFlags=["-g"], + profileLinkFlags=["-g"], + ompCFlags=["-fopenmp"], + ompLinkFlags=["-fopenmp"], + defFlagsStr="-D", + includeFlagsStr="-I" + ) + + def _arch_compiler_flags(self): + if self.__archObj.isLinux: + if self.__compiler == self.__gccCom: + return self._gcc_linux() + elif self.__compiler == self.__intelCom: + return self._intel_linux() + elif self.__compiler == self.__clangCom: + return self._clang_linux() + elif self.__archObj.isWindows: + retDict = None + if self.__compiler == self.__msvcCom: + retDict = self._msvc_windows() + elif self.__compiler == self.__intelCom: + retDict = self._intel_windows() + elif self.__compiler == self.__clangCom: + retDict = self._clang_windows() + return retDict + + @property + def compilers(self): + return self.__compilers + + @property + def defaultCompiler(self): + return self.__defaultCompiler + + @property + def compiler(self): + return self.__compiler + + @property + def cCompiler(self): + return self.__compilers[self.compiler][0] + + @property + def cppCompiler(self): + return self.__compilers[self.compiler][1] + + def getFlags(self): + __buildFlags = [] + __linkFlags = [] + + __archFlags = self._arch_compiler_flags() + __buildFlags += __archFlags['ccFlags'] + + if self.__argObj.isDebug: + __buildFlags += __archFlags['debugCFlags'] + __linkFlags += __archFlags['debugLinkFlags'] + else: + __buildFlags += __archFlags['optCFlags'] + __linkFlags += __archFlags['optLinkFlags'] + + __localDefs = {} + + if not self.__argObj.isAssert: + __localDefs['NDEBUG'] = None + + if self.__archObj.isWindows: + #__localDefs['BOOST_LIB_TOOLSET'] = 'vc141' + __localDefs['BOOST_ALL_DYN_LINK'] = None + #__localDefs['BOOST_LIB_DIAGNOSTIC'] = None + + return dict( + buildFlags=__buildFlags, + linkFlags=__linkFlags, + localDefs=__localDefs, + defFlagsStr=__archFlags['defFlagsStr'], + includeFlagsStr=__archFlags['includeFlagsStr'] + ) + + def summary(self): + __archFlags = self.getFlags() + lstr = '=' * 50 + '\n' + lstr += 'Compiler Configuration Summary\n' + lstr += '=' * 50 + '\n' + lstr += 'system compilers: ' + str(self.compilers) + '\n' + lstr += 'default compiler: ' + self.defaultCompiler + '\n' + lstr += 'selected compiler: ' + self.compiler + '\n' + lstr += 'build flags: ' + str(__archFlags['buildFlags']) + '\n' + lstr += 'link flags: ' + str(__archFlags['linkFlags']) + '\n' + lstr += 'def flags: ' + str(__archFlags['localDefs']) + '\n' + lstr += '-' * 50 + '\n' + return lstr diff --git a/src/site_scons/miscsetup/CustomBuildEnvironment.py b/src/site_scons/miscsetup/CustomBuildEnvironment.py new file mode 100644 index 0000000..e6c6859 --- /dev/null +++ b/src/site_scons/miscsetup/CustomBuildEnvironment.py @@ -0,0 +1,253 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +import os + +from SCons.Script import (Environment, Alias, Default, VariantDir, SConscript) + +from localtargets import Executable as LocalExecutable + + +class CustomBuildEnvironment(object): + + def __init__(self): + + from .Architecture import Architecture + from .ArgumentsSetup import ArgumentsSetup + from .CompilerSetup import CompilerSetup + from .BuildPath import BuildPath + from .NamedObjectTable import NamedObjectTable + + self.__archConfig = Architecture() + self.__argumentsConfig = ArgumentsSetup() + self.__compilerConfig = CompilerSetup( + self.__archConfig, self.__argumentsConfig + ) + self.__pathConfig = BuildPath(self.__archConfig, self.__argumentsConfig) + + additionalEnv = dict( + tools=[ + 'default', + ] + ) + + self.__defaultEnv = Environment(ENV=os.environ, **additionalEnv) + + buildAndLinkFlags = self.__compilerConfig.getFlags() + + self.__defaultEnv.Replace( + CC=self.__compilerConfig.cCompiler, + CXX=self.__compilerConfig.cppCompiler + ) + self.__defaultEnv['CPPFLAGS'] = buildAndLinkFlags['buildFlags'] + self.__defaultEnv['LINKFLAGS'] = buildAndLinkFlags['linkFlags'] + self.__defaultEnv['CPPDEFINES'] = buildAndLinkFlags['localDefs'] + self.__defaultEnv['CPPDEFPREFIX'] = buildAndLinkFlags['defFlagsStr'] + self.__defaultEnv['INCPREFIX'] = buildAndLinkFlags['includeFlagsStr'] + self.__defaultEnv['CPPPATH'] = [ + self.__pathConfig.srcDir, + self.__pathConfig.thirdpartyNoArchIncludeDir, + self.__pathConfig.thirdpartyArchIncludeDir, + ] + self.__defaultEnv['LIBPATH'] = [self.__pathConfig.libDir] + ''' + self.__defaultEnv['_MSVC_OUTPUT_FLAG'] = '-o $TARGET' + self.__defaultEnv['CCCOM'] = self.__defaultEnv['CCCOM'].replace('/c', '-c') + self.__defaultEnv['CXXCOM'] = self.__defaultEnv['CXXCOM'].replace('/c', '-c') + self.__defaultEnv['SHCCCOM'] = self.__defaultEnv['SHCCCOM'].replace('/c', '-c') + self.__defaultEnv['SHCXXCOM'] = self.__defaultEnv['SHCXXCOM'].replace('/c', '-c') + self.__defaultEnv['CCFLAGS'].remove('/nologo') + self.__defaultEnv['CXXFLAGS'].remove('/TP') + ''' + + Alias('installBin', self.__pathConfig.binDir) + Alias('installLib', self.__pathConfig.libDir) + Alias('installLibPy', self.__pathConfig.libPyDir) + Alias('installTest', self.__pathConfig.testDir) + Alias('installEtc', self.__pathConfig.etcDir) + + Alias( + 'install', [ + 'installBin', 'installLib', 'installLibPy', + 'installTest', 'installEtc' + ] + ) + + Default('install') + + ''' + open('defaultEnv.txt', 'w').write(self.__defaultEnv.Dump()) + ''' + + self.__localTargets = { + name: NamedObjectTable(tableName=title) + for name, title in [ + ('program', 'Programs'), + ] + } + + if self.isLinux: + pass #self.defaultEnv.Install(self.libDir, self.runtimeArchDir) + + @property + def SConscript(self): + return 'SConscript' + + @property + def defaultEnv(self): + return self.__defaultEnv + + @property + def swigEnv(self): + return self.__swigEnv + + @property + def srcDir(self): + return self.__pathConfig.srcDir + + @property + def startDir(self): + return self.__pathConfig.startDir + + @property + def cppDir(self): + return self.__pathConfig.cppDir + + @property + def buildDir(self): + return self.__pathConfig.buildDir + + @property + def binDir(self): + return self.__pathConfig.binDir + + @property + def libDir(self): + return self.__pathConfig.libDir + + @property + def libPyDir(self): + return self.__pathConfig.libPyDir + + @property + def testDir(self): + return self.__pathConfig.testDir + + @property + def etcDir(self): + return self.__pathConfig.etcDir + + @property + def runtimeArchDir(self): + return self.__pathConfig.runtimeArchDir + + @property + def thirdpartyArchLibDir(self): + return self.__pathConfig.thirdpartyArchLibDir + + @property + def thirdpartyLibsPyDir(self): + return self.__pathConfig.thirdpartyLibsPyDir + + @property + def isWindows(self): + return self.__archConfig.isWindows + + @property + def isLinux(self): + return self.__archConfig.isLinux + + @property + def isClean(self): + return self.__argumentsConfig.isClean + + def _checkSources(self, sources, isShared=False): + + if isinstance(sources, str): + sources = [sources] + + assert isinstance(sources, list) + + # sources = list(set(sources)) + newSources = [] + for src in sources: + if '.proto' in src: + protoObj = self.__localTargets['proto'].get( + [src.replace('.proto', '')] + )[0] + for ccSrc in protoObj.getCC(): + newSources.append( + self.defaultEnv.SharedObject(ccSrc) + if isShared else self.defaultEnv.Object(ccSrc) + ) + else: + newSources.append(src) + + return newSources + + def program( + self, + targetName, + sources, + localStaticLibs=[], + localSharedLibs=[], + externalLibs=[], + isBin=False + ): + sources = self._checkSources(sources) + progObj = LocalExecutable( + env=self, + name=targetName, + sources=sources, + localStaticLibs=localStaticLibs, + localSharedLibs=localSharedLibs, + externalLibs=[],#self.__externalLibTable.get(externalLibs), + isBin=isBin + ) + self.__localTargets['program'].register(progObj) + return progObj + + def _buildSConscript(self): + + def _getRootList(): + for root, _, files in os.walk(self.srcDir): + if self.SConscript in files: + yield root.replace(self.srcDir, self.buildDir) + + for root in _getRootList(): + SConscript( + os.path.join(root, self.SConscript), exports={ + 'env': self + } + ) + + def build(self): + + VariantDir(variant_dir=self.buildDir, src_dir=self.srcDir, duplicate=0) + + self._buildSConscript() + + print(self.summary()) + + def summary(self): + lstr = self.__archConfig.summary() + lstr += self.__argumentsConfig.summary() + lstr += self.__compilerConfig.summary() + lstr += self.__pathConfig.summary() + for name in sorted(list(self.__localTargets.keys())): + lstr += self.__localTargets[name].summary() + return lstr diff --git a/src/site_scons/miscsetup/NamedObjectTable.py b/src/site_scons/miscsetup/NamedObjectTable.py new file mode 100644 index 0000000..77667ab --- /dev/null +++ b/src/site_scons/miscsetup/NamedObjectTable.py @@ -0,0 +1,52 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + + +class NamedObjectTable(object): + + def __init__(self, tableName): + self.__name = tableName + + self.__list = {} + + @property + def name(self): + return self.__name + + def register(self, namedObj): + self.__list[namedObj.name] = namedObj + + def get(self, objNames): + keys = list(self.__list.keys()) + namedObjs = [] + for objName in objNames: + if objName in keys: + namedObjs.append(self.__list[objName]) + else: + raise RuntimeError('Unknown ' + self.name + ': ' + objName) + return namedObjs + + def iterObjects(self): + return iter(list(self.__list.values())) + + def summary(self): + lstr = '=' * 50 + '\n' + lstr += self.name + ' Summary\n' + lstr += '=' * 50 + '\n' + for namedObj in list(self.__list.values()): + lstr += namedObj.summary() + '-' * 50 + '\n' + return lstr diff --git a/src/site_scons/miscsetup/__init__.py b/src/site_scons/miscsetup/__init__.py new file mode 100644 index 0000000..dab8c9f --- /dev/null +++ b/src/site_scons/miscsetup/__init__.py @@ -0,0 +1,18 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +from .CustomBuildEnvironment import CustomBuildEnvironment diff --git a/src/site_scons/site_init.py b/src/site_scons/site_init.py new file mode 100644 index 0000000..c3e9792 --- /dev/null +++ b/src/site_scons/site_init.py @@ -0,0 +1,16 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# diff --git a/src/structural/SConscript b/src/structural/SConscript new file mode 100644 index 0000000..d7271cb --- /dev/null +++ b/src/structural/SConscript @@ -0,0 +1,22 @@ +# +# This file is part of cpp-patterns. +# +# cpp-patterns is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cpp-patterns is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cpp-patterns. If not, see . +# + +Import('env') + +env.program(targetName='decoratorEx', + sources=['decorator/decorator.cpp'], + localSharedLibs=[]) diff --git a/src/structural/decorator/Command.hpp b/src/structural/decorator/Command.hpp new file mode 100644 index 0000000..db2a5e5 --- /dev/null +++ b/src/structural/decorator/Command.hpp @@ -0,0 +1,50 @@ +/* + * This file is part of cpp-patterns. + * + * cpp-patterns is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * cpp-patterns is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with cpp-patterns. If not, see . + */ + +#ifndef SRC_STRUCTURAL_DECORATOR_COMMAND_HPP_ +#define SRC_STRUCTURAL_DECORATOR_COMMAND_HPP_ + +#include + +namespace structural { + +namespace decorator { + +struct Command { + virtual ~Command() = default; + + virtual void execute() const = 0; + + template + static Command* generate(Command* p = nullptr) + { + return p ? p : new T(); + } + + template + static std::enable_if_t= 1, Command*> generate( + Command* p = nullptr) + { + return new D(generate(p)); + } +}; + +} // namespace decorator + +} // namespace structural + +#endif // SRC_STRUCTURAL_DECORATOR_COMMAND_HPP_ diff --git a/src/structural/decorator/Decorator.hpp b/src/structural/decorator/Decorator.hpp new file mode 100644 index 0000000..588cc8c --- /dev/null +++ b/src/structural/decorator/Decorator.hpp @@ -0,0 +1,54 @@ +/* + * This file is part of cpp-patterns. + * + * cpp-patterns is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * cpp-patterns is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with cpp-patterns. If not, see . + */ + +#ifndef SRC_STRUCTURAL_DECORATOR_DECORATOR_HPP_ +#define SRC_STRUCTURAL_DECORATOR_DECORATOR_HPP_ + +#include "Command.hpp" + +#include + +namespace structural { + +namespace decorator { + +class Decorator : public Command { +public: + Decorator(const Command* const p) : m_p(p) {} + + virtual ~Decorator() = default; + + virtual void execute() const override final + { + this->decorateBefore(); + m_p->execute(); + this->decorateAfter(); + } + +protected: + virtual void decorateBefore() const = 0; + virtual void decorateAfter() const = 0; + +private: + const std::unique_ptr m_p; +}; + +} // namespace decorator + +} // namespace structural + +#endif // SRC_STRUCTURAL_DECORATOR_DECORATOR_HPP_ diff --git a/src/structural/decorator/Decorators.hpp b/src/structural/decorator/Decorators.hpp new file mode 100644 index 0000000..137a06c --- /dev/null +++ b/src/structural/decorator/Decorators.hpp @@ -0,0 +1,51 @@ +/* + * This file is part of cpp-patterns. + * + * cpp-patterns is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * cpp-patterns is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with cpp-patterns. If not, see . + */ + +#ifndef SRC_STRUCTURAL_DECORATOR_DECORATORS_HPP_ +#define SRC_STRUCTURAL_DECORATOR_DECORATORS_HPP_ + +#include "Decorator.hpp" + +namespace structural { + +namespace decorator { + +class BeforeDecorator : public Decorator { +public: + BeforeDecorator(const Command* const p) : Decorator(p) {} + + virtual ~BeforeDecorator() = default; + +protected: + virtual void decorateAfter() const override final {} +}; + +class AfterDecorator : public Decorator { +public: + AfterDecorator(const Command* const p) : Decorator(p) {} + + virtual ~AfterDecorator() = default; + +protected: + virtual void decorateBefore() const override final {} +}; + +} // namespace decorator + +} // namespace structural + +#endif // SRC_STRUCTURAL_DECORATOR_DECORATORS_HPP_ diff --git a/src/structural/decorator/decorator.cpp b/src/structural/decorator/decorator.cpp new file mode 100644 index 0000000..b3c9c68 --- /dev/null +++ b/src/structural/decorator/decorator.cpp @@ -0,0 +1,120 @@ +/* + * This file is part of cpp-patterns. + * + * cpp-patterns is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * cpp-patterns is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with cpp-patterns. If not, see . + */ + +#include "Decorators.hpp" + +#include +#include + +class DecoratorA : public structural::decorator::BeforeDecorator { +public: + DecoratorA(const structural::decorator::Command* const p) + : structural::decorator::BeforeDecorator(p) + { + } + + virtual ~DecoratorA() { std::cout << "destroying DecoratorA\n"; } + +protected: + virtual void decorateBefore() const override + { + std::cout << "DecoratorA::decorateBefore()\n"; + } +}; + +class DecoratorB : public structural::decorator::AfterDecorator { +public: + DecoratorB(const structural::decorator::Command* const p) + : structural::decorator::AfterDecorator(p) + { + } + + virtual ~DecoratorB() { std::cout << "destroying DecoratorB\n"; } + +protected: + virtual void decorateAfter() const override + { + std::cout << "DecoratorB::decorateAfter()\n"; + } +}; + +class DecoratorC : public structural::decorator::AfterDecorator { +public: + DecoratorC(const structural::decorator::Command* const p) + : structural::decorator::AfterDecorator(p) + { + } + + virtual ~DecoratorC() { std::cout << "destroying DecoratorC\n"; } + +protected: + virtual void decorateAfter() const override + { + std::cout << "DecoratorC::decorateAfter()\n"; + } +}; + +class DecoratorD : public structural::decorator::BeforeDecorator { +public: + DecoratorD(const structural::decorator::Command* const p) + : structural::decorator::BeforeDecorator(p) + { + } + + virtual ~DecoratorD() { std::cout << "destroying DecoratorD\n"; } + +protected: + virtual void decorateBefore() const override + { + std::cout << "DecoratorD::decorateBefore()\n"; + } +}; + +struct CommandA : public structural::decorator::Command { + CommandA() = default; + + virtual ~CommandA() = default; + + virtual void execute() const override + { + std::cout << "CommandA::execute()\n"; + } +}; + +int +main(int argc, char** argv) +{ + // auto a = structural::decorator::Command::generate(); + auto af = structural::decorator::Command:: + generate(); + // auto ag = structural::decorator::Command::generate(af); auto ak = + // structural::decorator::Command::generate(); + + std::cout << "----------------------\n"; + // a->execute(); + af->execute(); + // ag->execute(); + // ak->execute(); + + std::cout << "----------------------\n"; + // delete a; + delete af; + // delete ak; +}