package d2ir

func (,  *Map) {
	for ,  := range .Fields {
		 := .GetField(.Name)
		if  == nil {
			.Fields = append(.Fields, .Copy().(*Field))
			continue
		}
		OverlayField(, )
	}

	for ,  := range .Edges {
		 := .GetEdges(.ID, nil, nil)
		if len() == 0 {
			.Edges = append(.Edges, .Copy().(*Edge))
			continue
		}
		 := [0]
		OverlayEdge(, )
	}
}

func (,  *Map,  *Field) {
	 := -1
	for  := 0;  < len(.Fields); ++ {
		if .Fields[] ==  {
			 = 
			break
		}
	}

	for ,  := range .Fields {
		 := .GetField(.Name)
		if  == nil {
			.Fields = append(.Fields[:], append([]*Field{.Copy().(*Field)}, .Fields[:]...)...)
			++
			continue
		}
		OverlayField(, )
	}

	// NOTE this doesn't expand edges in place, and just appends
	// I suppose to do this, there needs to be an edge placeholder too on top of the field placeholder
	// Will wait to see if a problem
	for ,  := range .Edges {
		 := .GetEdges(.ID, nil, nil)
		if len() == 0 {
			.Edges = append(.Edges, .Copy().(*Edge))
			continue
		}
		 := [0]
		OverlayEdge(, )
	}
}

func (,  *Field) {
	if .Primary_ != nil {
		.Primary_ = .Primary_.Copy().(*Scalar)
	}

	if .Composite != nil {
		if .Map() != nil && .Map() != nil {
			OverlayMap(.Map(), .Map())
		} else {
			.Composite = .Composite.Copy().(Composite)
		}
	}

	.References = append(.References, .References...)
}

func (,  *Edge) {
	if .Primary_ != nil {
		.Primary_ = .Primary_.Copy().(*Scalar)
	}
	if .Map_ != nil {
		if .Map_ != nil {
			OverlayMap(.Map(), .Map_)
		} else {
			.Map_ = .Map_.Copy().(*Map)
		}
	}
	.References = append(.References, .References...)
}