Changeset 3202

Show
Ignore:
Timestamp:
2007-08-26 16:27:02 (1 year ago)
Author:
shans
Message:

renamed "sort" function in page.ml to "to_streams".

Added sort function in page.ml that bubble-sorts a page stream to get
time values into correct order.

Implementation of stream sorting script (oogg_sort_stream.ml)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • oogg/trunk/Makefile

    r3194 r3202  
    11PROGRAMS = oogg_dump_pages oogg_copy_file oogg_rip oogg_check_checksums \ 
    2            oogg_info oogg_dump_packets 
     2           oogg_info oogg_dump_packets oogg_sort_stream 
    33LIBINCS = -I +extlib 
    44LIBS = unix.cmxa extLib.cmxa oogg.cmxa  
     
    2727oogg_rip: oogg.cmxa oogg_rip.ml 
    2828        ocamlopt $(PROF) -o oogg_rip $(LIBINCS) $(LIBS) oogg_rip.ml 
     29 
     30oogg_sort_stream: oogg.cmxa oogg_sort_stream.ml 
     31        ocamlopt $(PROF) -o oogg_sort_stream $(LIBINCS) $(LIBS) \ 
     32                                                        oogg_sort_stream.ml 
    2933         
    3034oogg.cmxa: types.cmx crc.cmx file.cmx granules.cmx streamSort.cmx page.cmx \ 
  • oogg/trunk/oogg_info.ml

    r3196 r3202  
    44let s = File.to_stream f 0;; 
    55let pages = Page.to_pageStream s;; 
    6 let sorted_pages = Page.sort pages;; 
     6let sorted_pages = Page.to_streams pages;; 
    77 
    88let rec print_sorted_pages l = match l with 
  • oogg/trunk/packet.ml

    r3197 r3202  
    4141    | [< >] -> [< >] in  
    4242  _tps pstream;; 
    43  
     43(* 
    4444let create_fresh_page packet =  
    4545  let raw_page =  
     
    8686      | [< >] -> [< flush_page !context >] in 
    8787  _ptp ();; 
     88*) 
    8889 
    8990type reconstruct_context = { 
  • oogg/trunk/page.ml

    r3196 r3202  
    272272 
    273273module RawPageSort = StreamSort.StreamSort (RawPageInput);; 
    274 let sort_raw = RawPageSort.sort;; 
     274let to_streams_raw = RawPageSort.sort;; 
    275275 
    276276module PageInput = 
     
    286286 
    287287module PageSort = StreamSort.StreamSort (PageInput);; 
    288 let sort = PageSort.sort;; 
     288let to_streams = PageSort.sort;; 
     289 
     290let _cmp a b =  
     291  if a = None then true 
     292  else if b = None then true 
     293  else a >= b;; 
     294 
     295let _p t = match t with 
     296  | None -> "None" 
     297  | Some t -> "Some " ^ string_of_float t 
     298 
     299let sort pageStream = 
     300  let sorted = ref false in 
     301  let lookaside = ref None in 
     302  let last = ref (Some 0.0) in 
     303  let rec _sort pageStream = match pageStream with parser 
     304    | [< 'page >] ->  
     305      ( 
     306        if !last > page.time then sorted := false; 
     307        match !lookaside with 
     308          | None -> lookaside := Some page; [< _sort pageStream >] 
     309          | Some stored ->  
     310            ( 
     311              if _cmp page.time stored.time 
     312              then  
     313                ( 
     314                  lookaside := Some page;  
     315                  last := stored.time ;  
     316                  [< 'stored ; _sort pageStream >] 
     317                ) 
     318              else  
     319                ( 
     320                  last := page.time ;  
     321                  [< 'page ; _sort pageStream >] 
     322                ) 
     323            ) 
     324      ) 
     325    | [< >] ->  
     326        ( match !lookaside with 
     327          | None -> [< >] 
     328          | Some stored -> [< 'stored >] ) in 
     329  let ps = ref pageStream in 
     330  while not !sorted do ( 
     331    sorted := true; 
     332    ps := _sort !ps; 
     333  ) done; 
     334  !ps;; 
  • oogg/trunk/page.mli

    r3196 r3202  
    1515val identify_bos : Types.rawPage -> Types.mediaType;; 
    1616 
    17 val sort_raw : Types.rawPageStream ->  
     17val to_streams_raw : Types.rawPageStream ->  
    1818            (Types.serialNo * Types.rawPageStream) list;; 
    1919 
    20 val sort : Types.pageStream -> (Types.serialNo * Types.pageStream) list;; 
     20val to_streams : Types.pageStream -> (Types.serialNo * Types.pageStream) list;; 
     21 
     22val sort : Types.pageStream -> Types.pageStream;;