32 lines
		
	
	
		
			671 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			671 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package objects
 | |
| 
 | |
| // CountObjects returns the number of objects that a given object o contains.
 | |
| // For scalar value types, it will always be 1. For compound value types,
 | |
| // this will include its elements and all of their elements recursively.
 | |
| func CountObjects(o Object) (c int) {
 | |
| 	c = 1
 | |
| 
 | |
| 	switch o := o.(type) {
 | |
| 	case *Array:
 | |
| 		for _, v := range o.Value {
 | |
| 			c += CountObjects(v)
 | |
| 		}
 | |
| 	case *ImmutableArray:
 | |
| 		for _, v := range o.Value {
 | |
| 			c += CountObjects(v)
 | |
| 		}
 | |
| 	case *Map:
 | |
| 		for _, v := range o.Value {
 | |
| 			c += CountObjects(v)
 | |
| 		}
 | |
| 	case *ImmutableMap:
 | |
| 		for _, v := range o.Value {
 | |
| 			c += CountObjects(v)
 | |
| 		}
 | |
| 	case *Error:
 | |
| 		c += CountObjects(o.Value)
 | |
| 	}
 | |
| 
 | |
| 	return
 | |
| }
 | 
