#ifndef _DIVEPLANNER_DIVEPLANNER_HPP_ #define _DIVEPLANNER_DIVEPLANNER_HPP_ #include #include #include #include class DivePlanner { public: enum Group{GroupA,GroupB,GroupC,GroupD,GroupE,GroupF,GroupG,GroupH,GroupI,GroupJ, GroupK,GroupL,GroupM,GroupN,GroupO,GroupP,GroupQ,GroupR,GroupS,GroupT, GroupU,GroupV,GroupW,GroupX,GroupY,GroupZ,GroupNone}; enum Depth{Depth35=0,Depth40,Depth50,Depth60,Depth70,Depth80,Depth90,Depth100,Depth110,Depth120,Depth130,Depth140,DepthNone}; Group getGroup(int depth,int minutes); Group getGroup(const SurfaceTime &surfaceTime,Group pressureGroup); void dumpTable(void); private: typedef SurfaceInterval SI; typedef SurfaceTime ST; typedef TimeInterval TI; Depth getDepth(int actualDepth); static int smGroupTable[][12]; static SI smSurfaceIntervalTable[][26]; static TI smTimeIntervalTable[][26]; }; int DivePlanner::smGroupTable[][12]={{10,9,7,6,5,4,4,3,3,3,3,4}, {19,16,13,11,9,8,7,6,6,5,5,4}, {25,22,17,14,12,10,9,8,7,6,6,5}, {29,25,19,16,13,11,10,9,8,7,7,6}, {32,27,21,17,15,13,11,10,9,8,8,7}, {36,31,24,19,16,14,12,11,10,9,8,8}, {40,34,26,21,18,15,13,12,11,10,9,-1}, {44,37,28,23,19,17,15,13,12,11,10,-1}, {48,40,31,25,21,18,16,14,13,12,-1,-1}, {52,44,33,27,22,19,17,15,14,12,-1,-1}, {57,48,36,29,24,21,18,16,14,13,-1,-1}, {62,51,39,31,26,22,19,17,15,-1,-1,-1}, {67,55,41,33,27,23,21,18,16,-1,-1,-1}, {73,60,44,35,29,25,22,19,-1,-1,-1,-1}, {79,64,47,37,31,26,23,20,-1,-1,-1,-1}, {85,69,50,39,33,28,24,-1,-1,-1,-1,-1}, {92,74,53,42,35,29,25,-1,-1,-1,-1,-1}, {100,79,57,44,36,30,-1,-1,-1,-1,-1,-1}, {108,85,60,47,38,-1,-1,-1,-1,-1,-1,-1}, {117,91,63,49,40,-1,-1,-1,-1,-1,-1,-1}, {127,97,67,52,-1,-1,-1,-1,-1,-1,-1,-1}, {139,104,71,54,-1,-1,-1,-1,-1,-1,-1,-1}, {152,111,75,55,-1,-1,-1,-1,-1,-1,-1,-1}, {168,120,80,-1,-1,-1,-1,-1,-1,-1,-1,-1}, {188,129,-1,-1,-1,-1,-1,-1,-1,-1,-1}, {205,140,-1,-1,-1,-1,-1,-1,-1,-1,-1}}; DivePlanner::SI DivePlanner::smSurfaceIntervalTable[][26]= {{SI(ST(0,0),ST(3,0)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(0,48),ST(3,48)),SI(ST(0,0),ST(0,47)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,10),ST(4,10)),SI(ST(0,22),ST(1,9)),SI(ST(0,0),ST(0,21)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,19),ST(4,19)),SI(ST(0,31),ST(1,18)),SI(ST(0,9),ST(0,30)),SI(ST(0,0),ST(0,8)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,28),ST(4,28)),SI(ST(0,39),ST(1,27)),SI(ST(0,17),ST(0,38)),SI(ST(0,8),ST(0,16)),SI(ST(0,0),ST(0,7)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,35),ST(4,35)),SI(ST(0,47),ST(1,34)),SI(ST(0,25),ST(0,46)),SI(ST(0,16),ST(0,24)),SI(ST(0,8),ST(0,15)),SI(ST(0,0),ST(0,7)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,42),ST(4,42)),SI(ST(0,54),ST(1,41)),SI(ST(0,32),ST(0,53)),SI(ST(0,23),ST(0,31)),SI(ST(0,14),ST(0,22)),SI(ST(0,7),ST(0,13)),SI(ST(0,0),ST(0,6)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,48),ST(4,48)),SI(ST(1,0),ST(1,47)),SI(ST(0,38),ST(0,59)),SI(ST(0,29),ST(0,37)),SI(ST(0,21),ST(0,28)),SI(ST(0,13),ST(0,20)),SI(ST(0,6),ST(0,12)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(1,54),ST(4,54)),SI(ST(1,6),ST(1,53)),SI(ST(0,44),ST(1,5)),SI(ST(0,35),ST(0,43)),SI(ST(0,27),ST(0,34)),SI(ST(0,19),ST(0,26)),SI(ST(0,12),ST(0,18)),SI(ST(0,6),ST(0,11)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,0),ST(5,0)),SI(ST(1,12),ST(1,59)),SI(ST(0,50),ST(1,11)),SI(ST(0,41),ST(0,49)),SI(ST(0,32),ST(0,40)),SI(ST(0,25),ST(0,31)),SI(ST(0,18),ST(0,24)),SI(ST(0,12),ST(0,17)),SI(ST(0,6),ST(0,11)),SI(ST(0,0),ST(0,5)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,5),ST(5,5)),SI(ST(1,17),ST(2,4)),SI(ST(0,55),ST(1,16)),SI(ST(0,46),ST(0,54)),SI(ST(0,38),ST(0,45)),SI(ST(0,30),ST(0,37)),SI(ST(0,23),ST(0,29)),SI(ST(0,17),ST(0,22)),SI(ST(0,11),ST(0,16)),SI(ST(0,5),ST(0,10)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,10),ST(5,10)),SI(ST(1,22),ST(2,9)),SI(ST(1,0),ST(1,21)),SI(ST(0,51),ST(0,59)),SI(ST(0,43),ST(0,50)),SI(ST(0,35),ST(0,42)),SI(ST(0,28),ST(0,34)),SI(ST(0,22),ST(0,27)),SI(ST(0,16),ST(0,21)),SI(ST(0,10),ST(0,15)),SI(ST(0,5),ST(0,9)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,15),ST(5,15)),SI(ST(1,26),ST(2,14)),SI(ST(1,5),ST(1,25)),SI(ST(0,56),ST(1,4)),SI(ST(0,47),ST(0,55)),SI(ST(0,40),ST(0,46)),SI(ST(0,33),ST(0,39)),SI(ST(0,26),ST(0,32)),SI(ST(0,20),ST(0,25)),SI(ST(0,15),ST(0,19)),SI(ST(0,10),ST(0,14)),SI(ST(0,5),ST(0,9)),SI(ST(0,0),ST(0,4)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,19),ST(5,19)),SI(ST(1,31),ST(2,18)),SI(ST(1,9),ST(1,30)),SI(ST(1,0),ST(1,8)),SI(ST(0,52),ST(0,59)),SI(ST(0,44),ST(0,51)),SI(ST(0,37),ST(0,43)),SI(ST(0,31),ST(0,36)),SI(ST(0,25),ST(0,30)),SI(ST(0,19),ST(0,24)),SI(ST(0,14),ST(0,18)),SI(ST(0,9),ST(0,13)),SI(ST(0,4),ST(0,8)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,24),ST(5,24)),SI(ST(1,35),ST(2,23)),SI(ST(1,13),ST(1,34)),SI(ST(1,4),ST(1,12)),SI(ST(0,56),ST(1,3)),SI(ST(0,48),ST(0,55)),SI(ST(0,42),ST(0,47)),SI(ST(0,35),ST(0,41)),SI(ST(0,29),ST(0,34)),SI(ST(0,24),ST(0,28)),SI(ST(0,18),ST(0,23)),SI(ST(0,13),ST(0,17)),SI(ST(0,9),ST(0,12)),SI(ST(0,4),ST(0,8)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,28),ST(5,28)),SI(ST(1,39),ST(2,27)),SI(ST(1,17),ST(1,38)),SI(ST(1,8),ST(1,16)),SI(ST(1,0),ST(1,7)),SI(ST(0,52),ST(0,59)),SI(ST(0,46),ST(0,51)),SI(ST(0,39),ST(0,45)),SI(ST(0,33),ST(0,38)),SI(ST(0,28),ST(0,32)),SI(ST(0,22),ST(0,27)),SI(ST(0,17),ST(0,21)),SI(ST(0,13),ST(0,16)),SI(ST(0,8),ST(0,12)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,31),ST(5,31)),SI(ST(1,43),ST(2,30)),SI(ST(1,21),ST(1,42)),SI(ST(1,12),ST(1,20)),SI(ST(1,4),ST(1,11)),SI(ST(0,56),ST(1,3)),SI(ST(0,49),ST(0,55)),SI(ST(0,43),ST(0,48)),SI(ST(0,37),ST(0,42)),SI(ST(0,31),ST(0,36)),SI(ST(0,26),ST(0,30)),SI(ST(0,21),ST(0,25)),SI(ST(0,17),ST(0,20)),SI(ST(0,12),ST(0,16)),SI(ST(0,8),ST(0,11)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,35),ST(5,35)),SI(ST(1,47),ST(2,34)),SI(ST(1,25),ST(1,46)),SI(ST(1,16),ST(1,24)),SI(ST(1,8),ST(1,15)),SI(ST(1,0),ST(1,7)),SI(ST(0,53),ST(0,59)),SI(ST(0,47),ST(0,52)),SI(ST(0,41),ST(0,46)),SI(ST(0,35),ST(0,40)),SI(ST(0,30),ST(0,34)),SI(ST(0,25),ST(0,29)),SI(ST(0,20),ST(0,24)),SI(ST(0,16),ST(0,19)),SI(ST(0,12),ST(0,15)),SI(ST(0,8),ST(0,11)),SI(ST(0,4),ST(0,7)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,39),ST(5,39)),SI(ST(1,50),ST(2,38)),SI(ST(1,28),ST(1,49)),SI(ST(1,19),ST(1,27)),SI(ST(1,11),ST(1,18)),SI(ST(1,4),ST(1,10)),SI(ST(0,57),ST(1,3)),SI(ST(0,50),ST(0,56)),SI(ST(0,44),ST(0,49)),SI(ST(0,39),ST(0,43)),SI(ST(0,33),ST(0,38)),SI(ST(0,28),ST(0,32)),SI(ST(0,24),ST(0,27)),SI(ST(0,19),ST(0,23)),SI(ST(0,15),ST(0,18)),SI(ST(0,11),ST(0,14)),SI(ST(0,7),ST(0,10)),SI(ST(0,4),ST(0,6)),SI(ST(0,0),ST(0,3)),SI(),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,42),ST(5,42)),SI(ST(1,54),ST(2,41)),SI(ST(1,32),ST(1,53)),SI(ST(1,23),ST(1,31)),SI(ST(1,14),ST(1,22)),SI(ST(1,7),ST(1,13)),SI(ST(1,0),ST(1,6)),SI(ST(0,54),ST(0,59)),SI(ST(0,48),ST(0,53)),SI(ST(0,42),ST(0,47)),SI(ST(0,37),ST(0,41)),SI(ST(0,32),ST(0,36)),SI(ST(0,27),ST(0,31)),SI(ST(0,23),ST(0,26)),SI(ST(0,18),ST(0,22)),SI(ST(0,14),ST(0,17)),SI(ST(0,11),ST(0,13)),SI(ST(0,7),ST(0,10)),SI(ST(0,3),ST(0,6)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,45),ST(5,45)),SI(ST(1,57),ST(2,44)),SI(ST(1,35),ST(1,56)),SI(ST(1,26),ST(1,34)),SI(ST(1,18),ST(1,25)),SI(ST(1,10),ST(1,17)),SI(ST(1,3),ST(1,9)),SI(ST(0,57),ST(1,2)),SI(ST(0,51),ST(0,56)),SI(ST(0,45),ST(0,50)),SI(ST(0,40),ST(0,44)),SI(ST(0,35),ST(0,39)),SI(ST(0,30),ST(0,34)),SI(ST(0,26),ST(0,29)),SI(ST(0,22),ST(0,25)),SI(ST(0,18),ST(0,21)),SI(ST(0,14),ST(0,17)),SI(ST(0,10),ST(0,13)),SI(ST(0,7),ST(0,9)),SI(ST(0,3),ST(0,6)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI(),SI()}, {SI(ST(2,48),ST(5,48)),SI(ST(2,0),ST(2,47)),SI(ST(1,38),ST(1,59)),SI(ST(1,29),ST(1,37)),SI(ST(1,21),ST(1,28)),SI(ST(1,13),ST(1,20)),SI(ST(1,6),ST(1,12)),SI(ST(1,0),ST(1,5)),SI(ST(0,54),ST(0,59)),SI(ST(0,48),ST(0,53)),SI(ST(0,43),ST(0,47)),SI(ST(0,38),ST(0,42)),SI(ST(0,34),ST(0,37)),SI(ST(0,29),ST(0,33)),SI(ST(0,25),ST(0,28)),SI(ST(0,21),ST(0,24)),SI(ST(0,17),ST(0,20)),SI(ST(0,13),ST(0,16)),SI(ST(0,10),ST(0,12)),SI(ST(0,6),ST(0,9)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI(),SI()}, {SI(ST(2,51),ST(5,51)),SI(ST(2,3),ST(2,50)),SI(ST(1,41),ST(2,2)),SI(ST(1,32),ST(1,40)),SI(ST(1,24),ST(1,31)),SI(ST(1,16),ST(1,23)),SI(ST(1,9),ST(1,15)),SI(ST(1,3),ST(1,8)),SI(ST(0,57),ST(1,2)),SI(ST(0,51),ST(0,56)),SI(ST(0,46),ST(0,50)),SI(ST(0,41),ST(0,45)),SI(ST(0,37),ST(0,40)),SI(ST(0,32),ST(0,36)),SI(ST(0,28),ST(0,31)),SI(ST(0,24),ST(0,27)),SI(ST(0,20),ST(0,23)),SI(ST(0,16),ST(0,19)),SI(ST(0,13),ST(0,15)),SI(ST(0,9),ST(0,12)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI(),SI()}, {SI(ST(2,54),ST(5,54)),SI(ST(2,6),ST(2,53)),SI(ST(1,44),ST(2,5)),SI(ST(1,35),ST(1,43)),SI(ST(1,27),ST(1,34)),SI(ST(1,19),ST(1,26)),SI(ST(1,12),ST(1,18)),SI(ST(1,6),ST(1,11)),SI(ST(1,0),ST(1,5)),SI(ST(0,54),ST(0,59)),SI(ST(0,49),ST(0,53)),SI(ST(0,44),ST(0,48)),SI(ST(0,40),ST(0,43)),SI(ST(0,35),ST(0,39)),SI(ST(0,31),ST(0,34)),SI(ST(0,27),ST(0,30)),SI(ST(0,23),ST(0,26)),SI(ST(0,19),ST(0,22)),SI(ST(0,16),ST(0,18)),SI(ST(0,12),ST(0,15)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI(),SI()}, {SI(ST(2,57),ST(5,57)),SI(ST(2,9),ST(2,56)),SI(ST(1,47),ST(2,8)),SI(ST(1,38),ST(1,46)),SI(ST(1,30),ST(1,37)),SI(ST(1,22),ST(1,29)),SI(ST(1,15),ST(1,21)),SI(ST(1,9),ST(1,14)),SI(ST(1,3),ST(1,8)),SI(ST(0,57),ST(1,2)),SI(ST(0,52),ST(0,56)),SI(ST(0,47),ST(0,51)),SI(ST(0,42),ST(0,46)),SI(ST(0,38),ST(0,41)),SI(ST(0,34),ST(0,37)),SI(ST(0,30),ST(0,33)),SI(ST(0,26),ST(0,29)),SI(ST(0,22),ST(0,25)),SI(ST(0,19),ST(0,21)),SI(ST(0,15),ST(0,18)),SI(ST(0,12),ST(0,14)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2)),SI()}, {SI(ST(3,0),ST(6,0)),SI(ST(2,12),ST(2,59)),SI(ST(1,50),ST(2,11)),SI(ST(1,41),ST(1,49)),SI(ST(1,32),ST(1,40)),SI(ST(1,25),ST(1,31)),SI(ST(1,18),ST(1,24)),SI(ST(1,12),ST(1,17)),SI(ST(1,6),ST(1,11)),SI(ST(1,0),ST(1,5)),SI(ST(0,55),ST(0,59)),SI(ST(0,50),ST(0,54)),SI(ST(0,45),ST(0,49)),SI(ST(0,41),ST(0,44)),SI(ST(0,36),ST(0,40)),SI(ST(0,32),ST(0,35)),SI(ST(0,29),ST(0,31)),SI(ST(0,25),ST(0,28)),SI(ST(0,21),ST(0,24)),SI(ST(0,18),ST(0,20)),SI(ST(0,15),ST(0,17)),SI(ST(0,12),ST(0,14)),SI(ST(0,9),ST(0,11)),SI(ST(0,6),ST(0,8)),SI(ST(0,3),ST(0,5)),SI(ST(0,0),ST(0,2))} }; DivePlanner::TI DivePlanner::smTimeIntervalTable[][26]= { {TI(10,195),TI(19,186),TI(25,180),TI(29,176),TI(32,173),TI(36,169),TI(40,165),TI(44,161),TI(48,157),TI(52,153),TI(57,148),TI(62,143),TI(67,138),TI(73,132),TI(79,126),TI(85,120),TI(92,113),TI(100,105),TI(108,97),TI(117,88),TI(127,78),TI(139,66),TI(152,53),TI(168,37),TI(188,17),TI(205,0)}, {TI(9,131),TI(16,124),TI(22,118),TI(25,115),TI(27,113),TI(31,109),TI(34,106),TI(37,103),TI(40,100),TI(44,96),TI(48,92),TI(51,89),TI(55,85),TI(60,80),TI(64,76),TI(69,71),TI(74,66),TI(79,61),TI(85,55),TI(91,49),TI(97,43),TI(104,36),TI(111,29),TI(120,20),TI(129,11),TI(140,0)}, {TI(7,73),TI(13,67),TI(17,63),TI(19,61),TI(21,59),TI(24,56),TI(26,54),TI(28,52),TI(31,49),TI(33,47),TI(36,44),TI(38,42),TI(41,39),TI(44,36),TI(47,33),TI(50,30),TI(53,27),TI(57,23),TI(60,20),TI(63,17),TI(67,13),TI(71,9),TI(75,5),TI(80,0),TI(),TI()}, {TI(6,49),TI(11,44),TI(14,41),TI(16,39),TI(17,38),TI(19,36),TI(21,34),TI(23,32),TI(25,30),TI(27,28),TI(29,26),TI(31,24),TI(33,22),TI(35,20),TI(37,18),TI(39,16),TI(42,13),TI(44,11),TI(47,8),TI(49,6),TI(52,3),TI(54,1),TI(55,0),TI(),TI(),TI()}, {TI(5,35),TI(9,31),TI(12,28),TI(13,27),TI(15,25),TI(16,24),TI(18,22),TI(19,21),TI(21,19),TI(22,18),TI(24,16),TI(26,14),TI(27,13),TI(29,11),TI(31,9),TI(33,7),TI(34,6),TI(36,4),TI(38,2),TI(40,0),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(4,26),TI(8,22),TI(10,20),TI(11,19),TI(13,17),TI(14,16),TI(15,15),TI(17,13),TI(18,12),TI(19,11),TI(21,9),TI(22,8),TI(23,7),TI(25,5),TI(26,4),TI(28,2),TI(29,0),TI(30,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(4,21),TI(7,18),TI(9,16),TI(10,15),TI(11,14),TI(12,13),TI(13,12),TI(15,10),TI(16,9),TI(17,8),TI(18,7),TI(19,6),TI(21,4),TI(22,3),TI(23,2),TI(24,0),TI(25,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(3,17),TI(6,14),TI(8,12),TI(9,11),TI(10,10),TI(11,9),TI(12,8),TI(13,7),TI(14,6),TI(15,5),TI(16,4),TI(17,3),TI(18,2),TI(19,0),TI(20,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(3,13),TI(6,10),TI(7,9),TI(8,8),TI(9,7),TI(10,6),TI(11,5),TI(12,4),TI(13,3),TI(14,2),TI(14,2),TI(15,0),TI(16,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(3,10),TI(5,8),TI(6,7),TI(7,6),TI(8,5),TI(9,4),TI(10,3),TI(11,2),TI(12,0),TI(12,0),TI(13,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()}, {TI(3,7),TI(5,5),TI(6,4),TI(7,3),TI(8,0),TI(8,0),TI(9,0),TI(10,0),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI(),TI()} }; DivePlanner::Group DivePlanner::getGroup(int actualDepth,int actualMinutes) { Depth depth(getDepth(actualDepth)); Group group(GroupNone); if(DepthNone==depth)return GroupNone; for(int currGroup=GroupA;currGroup<=GroupZ;currGroup++) { if(actualMinutes<=smGroupTable[currGroup][depth]) { group=Group(currGroup); break; } } return group; } DivePlanner::Group DivePlanner::getGroup(const SurfaceTime &surfaceTime,Group pressureGroup) { if(GroupNone==pressureGroup)return GroupNone; for(int col=0;col<25;col++) { if(surfaceTime>=(smSurfaceIntervalTable[pressureGroup][col]).minTime()&& surfaceTime<=(smSurfaceIntervalTable[pressureGroup][col]).maxTime()) return Group(col); } return GroupNone; } DivePlanner::Depth DivePlanner::getDepth(int actualDepth) { if(actualDepth<=35)return Depth35; else if(actualDepth<=40)return Depth40; else if(actualDepth<=50)return Depth50; else if(actualDepth<=60)return Depth60; else if(actualDepth<=70)return Depth70; else if(actualDepth<=80)return Depth80; else if(actualDepth<=90)return Depth90; else if(actualDepth<=100)return Depth100; else if(actualDepth<=110)return Depth110; else if(actualDepth<=120)return Depth120; else if(actualDepth<=130)return Depth130; else if(actualDepth<=140)return Depth140; else return DepthNone; } void DivePlanner::dumpTable(void) { ::OutputDebugString("{\n"); for(int row=0;row<26;row++) { String strDebug; String strCol; for(int col=0;col<26;col++) { ::sprintf(strCol,"{{%d,%d},{%d,%d}},", (smSurfaceIntervalTable[row][col]).minTime().hours(), (smSurfaceIntervalTable[row][col]).minTime().minutes(), (smSurfaceIntervalTable[row][col]).maxTime().hours(), (smSurfaceIntervalTable[row][col]).maxTime().minutes()); strDebug+=strCol; } strDebug+="\n"; ::OutputDebugString(strDebug.str()); } ::OutputDebugString("};\n"); } #if 0 void DivePlanner::dumpTable(void) { String strDebug; strDebug.reserve(512); for(int row=0;row<26;row++) { for(int col=0;col<26;col++) { ::sprintf(strDebug,"smSurfaceIntervalTable[%d][%d]=SurfaceInterval(SurfaceTime(%d,%d),SurfaceTime(%d,%d));\n", row,col, (smSurfaceIntervalTable[row][col]).minTime().hours(), (smSurfaceIntervalTable[row][col]).minTime().minutes(), (smSurfaceIntervalTable[row][col]).maxTime().hours(), (smSurfaceIntervalTable[row][col]).maxTime().minutes()); ::OutputDebugString(strDebug); } } } #endif // static SI smSurfaceIntervalTable[][26]; //DivePlanner::SI DivePlanner::smSurfaceIntervalTable[][26]= #endif