📄 size_struct.pro
字号:
function size_struct, structure, struct, Max_Field_Size, PRINT=print ;+; NAME:; SIZE_STRUCT; PURPOSE:; Obtain the size in bytes of an IDL structure definition. ; EXPLANATION:; For most applications this function is superceded by use ; of the /LENGTH keyword to the intrinsic N_TAGS function ; introduced in IDL V2.3.0;; CALLING SEQUENCE:; bytes = size_struct( structure ); examples:; print, size_struct( "fdq_sdf" ); INPUTS:; structure = a structure variable or; a string giving the structure name; as known by IDL (help,/struct,variable).; /PRINT = to print all sub structure sizes.;; inputs/outputs used recursively:; struct = the structure VARIABLE currently analyzed.; Max_Field_Size = size of the largest field found in structure.; RESULT:; Function returns the total size in bytes of a structure element.; PROCEDURE:; Strategy is to call size_struct recursively if; structure contains sub-structures.; Otherwise just add up the field sizes.;; MODIFICATION HISTORY:; written 1990 Frank Varosi STX @ NASA/GSFC (using align_struct).; Converted to IDL V5.0 W. Landsman September 1997;- if N_tags( struct ) LE 0 then begin s = size( structure ) CASE s[s[0]+1] OF 7: BEGIN struct_name = strupcase( structure ) com = "struct = replicate( {" + struct_name + "}, 1 )" status = execute( com ) if NOT status then begin message," unable to define structure: " + $ struct_name,/CONTIN return,(-1) endif END 8: BEGIN struct_name = "?" struct = structure[0] END else: BEGIN message,"specify STRUCTURE VARIABLE or NAME",/CONTIN return,(-1) END ENDCASE if keyword_set( print ) then $ print," Structure Name Size Fields Max Field Size" endif else begin s = size( structure ) if ( s[s[0]+1] EQ 7 ) then struct_name = structure $ else struct_name = "?" endelse Tags = Tag_Names( struct ) Ntag = N_tags( struct ) Max_Field_Size = 1 struct_size = 0 for t=0,Ntag-1 do begin s = size( struct.(t) ) N_elem = s[ s[0]+2 ] Field_Type = s[ s[0]+1 ] if (Field_Type EQ 8) then begin ST_siz = size_struct( Tags[t], struct.(t), MaxF_siz, $ PRINT=print ) struct_size = struct_size + ST_siz * N_elem Max_Field_Size = Max_Field_Size > MaxF_siz endif else begin CASE Field_Type OF 1: Field_Size = 1 2: Field_Size = 2 3: Field_Size = 4 4: Field_Size = 4 5: Field_Size = 8 6: Field_Size = 8 else: Field_Size = 0 ENDCASE struct_size = struct_size + Field_Size * N_elem Max_Field_Size = Max_Field_Size > Field_Size endelse endfor;write out the sizes of structure(s) : if keyword_set( print ) then $ print, struct_name, struct_size, Ntag, Max_Field_Size, $ FORM="(A15,I8,I8,I8)"return, struct_sizeend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -