func (slice int16SlicePtr) TakeWhilePtr(functors ...int16FunctorForFilterPtr) int16SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt16Ptr(f, tmpSlice)
	}
	return tmpSlice
}
TakeWhilePtr  - Returns a new list based on predicate function. It returns new list once condition fails.
package fp
type intSlice []int
type intFunctorForMap func(int) int
type intFunctorForFilter func(int) bool
type intSlicePtr []*int
type intFunctorForMapPtr func(*int) *int
type intFunctorForFilterPtr func(*int) bool
func MakeIntSlice(values ...int) intSlice {
	newSlice := intSlice(values)
	return newSlice
}
func (slice intSlice) Map(functors ...intFunctorForMap) intSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt(f, tmpSlice)
	}
	return tmpSlice
}
func MakeIntSlicePtr(values ...*int) intSlicePtr {
	newSlice := intSlicePtr(values)
	return newSlice
}
func (slice intSlicePtr) MapPtr(functors ...intFunctorForMapPtr) intSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapIntPtr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlice) Filter(functors ...intFunctorForFilter) intSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlicePtr) FilterPtr(functors ...intFunctorForFilterPtr) intSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterIntPtr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlice) Remove(functors ...intFunctorForFilter) intSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlicePtr) RemovePtr(functors ...intFunctorForFilterPtr) intSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveIntPtr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlice) DropWhile(functors ...intFunctorForFilter) intSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlicePtr) DropWhilePtr(functors ...intFunctorForFilterPtr) intSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileIntPtr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlice) Reverse() intSlice {
	return ReverseInts(slice)
}
func (slice intSlicePtr) ReversePtr() intSlicePtr {
	return ReverseIntsPtr(slice)
}
func (slice intSlice) Distinct() intSlice {
	return DistinctInt(slice)
}
func (slice intSlicePtr) DistinctPtr() intSlicePtr {
	return DistinctIntPtr(slice)
}
func (slice intSlice) TakeWhile(functors ...intFunctorForFilter) intSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt(f, tmpSlice)
	}
	return tmpSlice
}
func (slice intSlicePtr) TakeWhilePtr(functors ...intFunctorForFilterPtr) intSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileIntPtr(f, tmpSlice)
	}
	return tmpSlice
}
type int64Slice []int64
type int64FunctorForMap func(int64) int64
type int64FunctorForFilter func(int64) bool
type int64SlicePtr []*int64
type int64FunctorForMapPtr func(*int64) *int64
type int64FunctorForFilterPtr func(*int64) bool
func MakeInt64Slice(values ...int64) int64Slice {
	newSlice := int64Slice(values)
	return newSlice
}
func (slice int64Slice) Map(functors ...int64FunctorForMap) int64Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt64(f, tmpSlice)
	}
	return tmpSlice
}
func MakeInt64SlicePtr(values ...*int64) int64SlicePtr {
	newSlice := int64SlicePtr(values)
	return newSlice
}
func (slice int64SlicePtr) MapPtr(functors ...int64FunctorForMapPtr) int64SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt64Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64Slice) Filter(functors ...int64FunctorForFilter) int64Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt64(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64SlicePtr) FilterPtr(functors ...int64FunctorForFilterPtr) int64SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt64Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64Slice) Remove(functors ...int64FunctorForFilter) int64Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt64(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64SlicePtr) RemovePtr(functors ...int64FunctorForFilterPtr) int64SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt64Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64Slice) DropWhile(functors ...int64FunctorForFilter) int64Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt64(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64SlicePtr) DropWhilePtr(functors ...int64FunctorForFilterPtr) int64SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt64Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64Slice) Reverse() int64Slice {
	return ReverseInts64(slice)
}
func (slice int64SlicePtr) ReversePtr() int64SlicePtr {
	return ReverseInts64Ptr(slice)
}
func (slice int64Slice) Distinct() int64Slice {
	return DistinctInt64(slice)
}
func (slice int64SlicePtr) DistinctPtr() int64SlicePtr {
	return DistinctInt64Ptr(slice)
}
func (slice int64Slice) TakeWhile(functors ...int64FunctorForFilter) int64Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt64(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int64SlicePtr) TakeWhilePtr(functors ...int64FunctorForFilterPtr) int64SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt64Ptr(f, tmpSlice)
	}
	return tmpSlice
}
type int32Slice []int32
type int32FunctorForMap func(int32) int32
type int32FunctorForFilter func(int32) bool
type int32SlicePtr []*int32
type int32FunctorForMapPtr func(*int32) *int32
type int32FunctorForFilterPtr func(*int32) bool
func MakeInt32Slice(values ...int32) int32Slice {
	newSlice := int32Slice(values)
	return newSlice
}
func (slice int32Slice) Map(functors ...int32FunctorForMap) int32Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt32(f, tmpSlice)
	}
	return tmpSlice
}
func MakeInt32SlicePtr(values ...*int32) int32SlicePtr {
	newSlice := int32SlicePtr(values)
	return newSlice
}
func (slice int32SlicePtr) MapPtr(functors ...int32FunctorForMapPtr) int32SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt32Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32Slice) Filter(functors ...int32FunctorForFilter) int32Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt32(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32SlicePtr) FilterPtr(functors ...int32FunctorForFilterPtr) int32SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt32Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32Slice) Remove(functors ...int32FunctorForFilter) int32Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt32(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32SlicePtr) RemovePtr(functors ...int32FunctorForFilterPtr) int32SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt32Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32Slice) DropWhile(functors ...int32FunctorForFilter) int32Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt32(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32SlicePtr) DropWhilePtr(functors ...int32FunctorForFilterPtr) int32SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt32Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32Slice) Reverse() int32Slice {
	return ReverseInts32(slice)
}
func (slice int32SlicePtr) ReversePtr() int32SlicePtr {
	return ReverseInts32Ptr(slice)
}
func (slice int32Slice) Distinct() int32Slice {
	return DistinctInt32(slice)
}
func (slice int32SlicePtr) DistinctPtr() int32SlicePtr {
	return DistinctInt32Ptr(slice)
}
func (slice int32Slice) TakeWhile(functors ...int32FunctorForFilter) int32Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt32(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int32SlicePtr) TakeWhilePtr(functors ...int32FunctorForFilterPtr) int32SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt32Ptr(f, tmpSlice)
	}
	return tmpSlice
}
type int16Slice []int16
type int16FunctorForMap func(int16) int16
type int16FunctorForFilter func(int16) bool
type int16SlicePtr []*int16
type int16FunctorForMapPtr func(*int16) *int16
type int16FunctorForFilterPtr func(*int16) bool
func MakeInt16Slice(values ...int16) int16Slice {
	newSlice := int16Slice(values)
	return newSlice
}
func (slice int16Slice) Map(functors ...int16FunctorForMap) int16Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt16(f, tmpSlice)
	}
	return tmpSlice
}
func MakeInt16SlicePtr(values ...*int16) int16SlicePtr {
	newSlice := int16SlicePtr(values)
	return newSlice
}
func (slice int16SlicePtr) MapPtr(functors ...int16FunctorForMapPtr) int16SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = MapInt16Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16Slice) Filter(functors ...int16FunctorForFilter) int16Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt16(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16SlicePtr) FilterPtr(functors ...int16FunctorForFilterPtr) int16SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = FilterInt16Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16Slice) Remove(functors ...int16FunctorForFilter) int16Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt16(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16SlicePtr) RemovePtr(functors ...int16FunctorForFilterPtr) int16SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = RemoveInt16Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16Slice) DropWhile(functors ...int16FunctorForFilter) int16Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt16(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16SlicePtr) DropWhilePtr(functors ...int16FunctorForFilterPtr) int16SlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = DropWhileInt16Ptr(f, tmpSlice)
	}
	return tmpSlice
}
func (slice int16Slice) Reverse() int16Slice {
	return ReverseInts16(slice)
}
func (slice int16SlicePtr) ReversePtr() int16SlicePtr {
	return ReverseInts16Ptr(slice)
}
func (slice int16Slice) Distinct() int16Slice {
	return DistinctInt16(slice)
}
func (slice int16SlicePtr) DistinctPtr() int16SlicePtr {
	return DistinctInt16Ptr(slice)
}
func (slice int16Slice) TakeWhile(functors ...int16FunctorForFilter) int16Slice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhileInt16(f, tmpSlice)
	}
	return tmpSlice
}