Viewing contents of file '../idllib/ssw/allpro/array_xor.pro'
;+
; Project : SOHO - CDS
;
; Name : ARRAY_XOR()
;
; Purpose : Returns the XOR elements of two arrays.
;
; Explanation : Given 2 arrays it returns an array containing the elements
; that are in either array but not both.
;
; Use : IDL> x = [0,1,2,3,4,8]
; IDL> y = [2,3,4,9]
; IDL> print,array_xor(x,y) --> 0 1 8 9
;
; Inputs : x,y - two arrays (any type ecept complex and structure)
;
; Opt. Inputs : None
;
; Outputs : Function returns exclusive array
;
; Opt. Outputs: None
;
; Keywords : None
;
; Calls : FIND_COMMON, REST_MASK
;
; Common : None
;
; Restrictions: Input arrays must be same type
;
; Side effects: None
;
; Category : Util
;
; Prev. Hist. : None
;
; Written : C D Pike, RAL. 22-Apr-97
;
; Modified :
;
; Version : Version 1, 22-Apr-97
;-
function array_xor,x,y
n1 = find_common(x,y)
n2 = find_common(y,x)
if datatype(x) eq 'STR' then begin
if n1(0) ge 0 and n2(0) ge 0 then begin
xrm = rest_mask(x,find_common(y,x))
yrm = rest_mask(y,find_common(x,y))
if xrm(0) gt -1 then outx = x(xrm) else outx = ''
if yrm(0) gt -1 then outy = y(yrm) else outy = ''
out = [outx,outy]
out = out(where(out ne ''))
out = out(rem_dup(out))
return,out
endif else begin
return,[x,y]
endelse
endif else begin
if n1(0) ge 0 and n2(0) ge 0 then begin
xrm = rest_mask(x,find_common(y,x))
yrm = rest_mask(y,find_common(x,y))
if xrm(0) gt -1 then outx = x(xrm)
if yrm(0) gt -1 then outy = y(yrm)
case 1 of
n_elements(outx) gt 0 and n_elements(outy) gt 0: out = [outx,outy]
n_elements(outx) gt 0: out = outx
n_elements(outy) gt 0: out = outy
else: help,outx,outy
endcase
out = out(rem_dup(out))
return,out
endif else begin
return,[x,y]
endelse
endelse
end