Esempio n. 1
0
		/// <summary>
		/// Generates the specified options.
		/// </summary>
		/// <param name="configOptions">The options.</param>
		/// <param name="types">The types.</param>
		public virtual void Generate(ConfigOptions configOptions, IEnumerable<Type> types)
		{
			Options = configOptions;

			_filename = (ProjectName + ".h").ToLower();
			_defineFilename = _filename.Replace('.', '_').ToUpper();

			using (_writer = new SourceWriter(Path.Combine(Path.GetFullPath(Options.CppOutputDir), _filename))) {
				IEnumerable<Type> functionTypes = types.Where(t => t.HasAttribute<CppFunctionAttribute>());

				IEnumerable<Type> wrapperTypes = types.Where(t => t.HasAttribute<CppClassAttribute>(true));

				IEnumerable<Type> enumerations = types.Where(t => t.IsEnum);

				IEnumerable<Type> valueObjects =
					types.Where(t => t.HasAttribute<CppValueObjectAttribute>() && t.IsValueType && !t.IsEnum);

				IEnumerable<Type> functionProviders =
					types.Where(
						t =>
						t.HasAttribute<CppTypeAttribute>() && !t.HasAttribute<CppClassAttribute>(true) &&
						t.IsInterface);

				IEnumerable<Type> converters = types.Where(t => t.HasAttribute<HandleConverterAttribute>());

				WriteHeader();

				_writer.WriteLine("extern \"C\"");
				_writer.WriteLine("{");
				_writer.Indent();

				WriteEnumerations(enumerations);

				WritePrototypes(valueObjects);
				//WriteWrapperDescriptorPrototypes(wrapperTypes);
				WriteFunctionHandlers(functionTypes);

				WriteTypeDefinitions(valueObjects);
				//WriteWrapperDescriptorDefinitions(wrapperTypes);

				_writer.WriteLine();

				WriteFunctionProviders(functionProviders);
				WriteWrappersMethods(wrapperTypes.OrderBy(x => x.Name));

				_writer.Deindent();
				_writer.WriteLine("}");
				_writer.WriteLine();

				WriteInlineConvertersAndConverters(converters.Union(wrapperTypes).Distinct(), wrapperTypes);
				WriteFooter();

				_writer.Close();
			}
		}