public GroupState copy()
        {
            GroupState state;

            if (_freeList != null)
            {
                state           = _freeList;
                _freeList       = _freeList._freeList;
                state._freeList = null;

                state._group.clear();
                state._group.add(_group);

                for (int i = 0; i < _set.length; i++)
                {
                    state._set[i] = _set[i];
                }
            }
            else
            {
                state = new GroupState(this);
            }

            return(state);
        }
 public void free(GroupState state)
 {
     if (state != null && state != this)
     {
         state._freeList = _freeList;
         _freeList       = state;
     }
 }
        private GroupState(GroupState src)
        {
            _set   = new long[src._set.length];
            _group = new IntArray();
            _group.add(src._group);

            for (int i = 0; i < src._set.length; i++)
            {
                _set[i] = src._set[i];
            }
        }