github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/CSource.go (about)

     1  package util
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  )
     7  
     8  type CSource struct {
     9  	Includes []string
    10  	MainBody strings.Builder
    11  	Text     strings.Builder
    12  }
    13  
    14  func (cs *CSource) AddInclude(i string) {
    15  	cs.Includes = append(cs.Includes, i)
    16  }
    17  
    18  func (cs *CSource) AddIncludes(i []string) {
    19  	for _, x := range i {
    20  		cs.AddInclude(x)
    21  	}
    22  }
    23  
    24  func (cs *CSource) Write(fn string) error {
    25  	f, err := os.Create(fn)
    26  	if err != nil {
    27  		return err
    28  	}
    29  	defer f.Close()
    30  
    31  	// write includes
    32  	for _, hdr := range cs.Includes {
    33  		f.WriteString("#include <")
    34  		f.WriteString(hdr)
    35  		f.WriteString(">\n")
    36  	}
    37  
    38  	f.WriteString(cs.Text.String())
    39  
    40  	// write main function
    41  	f.WriteString("int main() {\n")
    42  	f.WriteString(cs.MainBody.String())
    43  	f.WriteString("\n}\n")
    44  
    45  	return nil
    46  }