Initial commit

This commit is contained in:
2025-11-17 10:28:09 +01:00
parent 7bff81691f
commit 6ee36e26be
391 changed files with 110253 additions and 0 deletions

140
source/template.c Normal file
View File

@@ -0,0 +1,140 @@
#include "template.h"
struct template * template_new() {
struct template * templateInstance = malloc( sizeof( struct template ) );
templateInstance->instances = array_new();
return templateInstance;
}
void template_add_arguments( struct template * currentTemplate, char * argumentText ) {
printf("add arguments to template\n\n\n");
currentTemplate->arguments = text_split( argumentText, "," );
}
bool template_validateArguments( struct template * currentTemplate, char * argumentText ) {
array * argumentsArray = text_split( argumentText, "," );
if( array_length( argumentsArray ) == array_length( currentTemplate->arguments ) ) {
return true;
} else {
return false;
}
}
bool template_addArgumentValue( struct class * classInstance, char * templateArguments ) {
templateArguments = text_regexReplaceAll( templateArguments, "struct ", "struct ", "" );
if( !template_validateArguments( classInstance->template, templateArguments ) ) {
printf("Error: Invalid template arguments. %s \n\n", templateArguments);
return false;
}
if( !template_instanceExists( classInstance->template, templateArguments ) ) {
printf("Adding template instance. \n\n");
template_addInstance( classInstance->template, templateArguments );
template_instanceExists( classInstance->template, templateArguments );
}
return true;
}
char * template_extractTemplateName( struct template * currentTemplate, char * argumentText ) {
array * argumentsArray = text_split( argumentText, "," );
if( array_length( argumentsArray ) > 0 ) {
return array_get( argumentsArray, 0 );
}
return NULL;
}
bool template_instanceExists( struct template * currentTemplate, char * argumentText ) {
array * argumentsValueArray = text_split( argumentText, "," );
array * intances = currentTemplate->instances;
int count = array_length( intances );
for (int i = 0; i < count; ++i)
{
struct templateInstance * currentTemplateInstance = array_get( intances, i );
array * templateArgumentValues = currentTemplateInstance->argumentValues;
int propertyCount = array_length( templateArgumentValues );
bool allPropertiesMatch = true;
for (int j = 0; j < propertyCount; ++j )
{
char * currentArgumentValue = array_get( templateArgumentValues, j );
char * ArgumentValue = array_get( argumentsValueArray, j );
if( strcmp( currentArgumentValue, ArgumentValue ) != 0 ) {
allPropertiesMatch = false;
}
}
if( allPropertiesMatch ) {
return true;
}
}
return false;
}
void template_addInstance( struct template * currentTemplate, char * argumentText ) {
struct templateInstance * newInstance = templateInstance_new();
newInstance->argumentValues = text_split( argumentText, "," );
array_add( currentTemplate->instances, newInstance );
}
//templateInstance_new