// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/VariableDeclaration.java
// public final class VariableDeclaration implements Writable
// {
// 	@NotNull private final StorageClass storageClass;
// 	private final boolean isConst;
// 	private final boolean isVolatile;
// 	@NotNull private final String cTypeName;
// 	@NotNull private final String name;
// 	@NotNull private final GccAttributes<GccVariableAttributeName> gccAttributes;
// 
// 	// The cTypeName needs to include any 'pointer' attributes, eg restrict, volatile, const, *
// 	public VariableDeclaration(@NotNull final StorageClass storageClass, final boolean isConst, final boolean isVolatile, @NotNull final String cTypeName, @NotNull final String name, @NotNull final GccAttributes<GccVariableAttributeName> gccAttributes)
// 	{
// 		this.storageClass = storageClass;
// 		this.isConst = isConst;
// 		this.isVolatile = isVolatile;
// 		this.cTypeName = cTypeName;
// 		this.name = name;
// 		this.gccAttributes = gccAttributes;
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		if (storageClass != auto)
// 		{
// 			writer.write(storageClass.storageClass);
// 			writer.write(' ');
// 		}
// 
// 		if (isConst)
// 		{
// 			writer.write("const ");
// 		}
// 
// 		if (isVolatile)
// 		{
// 			writer.write("volatile ");
// 		}
// 
// 		writer.write(cTypeName);
// 		writer.write(' ');
// 		writer.write(name);
// 
// 		gccAttributes.write(writer);
// 
// 		writer.write(';');
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/CharsetHelper.java
// @NotNull public static final Charset Utf8 = forName("UTF-8");


import com.stormmq.java2c.transpiler.conversion.c.VariableDeclaration;
import org.jetbrains.annotations.NotNull;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.QualifiedNameable;
import java.io.*;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import static com.stormmq.java2c.transpiler.CharsetHelper.Utf8;
import static java.lang.String.format;
import static java.util.Locale.ENGLISH;
import static java.util.regex.Pattern.compile;
import static javax.lang.model.element.Modifier.STRICTFP;
package com.stormmq.java2c.transpiler.conversion;




public class CMaker
{
	@NotNull private static final Pattern DotMatch = compile("\\.");
	@NotNull private final CFileCreator cFileCreator;

	public CMaker(@NotNull final CFileCreator cFileCreator)
	{
		this.cFileCreator = cFileCreator;
	}

// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/c/VariableDeclaration.java
// public final class VariableDeclaration implements Writable
// {
// 	@NotNull private final StorageClass storageClass;
// 	private final boolean isConst;
// 	private final boolean isVolatile;
// 	@NotNull private final String cTypeName;
// 	@NotNull private final String name;
// 	@NotNull private final GccAttributes<GccVariableAttributeName> gccAttributes;
// 
// 	// The cTypeName needs to include any 'pointer' attributes, eg restrict, volatile, const, *
// 	public VariableDeclaration(@NotNull final StorageClass storageClass, final boolean isConst, final boolean isVolatile, @NotNull final String cTypeName, @NotNull final String name, @NotNull final GccAttributes<GccVariableAttributeName> gccAttributes)
// 	{
// 		this.storageClass = storageClass;
// 		this.isConst = isConst;
// 		this.isVolatile = isVolatile;
// 		this.cTypeName = cTypeName;
// 		this.name = name;
// 		this.gccAttributes = gccAttributes;
// 	}
// 
// 	public void write(@NotNull final Writer writer) throws IOException
// 	{
// 		if (storageClass != auto)
// 		{
// 			writer.write(storageClass.storageClass);
// 			writer.write(' ');
// 		}
// 
// 		if (isConst)
// 		{
// 			writer.write("const ");
// 		}
// 
// 		if (isVolatile)
// 		{
// 			writer.write("volatile ");
// 		}
// 
// 		writer.write(cTypeName);
// 		writer.write(' ');
// 		writer.write(name);
// 
// 		gccAttributes.write(writer);
// 
// 		writer.write(';');
// 	}
// }
// 
// Path: source/transpiler/com/stormmq/java2c/transpiler/CharsetHelper.java
// @NotNull public static final Charset Utf8 = forName("UTF-8");


// Path: source/transpiler/com/stormmq/java2c/transpiler/conversion/CMaker.java
import com.stormmq.java2c.transpiler.conversion.c.VariableDeclaration;
import org.jetbrains.annotations.NotNull;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.QualifiedNameable;
import java.io.*;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import static com.stormmq.java2c.transpiler.CharsetHelper.Utf8;
import static java.lang.String.format;
import static java.util.Locale.ENGLISH;
import static java.util.regex.Pattern.compile;
import static javax.lang.model.element.Modifier.STRICTFP;

package com.stormmq.java2c.transpiler.conversion;




public class CMaker
{
	@NotNull private static final Pattern DotMatch = compile("\\.");
	@NotNull private final CFileCreator cFileCreator;

	public CMaker(@NotNull final CFileCreator cFileCreator)
	{
		this.cFileCreator = cFileCreator;
	}

	public void makeFiles(@NotNull final QualifiedNameable qualifiedNameable, final boolean isPackage, @NotNull final List<String> libraryIncludes, @NotNull final List<String> localIncludes, @NotNull final List<VariableDeclaration> publicConstants) throws IOException