func (slice employeeSlicePtr) TakeWhilePtr(functors ...employeeFunctorForFilterPtr) employeeSlicePtr {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhilePtr(f, tmpSlice)
	}
	return tmpSlice
}
TakeWhilePtr  - Returns a new list based on predicate function. It returns new list once condition fails.
package employee
import _ "reflect" 
import "sort" 
import "sync"
import "time"
import "github.com/logic-building/functional-go/fp" 
func Map(f func(Employee) Employee, list []Employee) []Employee {
	if f == nil {
		return []Employee{}
	}
	newList := make([]Employee, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapPtr(f func(*Employee) *Employee, list []*Employee) []*Employee {
	if f == nil {
		return []*Employee{}
	}
	newList := make([]*Employee, len(list))
	for i, v := range list {
		newList[i] = f(v)
	}
	return newList
}
func MapPtrErr(f func(*Employee) (*Employee, error), list []*Employee) ([]*Employee, error) {
	if f == nil {
		return []*Employee{}, nil
	}
	newList := make([]*Employee, len(list))
	for i, v := range list {
		var err error
		newList[i], err = f(v)
		if err != nil {
			return nil, err
		}
	}
	return newList, nil
}
func MapErr(f func(Employee) (Employee, error), list []Employee) ([]Employee, error) {
	if f == nil {
		return []Employee{}, nil
	}
	newList := make([]Employee, len(list))
	for i, v := range list {
		var err error
		newList[i], err = f(v)
		if err != nil {
			return nil, err
		}
	}
	return newList, nil
}
func Filter(f func(Employee) bool, list []Employee) []Employee {
	if f == nil {
		return []Employee{}
	}
	var newList []Employee
	for _, v := range list {
		if f(v) {
			newList = append(newList, v)
		}
	}
	return newList
}
func FilterPtr(f func(*Employee) bool, list []*Employee) []*Employee {
	if f == nil {
		return []*Employee{}
	}
	var newList []*Employee
	for _, v := range list {
		if f(v) {
			newList = append(newList, v)
		}
	}
	return newList
}
func FilterPtrErr(f func(*Employee) (bool, error), list []*Employee) ([]*Employee, error) {
	if f == nil {
		return []*Employee{}, nil
	}
	var newList []*Employee
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if r {
			newList = append(newList, v)
		}
	}
	return newList, nil
}
func FilterErr(f func(Employee) (bool, error), list []Employee) ([]Employee, error) {
	if f == nil {
		return []Employee{}, nil
	}
	var newList []Employee
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if r {
			newList = append(newList, v)
		}
	}
	return newList, nil
}
func Remove(f func(Employee) bool, list []Employee) []Employee {
	if f == nil {
		return []Employee{}
	}
	var newList []Employee
	for _, v := range list {
		if !f(v) {
			newList = append(newList, v)
		}
	}
	return newList
}
func RemovePtr(f func(*Employee) bool, list []*Employee) []*Employee {
	if f == nil {
		return []*Employee{}
	}
	var newList []*Employee
	for _, v := range list {
		if !f(v) {
			newList = append(newList, v)
		}
	}
	return newList
}
func RemovePtrErr(f func(*Employee) (bool, error), list []*Employee) ([]*Employee, error) {
	if f == nil {
		return []*Employee{}, nil
	}
	var newList []*Employee
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if !r {
			newList = append(newList, v)
		}
	}
	return newList, nil
}
func RemoveErr(f func(Employee) (bool, error), list []Employee) ([]Employee, error) {
	if f == nil {
		return []Employee{}, nil
	}
	var newList []Employee
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if !r {
			newList = append(newList, v)
		}
	}
	return newList, nil
}
func Some(f func(Employee) bool, list []Employee) bool {
	if f == nil {
		return false
	}
	for _, v := range list {
		if f(v) {
			return true
		}
	}
	return false
}
func SomePtr(f func(*Employee) bool, list []*Employee) bool {
	if f == nil {
		return false
	}
	for _, v := range list {
		if f(v) {
			return true
		}
	}
	return false
}
func SomePtrErr(f func(*Employee) (bool, error), list []*Employee) (bool, error) {
	if f == nil {
		return false, nil
	}
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return false, err
		}
		if r {
			return true, nil
		}
	}
	return false, nil
}
func SomeErr(f func(Employee) (bool, error), list []Employee) (bool, error) {
	if f == nil {
		return false, nil
	}
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return false, err
		}
		if r {
			return true, nil
		}
	}
	return false, nil
}
func Every(f func(Employee) bool, list []Employee) bool {
	if f == nil || len(list) == 0 {
		return false
	}
	for _, v := range list {
		if !f(v) {
			return false
		}
	}
	return true
}
func EveryPtr(f func(*Employee) bool, list []*Employee) bool {
	if f == nil || len(list) == 0 {
		return false
	}
	for _, v := range list {
		if !f(v) {
			return false
		}
	}
	return true
}
func EveryPtrErr(f func(*Employee) (bool, error), list []*Employee) (bool, error) {
	if f == nil || len(list) == 0 {
		return false, nil
	}
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return false, err
		}
		if !r {
			return false, nil
		}
	}
	return true, nil
}
func EveryErr(f func(Employee) (bool, error), list []Employee) (bool, error) {
	if f == nil || len(list) == 0 {
		return false, nil
	}
	for _, v := range list {
		r, err := f(v)
		if err != nil {
			return false, err
		}
		if !r {
			return false, nil
		}
	}
	return true, nil
}
func DropWhile(f func(Employee) bool, list []Employee) []Employee {
	if f == nil {
		return []Employee{}
	}
	var newList []Employee
	for i, v := range list {
		if !f(v) {
			listLen := len(list)
			newList = make([]Employee, listLen-i)
			j := 0
			for i < listLen {
				newList[j] = list[i]
				i++
				j++
			}
			return newList
		}
	}
	return newList
}
func DropWhilePtr(f func(*Employee) bool, list []*Employee) []*Employee {
	if f == nil {
		return []*Employee{}
	}
	var newList []*Employee
	for i, v := range list {
		if !f(v) {
			listLen := len(list)
			newList = make([]*Employee, listLen-i)
			j := 0
			for i < listLen {
				newList[j] = list[i]
				i++
				j++
			}
			return newList
		}
	}
	return newList
}
func DropWhilePtrErr(f func(*Employee) (bool, error), list []*Employee) ([]*Employee, error) {
	if f == nil {
		return []*Employee{}, nil
	}
	var newList []*Employee
	for i, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if !r {
			listLen := len(list)
			newList = make([]*Employee, listLen-i)
			j := 0
			for i < listLen {
				newList[j] = list[i]
				i++
				j++
			}
			return newList, nil
		}
	}
	return newList, nil
}
func DropWhileErr(f func(Employee) (bool, error), list []Employee) ([]Employee, error) {
	if f == nil {
		return []Employee{}, nil
	}
	var newList []Employee
	for i, v := range list {
		r, err := f(v)
		if err != nil {
			return nil, err
		}
		if !r {
			listLen := len(list)
			newList = make([]Employee, listLen-i)
			j := 0
			for i < listLen {
				newList[j] = list[i]
				i++
				j++
			}
			return newList, nil
		}
	}
	return newList, nil
}
func TakeWhile(f func(Employee) bool, list []Employee) []Employee {
	if f == nil {
		return []Employee{}
	}
	var newList []Employee
	for _, v := range list {
		if !f(v) {
			return newList
		}
		newList = append(newList, v)
	}
	return newList
}
func (slice employeeSlice) TakeWhile(functors ...employeeFunctorForFilter) employeeSlice {
	tmpSlice := slice
	for _, f := range functors {
		if f == nil {
			continue
		}
		tmpSlice = TakeWhile(f, tmpSlice)
	}
	return tmpSlice
}
func TakeWhilePtr(f func(*Employee) bool, list []*Employee) []*Employee {
	if f == nil {
		return []*Employee{}
	}
	var newList []*Employee
	for _, v := range list {
		if !f(v) {
			return newList
		}
		newList = append(newList, v)
	}
	return newList
}