libstdc++: insert_fn_imps.hpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41#ifdef PB_DS_CLASS_C_DEC

42

43PB_DS_CLASS_T_DEC

45PB_DS_CLASS_C_DEC::

46insert(const_reference r_value)

47{

48 PB_DS_ASSERT_VALID((*this))

49 std::pair<point_iterator, bool> ins_pair = insert_leaf_imp(r_value);

50 ins_pair.first.m_p_nd->m_special = false;

51 PB_DS_ASSERT_VALID((*this))

52 splay(ins_pair.first.m_p_nd);

53 PB_DS_ASSERT_VALID((*this))

54 return ins_pair;

55}

56

57PB_DS_CLASS_T_DEC

58inline std::pair<typename PB_DS_CLASS_C_DEC::point_iterator, bool>

59PB_DS_CLASS_C_DEC::

60insert_leaf_imp(const_reference r_value)

61{

62 _GLIBCXX_DEBUG_ONLY(base_type::structure_only_assert_valid(__FILE__,

63 __LINE__);)

64 if (base_type::m_size == 0)

65 return std::make_pair(base_type::insert_imp_empty(r_value), true);

66

67 node_pointer p_nd = base_type::m_p_head->m_p_parent;

68 node_pointer p_pot = base_type::m_p_head;

69

70 while (p_nd != 0)

71 if (!Cmp_Fn::operator()(PB_DS_V2F(p_nd->m_value), PB_DS_V2F(r_value)))

72 {

73 if (!Cmp_Fn::operator()(PB_DS_V2F(r_value), PB_DS_V2F(p_nd->m_value)))

74 {

75 return std::make_pair(point_iterator(p_nd), false);

76 }

77 p_pot = p_nd;

78 p_nd = p_nd->m_p_left;

79 }

80 else

81 p_nd = p_nd->m_p_right;

82

83 if (p_pot == base_type::m_p_head)

84 return std::make_pair(base_type::insert_leaf_new(r_value, base_type::m_p_head->m_p_right, false), true);

85

86 PB_DS_CHECK_KEY_DOES_NOT_EXIST(PB_DS_V2F(r_value))

87

88 p_nd = p_pot->m_p_left;

89 if (p_nd == 0)

90 return (std::make_pair(base_type::insert_leaf_new(r_value, p_pot, true), true));

91

92 while (p_nd->m_p_right != 0)

93 p_nd = p_nd->m_p_right;

94

95 return std::make_pair(this->insert_leaf_new(r_value, p_nd, false), true);

96}

97#endif

ISO C++ entities toplevel namespace is std.

Struct holding two objects of arbitrary type.