diff --git a/assets/bomberman.ico b/assets/bomberman.ico deleted file mode 100644 index 5c308e79..00000000 Binary files a/assets/bomberman.ico and /dev/null differ diff --git a/assets/bombs/bomb_fire.b3d b/assets/bombs/bomb_fire.b3d new file mode 100644 index 00000000..e12db7a1 Binary files /dev/null and b/assets/bombs/bomb_fire.b3d differ diff --git a/assets/bombs/bomb_fire.png b/assets/bombs/bomb_fire.png new file mode 100644 index 00000000..728b0c22 Binary files /dev/null and b/assets/bombs/bomb_fire.png differ diff --git a/assets/bombs/bomb_fire_particle.png b/assets/bombs/bomb_fire_particle.png new file mode 100644 index 00000000..a6cab2af Binary files /dev/null and b/assets/bombs/bomb_fire_particle.png differ diff --git a/assets/bombs/bomb_normal.b3d b/assets/bombs/bomb_normal.b3d new file mode 100644 index 00000000..6915b3bf Binary files /dev/null and b/assets/bombs/bomb_normal.b3d differ diff --git a/assets/bombs/bomb_normal.png b/assets/bombs/bomb_normal.png new file mode 100644 index 00000000..5ef34b69 Binary files /dev/null and b/assets/bombs/bomb_normal.png differ diff --git a/assets/bombs/bomb_normal_particle.png b/assets/bombs/bomb_normal_particle.png new file mode 100644 index 00000000..b8b97f8e Binary files /dev/null and b/assets/bombs/bomb_normal_particle.png differ diff --git a/assets/bombs/bomb_pike.b3d b/assets/bombs/bomb_pike.b3d new file mode 100644 index 00000000..117bdfb1 Binary files /dev/null and b/assets/bombs/bomb_pike.b3d differ diff --git a/assets/bombs/bomb_pike.png b/assets/bombs/bomb_pike.png new file mode 100644 index 00000000..69b92359 Binary files /dev/null and b/assets/bombs/bomb_pike.png differ diff --git a/assets/bombs/bomb_plasma.b3d b/assets/bombs/bomb_plasma.b3d new file mode 100644 index 00000000..c363ffe8 Binary files /dev/null and b/assets/bombs/bomb_plasma.b3d differ diff --git a/assets/bombs/bomb_plasma.png b/assets/bombs/bomb_plasma.png new file mode 100644 index 00000000..9f0c478d Binary files /dev/null and b/assets/bombs/bomb_plasma.png differ diff --git a/assets/bombs/bomb_plasma_particle.png b/assets/bombs/bomb_plasma_particle.png new file mode 100644 index 00000000..c0164b27 Binary files /dev/null and b/assets/bombs/bomb_plasma_particle.png differ diff --git a/assets/bombs/bomb_sexy.b3d b/assets/bombs/bomb_sexy.b3d new file mode 100644 index 00000000..9cdfcb80 Binary files /dev/null and b/assets/bombs/bomb_sexy.b3d differ diff --git a/assets/bombs/bomb_sexy.png b/assets/bombs/bomb_sexy.png new file mode 100644 index 00000000..d921a28e Binary files /dev/null and b/assets/bombs/bomb_sexy.png differ diff --git a/assets/bombs/bomb_sexy_particle.png b/assets/bombs/bomb_sexy_particle.png new file mode 100644 index 00000000..6edc4bd9 Binary files /dev/null and b/assets/bombs/bomb_sexy_particle.png differ diff --git a/assets/bombs/bomb_water.b3d b/assets/bombs/bomb_water.b3d new file mode 100644 index 00000000..c16602f7 Binary files /dev/null and b/assets/bombs/bomb_water.b3d differ diff --git a/assets/bombs/bomb_water.png b/assets/bombs/bomb_water.png new file mode 100644 index 00000000..8f8fdfbc Binary files /dev/null and b/assets/bombs/bomb_water.png differ diff --git a/assets/bombs/bomb_water_particle.png b/assets/bombs/bomb_water_particle.png new file mode 100644 index 00000000..38b65267 Binary files /dev/null and b/assets/bombs/bomb_water_particle.png differ diff --git a/assets/bombs/sounds/bomb_fire.ogg b/assets/bombs/sounds/bomb_fire.ogg new file mode 100644 index 00000000..0722566f Binary files /dev/null and b/assets/bombs/sounds/bomb_fire.ogg differ diff --git a/assets/bombs/sounds/bomb_normal.ogg b/assets/bombs/sounds/bomb_normal.ogg new file mode 100644 index 00000000..fcb6054d Binary files /dev/null and b/assets/bombs/sounds/bomb_normal.ogg differ diff --git a/assets/bombs/sounds/bomb_placed.ogg b/assets/bombs/sounds/bomb_placed.ogg new file mode 100644 index 00000000..7a3a45e0 Binary files /dev/null and b/assets/bombs/sounds/bomb_placed.ogg differ diff --git a/assets/bombs/sounds/bomb_plasma.ogg b/assets/bombs/sounds/bomb_plasma.ogg new file mode 100644 index 00000000..1842d381 Binary files /dev/null and b/assets/bombs/sounds/bomb_plasma.ogg differ diff --git a/assets/bombs/sounds/bomb_sexy.ogg b/assets/bombs/sounds/bomb_sexy.ogg new file mode 100644 index 00000000..7aed46e1 Binary files /dev/null and b/assets/bombs/sounds/bomb_sexy.ogg differ diff --git a/assets/bombs/sounds/bomb_water.ogg b/assets/bombs/sounds/bomb_water.ogg new file mode 100644 index 00000000..3ef77dec Binary files /dev/null and b/assets/bombs/sounds/bomb_water.ogg differ diff --git a/assets/guy.iqm b/assets/guy/guy.iqm similarity index 100% rename from assets/guy.iqm rename to assets/guy/guy.iqm diff --git a/assets/guytex.png b/assets/guy/guytex.png similarity index 100% rename from assets/guytex.png rename to assets/guy/guytex.png diff --git a/assets/icon.png b/assets/icon.png new file mode 100644 index 00000000..21bfd6f2 Binary files /dev/null and b/assets/icon.png differ diff --git a/assets/items/item_bombup.b3d b/assets/items/item_bombup.b3d new file mode 100644 index 00000000..077e3440 Binary files /dev/null and b/assets/items/item_bombup.b3d differ diff --git a/assets/items/item_fireup.b3d b/assets/items/item_fireup.b3d new file mode 100644 index 00000000..aa4b6682 Binary files /dev/null and b/assets/items/item_fireup.b3d differ diff --git a/assets/items/item_speedup.b3d b/assets/items/item_speedup.b3d new file mode 100644 index 00000000..e80aa2df Binary files /dev/null and b/assets/items/item_speedup.b3d differ diff --git a/assets/items/item_wallpass.b3d b/assets/items/item_wallpass.b3d new file mode 100644 index 00000000..306081ee Binary files /dev/null and b/assets/items/item_wallpass.b3d differ diff --git a/assets/items/items.png b/assets/items/items.png new file mode 100644 index 00000000..a9abc255 Binary files /dev/null and b/assets/items/items.png differ diff --git a/assets/items/sound/bonus_bombup.ogg b/assets/items/sound/bonus_bombup.ogg new file mode 100644 index 00000000..72e76d4c Binary files /dev/null and b/assets/items/sound/bonus_bombup.ogg differ diff --git a/assets/items/sound/bonus_fireup.ogg b/assets/items/sound/bonus_fireup.ogg new file mode 100644 index 00000000..a8be41ac Binary files /dev/null and b/assets/items/sound/bonus_fireup.ogg differ diff --git a/assets/items/sound/bonus_speedup.ogg b/assets/items/sound/bonus_speedup.ogg new file mode 100644 index 00000000..625f87e5 Binary files /dev/null and b/assets/items/sound/bonus_speedup.ogg differ diff --git a/assets/items/sound/bonus_wallpass.ogg b/assets/items/sound/bonus_wallpass.ogg new file mode 100644 index 00000000..fa427f64 Binary files /dev/null and b/assets/items/sound/bonus_wallpass.ogg differ diff --git a/assets/musics/music_battle.ogg b/assets/musics/music_battle.ogg new file mode 100644 index 00000000..ddc30218 Binary files /dev/null and b/assets/musics/music_battle.ogg differ diff --git a/assets/musics/music_player_select.ogg b/assets/musics/music_player_select.ogg new file mode 100644 index 00000000..8889fd0b Binary files /dev/null and b/assets/musics/music_player_select.ogg differ diff --git a/assets/musics/music_result.ogg b/assets/musics/music_result.ogg new file mode 100644 index 00000000..1f82ad23 Binary files /dev/null and b/assets/musics/music_result.ogg differ diff --git a/assets/musics/music_title.ogg b/assets/musics/music_title.ogg new file mode 100644 index 00000000..86d6e7ee Binary files /dev/null and b/assets/musics/music_title.ogg differ diff --git a/assets/musics/music_win.ogg b/assets/musics/music_win.ogg new file mode 100644 index 00000000..eadd8eff Binary files /dev/null and b/assets/musics/music_win.ogg differ diff --git a/assets/player_black.png b/assets/player/black.png similarity index 100% rename from assets/player_black.png rename to assets/player/black.png diff --git a/assets/player_blue.png b/assets/player/blue.png similarity index 100% rename from assets/player_blue.png rename to assets/player/blue.png diff --git a/assets/player_pink.png b/assets/player/pink.png similarity index 100% rename from assets/player_pink.png rename to assets/player/pink.png diff --git a/assets/player.obj b/assets/player/player.obj similarity index 100% rename from assets/player.obj rename to assets/player/player.obj diff --git a/assets/player_red.png b/assets/player/red.png similarity index 100% rename from assets/player_red.png rename to assets/player/red.png diff --git a/assets/player/sounds/player_die.ogg b/assets/player/sounds/player_die.ogg new file mode 100644 index 00000000..b5822604 Binary files /dev/null and b/assets/player/sounds/player_die.ogg differ diff --git a/assets/player_white.png b/assets/player/white.png similarity index 100% rename from assets/player_white.png rename to assets/player/white.png diff --git a/assets/player_yellow.png b/assets/player/yellow.png similarity index 100% rename from assets/player_yellow.png rename to assets/player/yellow.png diff --git a/assets/sounds/crate_break.ogg b/assets/sounds/crate_break.ogg new file mode 100644 index 00000000..50c0bd13 Binary files /dev/null and b/assets/sounds/crate_break.ogg differ diff --git a/assets/wall/breakable_wall.obj b/assets/wall/breakable_wall.obj new file mode 100644 index 00000000..f742f102 --- /dev/null +++ b/assets/wall/breakable_wall.obj @@ -0,0 +1,338 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib case2.mtl +o Cube.002 +v 0.404250 -0.428000 -0.404250 +v 0.404250 -0.428000 0.404250 +v -0.404250 -0.428000 0.404250 +v -0.404250 -0.428000 -0.404250 +v -0.404250 0.436000 0.404250 +v 0.404250 0.436000 0.404250 +v 0.404250 0.436000 -0.404250 +v -0.404250 0.436000 -0.404250 +v 0.432000 0.408250 -0.404250 +v 0.432000 0.408250 0.404250 +v 0.432000 -0.400250 0.404250 +v 0.432000 -0.400250 -0.404250 +v 0.404250 -0.500000 -0.404250 +v -0.404250 -0.500000 -0.404250 +v -0.404250 -0.500000 -0.504000 +v 0.404250 -0.500000 -0.504000 +v -0.404250 -0.500000 0.404250 +v 0.404250 -0.500000 0.404250 +v 0.404250 -0.500000 0.504000 +v -0.404250 -0.500000 0.504000 +v -0.404250 0.508000 -0.404250 +v 0.404250 0.508000 -0.404250 +v 0.404250 0.508000 -0.504000 +v -0.404250 0.508000 -0.504000 +v 0.404250 0.508000 0.404250 +v -0.404250 0.508000 0.404250 +v -0.404250 0.508000 0.504000 +v 0.404250 0.508000 0.504000 +v 0.504000 0.408250 -0.404250 +v 0.504000 -0.400250 -0.404250 +v 0.504000 -0.400250 -0.504000 +v 0.504000 0.408250 -0.504000 +v 0.504000 -0.400250 0.404250 +v 0.504000 0.408250 0.404250 +v 0.504000 0.408250 0.504000 +v 0.504000 -0.400250 0.504000 +v -0.504000 0.408250 0.404250 +v -0.504000 -0.400250 0.404250 +v -0.504000 -0.400250 0.504000 +v -0.504000 0.408250 0.504000 +v -0.504000 -0.400250 -0.404250 +v -0.504000 0.408250 -0.404250 +v -0.504000 0.408250 -0.504000 +v -0.504000 -0.400250 -0.504000 +v 0.404250 0.408250 0.504000 +v -0.404250 0.408250 0.504000 +v -0.404250 -0.400250 0.504000 +v 0.404250 -0.400250 0.504000 +v 0.504000 0.508000 -0.404250 +v 0.504000 0.508000 0.404250 +v 0.504000 -0.500000 0.404250 +v 0.504000 -0.500000 -0.404250 +v 0.404250 0.408250 -0.504000 +v -0.404250 0.408250 -0.504000 +v -0.404250 -0.400250 -0.504000 +v 0.404250 -0.400250 -0.504000 +v -0.504000 0.508000 -0.404250 +v -0.504000 0.508000 0.404250 +v -0.504000 -0.500000 0.404250 +v -0.504000 -0.500000 -0.404250 +v 0.504000 0.508000 -0.504000 +v 0.504000 -0.500000 -0.504000 +v 0.504000 -0.500000 0.504000 +v 0.504000 0.508000 0.504000 +v -0.504000 0.508000 0.504000 +v -0.504000 -0.500000 0.504000 +v -0.504000 -0.500000 -0.504000 +v -0.504000 0.508000 -0.504000 +v -0.404250 0.408250 0.432000 +v 0.404250 0.408250 0.432000 +v -0.404250 -0.400250 0.432000 +v 0.404250 -0.400250 0.432000 +v 0.404250 0.408250 -0.432000 +v -0.404250 0.408250 -0.432000 +v 0.404250 -0.400250 -0.432000 +v -0.404250 -0.400250 -0.432000 +v -0.432000 0.408250 0.404250 +v -0.432000 -0.400250 0.404250 +v -0.432000 0.408250 -0.404250 +v -0.432000 -0.400250 -0.404250 +vt 0.287300 0.056300 +vt 0.287300 0.282400 +vt 0.061200 0.282400 +vt 0.061200 0.056300 +vt 0.621800 0.620900 +vt 0.395400 0.620900 +vt 0.395400 0.394400 +vt 0.621800 0.394400 +vt 0.299200 0.394400 +vt 0.299200 0.620900 +vt 0.072700 0.620900 +vt 0.072700 0.394400 +vt 0.287300 0.036100 +vt 0.061200 0.036100 +vt 0.061200 0.008200 +vt 0.287300 0.008200 +vt 0.061200 0.302500 +vt 0.287300 0.302500 +vt 0.287300 0.330400 +vt 0.061200 0.330400 +vt 0.621800 0.374200 +vt 0.395400 0.374200 +vt 0.395400 0.346300 +vt 0.621800 0.346300 +vt 0.395400 0.641000 +vt 0.621800 0.641000 +vt 0.621800 0.669000 +vt 0.395400 0.669000 +vt 0.299200 0.374200 +vt 0.072700 0.374200 +vt 0.072700 0.346300 +vt 0.299200 0.346300 +vt 0.072700 0.641000 +vt 0.299200 0.641000 +vt 0.299200 0.669000 +vt 0.072700 0.669000 +vt 0.718100 0.641000 +vt 0.944500 0.641000 +vt 0.944500 0.669000 +vt 0.718100 0.669000 +vt 0.944500 0.374200 +vt 0.718100 0.374200 +vt 0.718100 0.346300 +vt 0.944500 0.346300 +vt 0.395400 0.696900 +vt 0.621800 0.696900 +vt 0.621800 0.963700 +vt 0.621800 0.991700 +vt 0.395400 0.991700 +vt 0.395400 0.963700 +vt 0.347300 0.394400 +vt 0.347300 0.620900 +vt 0.319300 0.620900 +vt 0.319300 0.394400 +vt 0.052500 0.394400 +vt 0.052500 0.620900 +vt 0.024600 0.620600 +vt 0.024600 0.394300 +vt 0.395400 0.318300 +vt 0.621800 0.318300 +vt 0.621800 0.051500 +vt 0.395400 0.051500 +vt 0.395400 0.023600 +vt 0.621800 0.023600 +vt 0.670000 0.394400 +vt 0.697900 0.394400 +vt 0.697900 0.620900 +vt 0.670000 0.620900 +vt 0.992600 0.620900 +vt 0.964700 0.620900 +vt 0.964700 0.394400 +vt 0.992600 0.394400 +vt 0.319300 0.366500 +vt 0.347300 0.366500 +vt 0.052500 0.366500 +vt 0.024600 0.366500 +vt 0.052500 0.648800 +vt 0.024600 0.648800 +vt 0.319300 0.648800 +vt 0.347300 0.648800 +vt 0.697900 0.648800 +vt 0.670000 0.648800 +vt 0.964700 0.648800 +vt 0.992600 0.648800 +vt 0.964700 0.366500 +vt 0.992600 0.366500 +vt 0.697900 0.366500 +vt 0.670000 0.366500 +vt 0.335400 0.282600 +vt 0.307500 0.282400 +vt 0.307500 0.056300 +vt 0.335400 0.056300 +vt 0.013200 0.282400 +vt 0.013200 0.056300 +vt 0.041100 0.056300 +vt 0.041100 0.282400 +vt 0.642000 0.620900 +vt 0.642000 0.394400 +vt 0.375200 0.394400 +vt 0.375200 0.620900 +vt 0.670000 0.717100 +vt 0.670000 0.943500 +vt 0.642000 0.943500 +vt 0.642000 0.717100 +vt 0.347300 0.717100 +vt 0.375200 0.717100 +vt 0.375200 0.943500 +vt 0.347300 0.943500 +vt 0.347300 0.298200 +vt 0.347300 0.071700 +vt 0.375200 0.071700 +vt 0.375200 0.298200 +vt 0.670000 0.071700 +vt 0.670000 0.298200 +vt 0.642000 0.298200 +vt 0.642000 0.071700 +vt 0.315200 0.008200 +vt 0.315200 0.036100 +vt 0.033300 0.008200 +vt 0.033300 0.036100 +vt 0.033300 0.302500 +vt 0.033300 0.330400 +vt 0.315200 0.302500 +vt 0.315200 0.330400 +vt 0.649800 0.374200 +vt 0.649800 0.346300 +vt 0.367400 0.374200 +vt 0.367400 0.346300 +vt 0.367400 0.669000 +vt 0.367400 0.641000 +vt 0.649800 0.669000 +vt 0.649800 0.641000 +vt 0.649800 0.696900 +vt 0.367400 0.696900 +vt 0.367400 0.991700 +vt 0.367400 0.963700 +vt 0.649800 0.963700 +vt 0.649800 0.991700 +vt 0.367400 0.318300 +vt 0.649800 0.318300 +vt 0.649800 0.023600 +vt 0.649800 0.051500 +vt 0.367400 0.051500 +vt 0.367400 0.023600 +vt 0.621800 0.717100 +vt 0.395400 0.717100 +vt 0.621800 0.943500 +vt 0.395400 0.943500 +vt 0.395400 0.298200 +vt 0.621800 0.298200 +vt 0.395400 0.071700 +vt 0.621800 0.071700 +vt 0.718100 0.620900 +vt 0.944500 0.620900 +vt 0.718100 0.394400 +vt 0.944500 0.394400 +vn 0.0000 -1.0000 -0.0000 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 -0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +usemtl Cube.001 +s 1 +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 6/6/2 7/7/2 8/8/2 +f 9/9/3 10/10/3 11/11/3 12/12/3 +f 13/13/1 14/14/1 15/15/1 16/16/1 +f 17/17/1 18/18/1 19/19/1 20/20/1 +f 21/21/2 22/22/2 23/23/2 24/24/2 +f 25/25/2 26/26/2 27/27/2 28/28/2 +f 29/29/3 30/30/3 31/31/3 32/32/3 +f 33/33/3 34/34/3 35/35/3 36/36/3 +f 37/37/4 38/38/4 39/39/4 40/40/4 +f 41/41/4 42/42/4 43/43/4 44/44/4 +f 45/45/5 28/28/5 27/27/5 46/46/5 +f 47/47/5 20/48/5 19/49/5 48/50/5 +f 49/51/3 50/52/3 34/53/3 29/54/3 +f 30/55/3 33/56/3 51/57/3 52/58/3 +f 53/59/6 54/60/6 24/24/6 23/23/6 +f 55/61/6 56/62/6 16/63/6 15/64/6 +f 57/65/4 42/66/4 37/67/4 58/68/4 +f 59/69/4 38/70/4 41/71/4 60/72/4 +f 29/54/3 32/73/3 61/74/3 49/51/3 +f 31/75/3 30/55/3 52/58/3 62/76/3 +f 33/56/3 36/77/3 63/78/3 51/57/3 +f 35/79/3 34/53/3 50/52/3 64/80/3 +f 37/67/4 40/81/4 65/82/4 58/68/4 +f 39/83/4 38/70/4 59/69/4 66/84/4 +f 41/71/4 44/85/4 67/86/4 60/72/4 +f 43/87/4 42/66/4 57/65/4 68/88/4 +f 51/89/1 18/90/1 13/91/1 52/92/1 +f 59/93/1 60/94/1 14/95/1 17/96/1 +f 57/65/2 58/68/2 26/97/2 21/98/2 +f 50/52/2 49/51/2 22/99/2 25/100/2 +f 40/101/5 39/102/5 47/103/5 46/104/5 +f 35/105/5 45/106/5 48/107/5 36/108/5 +f 32/109/6 31/110/6 56/111/6 53/112/6 +f 44/113/6 43/114/6 54/115/6 55/116/6 +f 16/16/1 62/117/1 52/118/1 13/13/1 +f 67/119/1 15/15/1 14/14/1 60/120/1 +f 59/121/1 17/17/1 20/20/1 66/122/1 +f 18/18/1 51/123/1 63/124/1 19/19/1 +f 57/125/2 21/21/2 24/24/2 68/126/2 +f 22/22/2 49/127/2 61/128/2 23/23/2 +f 28/28/2 64/129/2 50/130/2 25/25/2 +f 65/131/2 27/27/2 26/26/2 58/132/2 +f 65/131/5 40/133/5 46/46/5 27/27/5 +f 45/45/5 35/134/5 64/129/5 28/28/5 +f 19/49/5 63/135/5 36/136/5 48/50/5 +f 39/137/5 66/138/5 20/48/5 47/47/5 +f 53/59/6 23/23/6 61/128/6 32/139/6 +f 43/140/6 68/126/6 24/24/6 54/60/6 +f 67/141/6 44/142/6 55/61/6 15/64/6 +f 16/63/6 56/62/6 31/143/6 62/144/6 +f 13/13/7 1/1/7 4/4/8 14/14/8 +f 18/90/9 2/2/9 1/1/7 13/91/7 +f 17/17/10 3/3/10 2/2/9 18/18/9 +f 14/95/8 4/4/8 3/3/10 17/96/10 +f 21/21/8 8/8/8 7/7/7 22/22/7 +f 26/97/10 5/5/10 8/8/8 21/98/8 +f 25/25/9 6/6/9 5/5/10 26/26/10 +f 22/99/7 7/7/7 6/6/9 25/100/9 +f 46/46/11 69/145/11 70/146/12 45/45/12 +f 47/103/13 71/147/13 69/145/11 46/104/11 +f 48/50/14 72/148/14 71/147/13 47/47/13 +f 45/106/12 70/146/12 72/148/14 48/107/14 +f 29/29/15 9/9/15 12/12/16 30/30/16 +f 34/53/17 10/10/17 9/9/15 29/54/15 +f 33/33/18 11/11/18 10/10/17 34/34/17 +f 30/55/16 12/12/16 11/11/18 33/56/18 +f 53/59/12 73/149/12 74/150/11 54/60/11 +f 56/111/14 75/151/14 73/149/12 53/112/12 +f 55/61/13 76/152/13 75/151/14 56/62/14 +f 54/115/11 74/150/11 76/152/13 55/116/13 +f 37/37/17 77/153/17 78/154/18 38/38/18 +f 42/66/15 79/155/15 77/153/17 37/67/17 +f 41/41/16 80/156/16 79/155/15 42/42/15 +f 38/70/18 78/154/18 80/156/16 41/71/16 +f 76/152/6 74/150/6 73/149/6 75/151/6 +f 78/154/4 77/153/4 79/155/4 80/156/4 +f 72/148/5 70/146/5 69/145/5 71/147/5 diff --git a/assets/wall/breakable_wall.png b/assets/wall/breakable_wall.png new file mode 100644 index 00000000..bdbc5fda Binary files /dev/null and b/assets/wall/breakable_wall.png differ diff --git a/assets/wall/unbreakable_wall.obj b/assets/wall/unbreakable_wall.obj new file mode 100644 index 00000000..936a170e --- /dev/null +++ b/assets/wall/unbreakable_wall.obj @@ -0,0 +1,61 @@ +# cube.obj +# + +mtllib cube.mtl +o cube + +v -0.500000 -0.500000 0.500000 +v 0.500000 -0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 + +vt 0.000000 0.000000 +vt 0.333333 0.000000 +vt 0.666666 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.333333 0.500000 +vt 0.666666 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.333333 1.000000 +vt 0.666666 1.000000 +vt 1.000000 1.000000 + +vn 0.000000 0.000000 1.000000 +vn 0.000000 1.000000 0.000000 +vn 0.000000 0.000000 -1.000000 +vn 0.000000 -1.000000 0.000000 +vn 1.000000 0.000000 0.000000 +vn -1.000000 0.000000 0.000000 + +g cube +usemtl cube +# Back +s 1 +f 1/1/1 2/2/1 3/5/1 +f 3/5/1 2/2/1 4/6/1 +# Top +s 2 +f 3/11/2 4/12/2 5/7/2 +f 5/7/2 4/12/2 6/8/2 +# Front +s 3 +f 5/9/3 6/10/3 7/5/3 +f 7/5/3 6/10/3 8/6/3 +# Bottom +s 4 +f 7/3/4 8/4/4 1/7/4 +f 1/7/4 8/4/4 2/8/4 +# Right +s 5 +f 2/7/5 8/6/5 4/11/5 +f 4/11/5 8/6/5 6/10/5 +# Left +s 6 +f 7/2/6 1/3/6 5/6/6 +f 5/6/6 1/3/6 3/7/6 \ No newline at end of file diff --git a/assets/wall/unbreakable_wall.png b/assets/wall/unbreakable_wall.png new file mode 100644 index 00000000..4a03f3fa Binary files /dev/null and b/assets/wall/unbreakable_wall.png differ diff --git a/sources/main.cpp b/sources/main.cpp index 0b7dacff..d49bef62 100644 --- a/sources/main.cpp +++ b/sources/main.cpp @@ -28,7 +28,7 @@ const std::vectortextures = { std::string get_full_path(const std::string &color) { - std::string path = "assets/player_"; + std::string path = "assets/player/"; path += color; path += ".png"; @@ -42,21 +42,21 @@ int main() const int screenWidth = 800; const int screenHeight = 450; std::vector::const_iterator iterator = textures.begin(); - const std::string modelPath = "assets/player.obj"; - const std::string texturePath = "assets/player_blue.png"; + const std::string modelPath = "assets/player/player.obj"; + const std::string texturePath = "assets/player/blue.png"; //const std::string animationPath = "assets/guy.iqm"; RAY::TraceLog::setLevel(LOG_WARNING); RAY::Window &window = RAY::Window::getInstance(screenWidth, screenHeight, "Bidibidibop", FLAG_WINDOW_RESIZABLE); + RAY::Image icon("assets/icon.png"); + window.setIcon(icon); + RAY::Model model(modelPath); RAY::Camera::Camera3D camera(RAY::Vector3(10.0f, 10.0f, 10.0f), RAY::Vector3(0.0f, 0.0f, 0.0f), RAY::Vector3(0.0f, 1.0f, 0.0f), 45.0f, CAMERA_PERSPECTIVE ); - RAY::Model model(modelPath); - RAY::Image icon("assets/bomberman.ico"); RAY::Texture texture(get_full_path(*iterator)); - window.setIcon(icon); - //RAY::ModelAnimations animations(animationPath); + //RAY::ModelAnimations animations(modelPath); RAY::Drawables::Drawables3D::Grid grid(10, 1.0f); RAY::Drawables::Drawables2D::Text instructionText("PRESS SPACE to PLAY MODEL ANIMATION", 10, {10, 20} , MAROON); model.setTextureToMaterial(MAP_DIFFUSE, texture); diff --git a/tmp.cpp b/tmp.cpp deleted file mode 100644 index a50079c8..00000000 --- a/tmp.cpp +++ /dev/null @@ -1,35481 +0,0 @@ -# 1 "lib/Ray/sources/Window.cpp" -# 1 "" -# 1 "" -# 1 "/usr/include/stdc-predef.h" 1 3 4 -# 1 "" 2 -# 1 "lib/Ray/sources/Window.cpp" - - - - - - - -# 1 "lib/Ray/sources/Window.hpp" 1 -# 11 "lib/Ray/sources/Window.hpp" -# 1 "/home/arthurjamet/raylib/src/raylib.h" 1 -# 82 "/home/arthurjamet/raylib/src/raylib.h" -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdarg.h" 1 3 4 -# 40 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdarg.h" 3 4 - -# 40 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdarg.h" 3 4 -typedef __builtin_va_list __gnuc_va_list; -# 99 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdarg.h" 3 4 -typedef __gnuc_va_list va_list; -# 83 "/home/arthurjamet/raylib/src/raylib.h" 2 -# 183 "/home/arthurjamet/raylib/src/raylib.h" - -# 183 "/home/arthurjamet/raylib/src/raylib.h" -typedef struct Vector2 { - float x; - float y; -} Vector2; - - -typedef struct Vector3 { - float x; - float y; - float z; -} Vector3; - - -typedef struct Vector4 { - float x; - float y; - float z; - float w; -} Vector4; - - -typedef Vector4 Quaternion; - - -typedef struct Matrix { - float m0, m4, m8, m12; - float m1, m5, m9, m13; - float m2, m6, m10, m14; - float m3, m7, m11, m15; -} Matrix; - - -typedef struct Color { - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; -} Color; - - -typedef struct Rectangle { - float x; - float y; - float width; - float height; -} Rectangle; - - - -typedef struct Image { - void *data; - int width; - int height; - int mipmaps; - int format; -} Image; - - - -typedef struct Texture { - unsigned int id; - int width; - int height; - int mipmaps; - int format; -} Texture; - - -typedef Texture Texture2D; - - -typedef Texture TextureCubemap; - - -typedef struct RenderTexture { - unsigned int id; - Texture texture; - Texture depth; -} RenderTexture; - - -typedef RenderTexture RenderTexture2D; - - -typedef struct NPatchInfo { - Rectangle source; - int left; - int top; - int right; - int bottom; - int layout; -} NPatchInfo; - - -typedef struct CharInfo { - int value; - int offsetX; - int offsetY; - int advanceX; - Image image; -} CharInfo; - - -typedef struct Font { - int baseSize; - int charsCount; - int charsPadding; - Texture2D texture; - Rectangle *recs; - CharInfo *chars; -} Font; - - - - -typedef struct Camera3D { - Vector3 position; - Vector3 target; - Vector3 up; - float fovy; - int projection; -} Camera3D; - -typedef Camera3D Camera; - - -typedef struct Camera2D { - Vector2 offset; - Vector2 target; - float rotation; - float zoom; -} Camera2D; - - - -typedef struct Mesh { - int vertexCount; - int triangleCount; - - - float *vertices; - float *texcoords; - float *texcoords2; - float *normals; - float *tangents; - unsigned char *colors; - unsigned short *indices; - - - float *animVertices; - float *animNormals; - int *boneIds; - float *boneWeights; - - - unsigned int vaoId; - unsigned int *vboId; -} Mesh; - - -typedef struct Shader { - unsigned int id; - int *locs; -} Shader; - - -typedef struct MaterialMap { - Texture2D texture; - Color color; - float value; -} MaterialMap; - - -typedef struct Material { - Shader shader; - MaterialMap *maps; - float params[4]; -} Material; - - -typedef struct Transform { - Vector3 translation; - Quaternion rotation; - Vector3 scale; -} Transform; - - -typedef struct BoneInfo { - char name[32]; - int parent; -} BoneInfo; - - -typedef struct Model { - Matrix transform; - - int meshCount; - int materialCount; - Mesh *meshes; - Material *materials; - int *meshMaterial; - - - int boneCount; - BoneInfo *bones; - Transform *bindPose; -} Model; - - -typedef struct ModelAnimation { - int boneCount; - int frameCount; - BoneInfo *bones; - Transform **framePoses; -} ModelAnimation; - - -typedef struct Ray { - Vector3 position; - Vector3 direction; -} Ray; - - -typedef struct RayHitInfo { - bool hit; - float distance; - Vector3 position; - Vector3 normal; -} RayHitInfo; - - -typedef struct BoundingBox { - Vector3 min; - Vector3 max; -} BoundingBox; - - -typedef struct Wave { - unsigned int sampleCount; - unsigned int sampleRate; - unsigned int sampleSize; - unsigned int channels; - void *data; -} Wave; - -typedef struct rAudioBuffer rAudioBuffer; - - - -typedef struct AudioStream { - rAudioBuffer *buffer; - - unsigned int sampleRate; - unsigned int sampleSize; - unsigned int channels; -} AudioStream; - - -typedef struct Sound { - AudioStream stream; - unsigned int sampleCount; -} Sound; - - - -typedef struct Music { - AudioStream stream; - unsigned int sampleCount; - bool looping; - - int ctxType; - void *ctxData; -} Music; - - -typedef struct VrDeviceInfo { - int hResolution; - int vResolution; - float hScreenSize; - float vScreenSize; - float vScreenCenter; - float eyeToScreenDistance; - float lensSeparationDistance; - float interpupillaryDistance; - float lensDistortionValues[4]; - float chromaAbCorrection[4]; -} VrDeviceInfo; - - -typedef struct VrStereoConfig { - Matrix projection[2]; - Matrix viewOffset[2]; - float leftLensCenter[2]; - float rightLensCenter[2]; - float leftScreenCenter[2]; - float rightScreenCenter[2]; - float scale[2]; - float scaleIn[2]; -} VrStereoConfig; - - - - - - - -typedef enum { - FLAG_VSYNC_HINT = 0x00000040, - FLAG_FULLSCREEN_MODE = 0x00000002, - FLAG_WINDOW_RESIZABLE = 0x00000004, - FLAG_WINDOW_UNDECORATED = 0x00000008, - FLAG_WINDOW_HIDDEN = 0x00000080, - FLAG_WINDOW_MINIMIZED = 0x00000200, - FLAG_WINDOW_MAXIMIZED = 0x00000400, - FLAG_WINDOW_UNFOCUSED = 0x00000800, - FLAG_WINDOW_TOPMOST = 0x00001000, - FLAG_WINDOW_ALWAYS_RUN = 0x00000100, - FLAG_WINDOW_TRANSPARENT = 0x00000010, - FLAG_WINDOW_HIGHDPI = 0x00002000, - FLAG_MSAA_4X_HINT = 0x00000020, - FLAG_INTERLACED_HINT = 0x00010000 -} ConfigFlags; - - -typedef enum { - LOG_ALL = 0, - LOG_TRACE, - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR, - LOG_FATAL, - LOG_NONE -} TraceLogLevel; - - - - -typedef enum { - KEY_NULL = 0, - - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - - - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - - - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - - KEY_BACK = 4, - KEY_MENU = 82, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25 -} KeyboardKey; - - - - - - - -typedef enum { - MOUSE_BUTTON_LEFT = 0, - MOUSE_BUTTON_RIGHT = 1, - MOUSE_BUTTON_MIDDLE = 2, - MOUSE_BUTTON_SIDE = 3, - MOUSE_BUTTON_EXTRA = 4, - MOUSE_BUTTON_FORWARD = 5, - MOUSE_BUTTON_BACK = 6, - MOUSE_BUTTON_MAX = 7 -} MouseButton; - - -typedef enum { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, - MOUSE_CURSOR_RESIZE_NS = 6, - MOUSE_CURSOR_RESIZE_NWSE = 7, - MOUSE_CURSOR_RESIZE_NESW = 8, - MOUSE_CURSOR_RESIZE_ALL = 9, - MOUSE_CURSOR_NOT_ALLOWED = 10 -} MouseCursor; - - -typedef enum { - - GAMEPAD_BUTTON_UNKNOWN = 0, - - - GAMEPAD_BUTTON_LEFT_FACE_UP, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT, - GAMEPAD_BUTTON_LEFT_FACE_DOWN, - GAMEPAD_BUTTON_LEFT_FACE_LEFT, - - - - - - GAMEPAD_BUTTON_RIGHT_FACE_UP, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT, - - - GAMEPAD_BUTTON_LEFT_TRIGGER_1, - GAMEPAD_BUTTON_LEFT_TRIGGER_2, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2, - - - GAMEPAD_BUTTON_MIDDLE_LEFT, - GAMEPAD_BUTTON_MIDDLE, - GAMEPAD_BUTTON_MIDDLE_RIGHT, - - - GAMEPAD_BUTTON_LEFT_THUMB, - GAMEPAD_BUTTON_RIGHT_THUMB -} GamepadButton; - - -typedef enum { - - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - - - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - - - GAMEPAD_AXIS_LEFT_TRIGGER = 4, - GAMEPAD_AXIS_RIGHT_TRIGGER = 5 -} GamepadAxis; - - -typedef enum { - MATERIAL_MAP_ALBEDO = 0, - MATERIAL_MAP_METALNESS = 1, - MATERIAL_MAP_NORMAL = 2, - MATERIAL_MAP_ROUGHNESS = 3, - MATERIAL_MAP_OCCLUSION, - MATERIAL_MAP_EMISSION, - MATERIAL_MAP_HEIGHT, - MATERIAL_MAP_BRDG, - MATERIAL_MAP_CUBEMAP, - MATERIAL_MAP_IRRADIANCE, - MATERIAL_MAP_PREFILTER -} MaterialMapIndex; - - - - - -typedef enum { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01, - SHADER_LOC_VERTEX_TEXCOORD02, - SHADER_LOC_VERTEX_NORMAL, - SHADER_LOC_VERTEX_TANGENT, - SHADER_LOC_VERTEX_COLOR, - SHADER_LOC_MATRIX_MVP, - SHADER_LOC_MATRIX_VIEW, - SHADER_LOC_MATRIX_PROJECTION, - SHADER_LOC_MATRIX_MODEL, - SHADER_LOC_MATRIX_NORMAL, - SHADER_LOC_VECTOR_VIEW, - SHADER_LOC_COLOR_DIFFUSE, - SHADER_LOC_COLOR_SPECULAR, - SHADER_LOC_COLOR_AMBIENT, - SHADER_LOC_MAP_ALBEDO, - SHADER_LOC_MAP_METALNESS, - SHADER_LOC_MAP_NORMAL, - SHADER_LOC_MAP_ROUGHNESS, - SHADER_LOC_MAP_OCCLUSION, - SHADER_LOC_MAP_EMISSION, - SHADER_LOC_MAP_HEIGHT, - SHADER_LOC_MAP_CUBEMAP, - SHADER_LOC_MAP_IRRADIANCE, - SHADER_LOC_MAP_PREFILTER, - SHADER_LOC_MAP_BRDF -} ShaderLocationIndex; - - - - - -typedef enum { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2, - SHADER_UNIFORM_VEC3, - SHADER_UNIFORM_VEC4, - SHADER_UNIFORM_INT, - SHADER_UNIFORM_IVEC2, - SHADER_UNIFORM_IVEC3, - SHADER_UNIFORM_IVEC4, - SHADER_UNIFORM_SAMPLER2D -} ShaderUniformDataType; - - - -typedef enum { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, - PIXELFORMAT_UNCOMPRESSED_R5G6B5, - PIXELFORMAT_UNCOMPRESSED_R8G8B8, - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, - PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, - PIXELFORMAT_UNCOMPRESSED_R32, - PIXELFORMAT_UNCOMPRESSED_R32G32B32, - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, - PIXELFORMAT_COMPRESSED_DXT1_RGB, - PIXELFORMAT_COMPRESSED_DXT1_RGBA, - PIXELFORMAT_COMPRESSED_DXT3_RGBA, - PIXELFORMAT_COMPRESSED_DXT5_RGBA, - PIXELFORMAT_COMPRESSED_ETC1_RGB, - PIXELFORMAT_COMPRESSED_ETC2_RGB, - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, - PIXELFORMAT_COMPRESSED_PVRT_RGB, - PIXELFORMAT_COMPRESSED_PVRT_RGBA, - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA -} PixelFormat; - - - - -typedef enum { - TEXTURE_FILTER_POINT = 0, - TEXTURE_FILTER_BILINEAR, - TEXTURE_FILTER_TRILINEAR, - TEXTURE_FILTER_ANISOTROPIC_4X, - TEXTURE_FILTER_ANISOTROPIC_8X, - TEXTURE_FILTER_ANISOTROPIC_16X, -} TextureFilter; - - -typedef enum { - TEXTURE_WRAP_REPEAT = 0, - TEXTURE_WRAP_CLAMP, - TEXTURE_WRAP_MIRROR_REPEAT, - TEXTURE_WRAP_MIRROR_CLAMP -} TextureWrap; - - -typedef enum { - CUBEMAP_LAYOUT_AUTO_DETECT = 0, - CUBEMAP_LAYOUT_LINE_VERTICAL, - CUBEMAP_LAYOUT_LINE_HORIZONTAL, - CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR, - CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE, - CUBEMAP_LAYOUT_PANORAMA -} CubemapLayout; - - -typedef enum { - FONT_DEFAULT = 0, - FONT_BITMAP, - FONT_SDF -} FontType; - - -typedef enum { - BLEND_ALPHA = 0, - BLEND_ADDITIVE, - BLEND_MULTIPLIED, - BLEND_ADD_COLORS, - BLEND_SUBTRACT_COLORS, - BLEND_CUSTOM -} BlendMode; - - - -typedef enum { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512 -} Gestures; - - -typedef enum { - CAMERA_CUSTOM = 0, - CAMERA_FREE, - CAMERA_ORBITAL, - CAMERA_FIRST_PERSON, - CAMERA_THIRD_PERSON -} CameraMode; - - -typedef enum { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC -} CameraProjection; - - -typedef enum { - NPATCH_NINE_PATCH = 0, - NPATCH_THREE_PATCH_VERTICAL, - NPATCH_THREE_PATCH_HORIZONTAL -} NPatchLayout; - - - -typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); -typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead); -typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); -typedef char *(*LoadFileTextCallback)(const char* fileName); -typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); - - - -extern "C" { -# 921 "/home/arthurjamet/raylib/src/raylib.h" - void InitWindow(int width, int height, const char *title); - bool WindowShouldClose(void); - void CloseWindow(void); - bool IsWindowReady(void); - bool IsWindowFullscreen(void); - bool IsWindowHidden(void); - bool IsWindowMinimized(void); - bool IsWindowMaximized(void); - bool IsWindowFocused(void); - bool IsWindowResized(void); - bool IsWindowState(unsigned int flag); - void SetWindowState(unsigned int flags); - void ClearWindowState(unsigned int flags); - void ToggleFullscreen(void); - void MaximizeWindow(void); - void MinimizeWindow(void); - void RestoreWindow(void); - void SetWindowIcon(Image image); - void SetWindowTitle(const char *title); - void SetWindowPosition(int x, int y); - void SetWindowMonitor(int monitor); - void SetWindowMinSize(int width, int height); - void SetWindowSize(int width, int height); - void *GetWindowHandle(void); - int GetScreenWidth(void); - int GetScreenHeight(void); - int GetMonitorCount(void); - int GetCurrentMonitor(void); - Vector2 GetMonitorPosition(int monitor); - int GetMonitorWidth(int monitor); - int GetMonitorHeight(int monitor); - int GetMonitorPhysicalWidth(int monitor); - int GetMonitorPhysicalHeight(int monitor); - int GetMonitorRefreshRate(int monitor); - Vector2 GetWindowPosition(void); - Vector2 GetWindowScaleDPI(void); - const char *GetMonitorName(int monitor); - void SetClipboardText(const char *text); - const char *GetClipboardText(void); - - - void ShowCursor(void); - void HideCursor(void); - bool IsCursorHidden(void); - void EnableCursor(void); - void DisableCursor(void); - bool IsCursorOnScreen(void); - - - void ClearBackground(Color color); - void BeginDrawing(void); - void EndDrawing(void); - void BeginMode2D(Camera2D camera); - void EndMode2D(void); - void BeginMode3D(Camera3D camera); - void EndMode3D(void); - void BeginTextureMode(RenderTexture2D target); - void EndTextureMode(void); - void BeginShaderMode(Shader shader); - void EndShaderMode(void); - void BeginBlendMode(int mode); - void EndBlendMode(void); - void BeginScissorMode(int x, int y, int width, int height); - void EndScissorMode(void); - void BeginVrStereoMode(VrStereoConfig config); - void EndVrStereoMode(void); - - - VrStereoConfig LoadVrStereoConfig(VrDeviceInfo device); - void UnloadVrStereoConfig(VrStereoConfig config); - - - - Shader LoadShader(const char *vsFileName, const char *fsFileName); - Shader LoadShaderFromMemory(const char *vsCode, const char *fsCode); - int GetShaderLocation(Shader shader, const char *uniformName); - int GetShaderLocationAttrib(Shader shader, const char *attribName); - void SetShaderValue(Shader shader, int locIndex, const void *value, int uniformType); - void SetShaderValueV(Shader shader, int locIndex, const void *value, int uniformType, int count); - void SetShaderValueMatrix(Shader shader, int locIndex, Matrix mat); - void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture); - void UnloadShader(Shader shader); - - - Ray GetMouseRay(Vector2 mousePosition, Camera camera); - Matrix GetCameraMatrix(Camera camera); - Matrix GetCameraMatrix2D(Camera2D camera); - Vector2 GetWorldToScreen(Vector3 position, Camera camera); - Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); - Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); - Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); - - - void SetTargetFPS(int fps); - int GetFPS(void); - float GetFrameTime(void); - double GetTime(void); - - - int GetRandomValue(int min, int max); - void TakeScreenshot(const char *fileName); - void SetConfigFlags(unsigned int flags); - - void TraceLog(int logLevel, const char *text, ...); - void SetTraceLogLevel(int logLevel); - void *MemAlloc(int size); - void *MemRealloc(void *ptr, int size); - void MemFree(void *ptr); - - - - void SetTraceLogCallback(TraceLogCallback callback); - void SetLoadFileDataCallback(LoadFileDataCallback callback); - void SetSaveFileDataCallback(SaveFileDataCallback callback); - void SetLoadFileTextCallback(LoadFileTextCallback callback); - void SetSaveFileTextCallback(SaveFileTextCallback callback); - - - unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); - void UnloadFileData(unsigned char *data); - bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); - char *LoadFileText(const char *fileName); - void UnloadFileText(unsigned char *text); - bool SaveFileText(const char *fileName, char *text); - bool FileExists(const char *fileName); - bool DirectoryExists(const char *dirPath); - bool IsFileExtension(const char *fileName, const char *ext); - const char *GetFileExtension(const char *fileName); - const char *GetFileName(const char *filePath); - const char *GetFileNameWithoutExt(const char *filePath); - const char *GetDirectoryPath(const char *filePath); - const char *GetPrevDirectoryPath(const char *dirPath); - const char *GetWorkingDirectory(void); - char **GetDirectoryFiles(const char *dirPath, int *count); - void ClearDirectoryFiles(void); - bool ChangeDirectory(const char *dir); - bool IsFileDropped(void); - char **GetDroppedFiles(int *count); - void ClearDroppedFiles(void); - long GetFileModTime(const char *fileName); - - unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); - unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *dataLength); - - - bool SaveStorageValue(unsigned int position, int value); - int LoadStorageValue(unsigned int position); - - void OpenURL(const char *url); - - - - - - - bool IsKeyPressed(int key); - bool IsKeyDown(int key); - bool IsKeyReleased(int key); - bool IsKeyUp(int key); - void SetExitKey(int key); - int GetKeyPressed(void); - int GetCharPressed(void); - - - bool IsGamepadAvailable(int gamepad); - bool IsGamepadName(int gamepad, const char *name); - const char *GetGamepadName(int gamepad); - bool IsGamepadButtonPressed(int gamepad, int button); - bool IsGamepadButtonDown(int gamepad, int button); - bool IsGamepadButtonReleased(int gamepad, int button); - bool IsGamepadButtonUp(int gamepad, int button); - int GetGamepadButtonPressed(void); - int GetGamepadAxisCount(int gamepad); - float GetGamepadAxisMovement(int gamepad, int axis); - int SetGamepadMappings(const char *mappings); - - - bool IsMouseButtonPressed(int button); - bool IsMouseButtonDown(int button); - bool IsMouseButtonReleased(int button); - bool IsMouseButtonUp(int button); - int GetMouseX(void); - int GetMouseY(void); - Vector2 GetMousePosition(void); - void SetMousePosition(int x, int y); - void SetMouseOffset(int offsetX, int offsetY); - void SetMouseScale(float scaleX, float scaleY); - float GetMouseWheelMove(void); - void SetMouseCursor(int cursor); - - - int GetTouchX(void); - int GetTouchY(void); - Vector2 GetTouchPosition(int index); - - - - - void SetGesturesEnabled(unsigned int flags); - bool IsGestureDetected(int gesture); - int GetGestureDetected(void); - int GetTouchPointsCount(void); - float GetGestureHoldDuration(void); - Vector2 GetGestureDragVector(void); - float GetGestureDragAngle(void); - Vector2 GetGesturePinchVector(void); - float GetGesturePinchAngle(void); - - - - - void SetCameraMode(Camera camera, int mode); - void UpdateCamera(Camera *camera); - - void SetCameraPanControl(int keyPan); - void SetCameraAltControl(int keyAlt); - void SetCameraSmoothZoomControl(int keySmoothZoom); - void SetCameraMoveControls(int keyFront, int keyBack, int keyRight, int keyLeft, int keyUp, int keyDown); - - - - - - - - void SetShapesTexture(Texture2D texture, Rectangle source); - - - void DrawPixel(int posX, int posY, Color color); - void DrawPixelV(Vector2 position, Color color); - void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); - void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); - void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); - void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); - void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); - void DrawLineStrip(Vector2 *points, int pointsCount, Color color); - void DrawCircle(int centerX, int centerY, float radius, Color color); - void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); - void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); - void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); - void DrawCircleV(Vector2 center, float radius, Color color); - void DrawCircleLines(int centerX, int centerY, float radius, Color color); - void DrawEllipse(int centerX, int centerY, float radiusH, float radiusV, Color color); - void DrawEllipseLines(int centerX, int centerY, float radiusH, float radiusV, Color color); - void DrawRing(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); - void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, float startAngle, float endAngle, int segments, Color color); - void DrawRectangle(int posX, int posY, int width, int height, Color color); - void DrawRectangleV(Vector2 position, Vector2 size, Color color); - void DrawRectangleRec(Rectangle rec, Color color); - void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); - void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); - void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); - void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); - void DrawRectangleLines(int posX, int posY, int width, int height, Color color); - void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); - void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); - void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); - void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); - void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); - void DrawTriangleFan(Vector2 *points, int pointsCount, Color color); - void DrawTriangleStrip(Vector2 *points, int pointsCount, Color color); - void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); - void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); - void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); - - - bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); - bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); - bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); - bool CheckCollisionPointRec(Vector2 point, Rectangle rec); - bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); - bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); - bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint); - Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); - - - - - - - - Image LoadImage(const char *fileName); - Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); - Image LoadImageAnim(const char *fileName, int *frames); - Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); - void UnloadImage(Image image); - bool ExportImage(Image image, const char *fileName); - bool ExportImageAsCode(Image image, const char *fileName); - - - Image GenImageColor(int width, int height, Color color); - Image GenImageGradientV(int width, int height, Color top, Color bottom); - Image GenImageGradientH(int width, int height, Color left, Color right); - Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); - Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); - Image GenImageWhiteNoise(int width, int height, float factor); - Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); - Image GenImageCellular(int width, int height, int tileSize); - - - Image ImageCopy(Image image); - Image ImageFromImage(Image image, Rectangle rec); - Image ImageText(const char *text, int fontSize, Color color); - Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); - void ImageFormat(Image *image, int newFormat); - void ImageToPOT(Image *image, Color fill); - void ImageCrop(Image *image, Rectangle crop); - void ImageAlphaCrop(Image *image, float threshold); - void ImageAlphaClear(Image *image, Color color, float threshold); - void ImageAlphaMask(Image *image, Image alphaMask); - void ImageAlphaPremultiply(Image *image); - void ImageResize(Image *image, int newWidth, int newHeight); - void ImageResizeNN(Image *image, int newWidth,int newHeight); - void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); - void ImageMipmaps(Image *image); - void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); - void ImageFlipVertical(Image *image); - void ImageFlipHorizontal(Image *image); - void ImageRotateCW(Image *image); - void ImageRotateCCW(Image *image); - void ImageColorTint(Image *image, Color color); - void ImageColorInvert(Image *image); - void ImageColorGrayscale(Image *image); - void ImageColorContrast(Image *image, float contrast); - void ImageColorBrightness(Image *image, int brightness); - void ImageColorReplace(Image *image, Color color, Color replace); - Color *LoadImageColors(Image image); - Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorsCount); - void UnloadImageColors(Color *colors); - void UnloadImagePalette(Color *colors); - Rectangle GetImageAlphaBorder(Image image, float threshold); - - - - void ImageClearBackground(Image *dst, Color color); - void ImageDrawPixel(Image *dst, int posX, int posY, Color color); - void ImageDrawPixelV(Image *dst, Vector2 position, Color color); - void ImageDrawLine(Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color); - void ImageDrawLineV(Image *dst, Vector2 start, Vector2 end, Color color); - void ImageDrawCircle(Image *dst, int centerX, int centerY, int radius, Color color); - void ImageDrawCircleV(Image *dst, Vector2 center, int radius, Color color); - void ImageDrawRectangle(Image *dst, int posX, int posY, int width, int height, Color color); - void ImageDrawRectangleV(Image *dst, Vector2 position, Vector2 size, Color color); - void ImageDrawRectangleRec(Image *dst, Rectangle rec, Color color); - void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); - void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint); - void ImageDrawText(Image *dst, const char *text, int posX, int posY, int fontSize, Color color); - void ImageDrawTextEx(Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); - - - - Texture2D LoadTexture(const char *fileName); - Texture2D LoadTextureFromImage(Image image); - TextureCubemap LoadTextureCubemap(Image image, int layout); - RenderTexture2D LoadRenderTexture(int width, int height); - void UnloadTexture(Texture2D texture); - void UnloadRenderTexture(RenderTexture2D target); - void UpdateTexture(Texture2D texture, const void *pixels); - void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); - Image GetTextureData(Texture2D texture); - Image GetScreenData(void); - - - void GenTextureMipmaps(Texture2D *texture); - void SetTextureFilter(Texture2D texture, int filter); - void SetTextureWrap(Texture2D texture, int wrap); - - - void DrawTexture(Texture2D texture, int posX, int posY, Color tint); - void DrawTextureV(Texture2D texture, Vector2 position, Color tint); - void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); - void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); - void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint); - void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint); - void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); - void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); - void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointsCount, Color tint); - - - Color Fade(Color color, float alpha); - int ColorToInt(Color color); - Vector4 ColorNormalize(Color color); - Color ColorFromNormalized(Vector4 normalized); - Vector3 ColorToHSV(Color color); - Color ColorFromHSV(float hue, float saturation, float value); - Color ColorAlpha(Color color, float alpha); - Color ColorAlphaBlend(Color dst, Color src, Color tint); - Color GetColor(int hexValue); - Color GetPixelColor(void *srcPtr, int format); - void SetPixelColor(void *dstPtr, Color color, int format); - int GetPixelDataSize(int width, int height, int format); - - - - - - - Font GetFontDefault(void); - Font LoadFont(const char *fileName); - Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int charsCount); - Font LoadFontFromImage(Image image, Color key, int firstChar); - Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int charsCount); - CharInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int charsCount, int type); - Image GenImageFontAtlas(const CharInfo *chars, Rectangle **recs, int charsCount, int fontSize, int padding, int packMethod); - void UnloadFontData(CharInfo *chars, int charsCount); - void UnloadFont(Font font); - - - void DrawFPS(int posX, int posY); - void DrawText(const char *text, int posX, int posY, int fontSize, Color color); - void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); - void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); - void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, - int selectStart, int selectLength, Color selectTint, Color selectBackTint); - void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); - - - int MeasureText(const char *text, int fontSize); - Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); - int GetGlyphIndex(Font font, int codepoint); - - - - int TextCopy(char *dst, const char *src); - bool TextIsEqual(const char *text1, const char *text2); - unsigned int TextLength(const char *text); - const char *TextFormat(const char *text, ...); - const char *TextSubtext(const char *text, int position, int length); - char *TextReplace(char *text, const char *replace, const char *by); - char *TextInsert(const char *text, const char *insert, int position); - const char *TextJoin(const char **textList, int count, const char *delimiter); - const char **TextSplit(const char *text, char delimiter, int *count); - void TextAppend(char *text, const char *append, int *position); - int TextFindIndex(const char *text, const char *find); - const char *TextToUpper(const char *text); - const char *TextToLower(const char *text); - const char *TextToPascal(const char *text); - int TextToInteger(const char *text); - char *TextToUtf8(int *codepoints, int length); - - - int *GetCodepoints(const char *text, int *count); - int GetCodepointsCount(const char *text); - int GetNextCodepoint(const char *text, int *bytesProcessed); - const char *CodepointToUtf8(int codepoint, int *byteLength); - - - - - - - void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); - void DrawPoint3D(Vector3 position, Color color); - void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); - void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); - void DrawTriangleStrip3D(Vector3 *points, int pointsCount, Color color); - void DrawCube(Vector3 position, float width, float height, float length, Color color); - void DrawCubeV(Vector3 position, Vector3 size, Color color); - void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); - void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); - void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color); - void DrawSphere(Vector3 centerPos, float radius, Color color); - void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); - void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); - void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); - void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); - void DrawPlane(Vector3 centerPos, Vector2 size, Color color); - void DrawRay(Ray ray, Color color); - void DrawGrid(int slices, float spacing); - - - - - - - Model LoadModel(const char *fileName); - Model LoadModelFromMesh(Mesh mesh); - void UnloadModel(Model model); - void UnloadModelKeepMeshes(Model model); - - - void UploadMesh(Mesh *mesh, bool dynamic); - void UpdateMeshBuffer(Mesh mesh, int index, void *data, int dataSize, int offset); - void DrawMesh(Mesh mesh, Material material, Matrix transform); - void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int instances); - void UnloadMesh(Mesh mesh); - bool ExportMesh(Mesh mesh, const char *fileName); - - - Material *LoadMaterials(const char *fileName, int *materialCount); - Material LoadMaterialDefault(void); - void UnloadMaterial(Material material); - void SetMaterialTexture(Material *material, int mapType, Texture2D texture); - void SetModelMeshMaterial(Model *model, int meshId, int materialId); - - - ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount); - void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); - void UnloadModelAnimation(ModelAnimation anim); - void UnloadModelAnimations(ModelAnimation* animations, unsigned int count); - bool IsModelAnimationValid(Model model, ModelAnimation anim); - - - Mesh GenMeshPoly(int sides, float radius); - Mesh GenMeshPlane(float width, float length, int resX, int resZ); - Mesh GenMeshCube(float width, float height, float length); - Mesh GenMeshSphere(float radius, int rings, int slices); - Mesh GenMeshHemiSphere(float radius, int rings, int slices); - Mesh GenMeshCylinder(float radius, float height, int slices); - Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); - Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); - Mesh GenMeshHeightmap(Image heightmap, Vector3 size); - Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); - - - BoundingBox GetMeshBoundingBox(Mesh mesh); - void MeshTangents(Mesh *mesh); - void MeshBinormals(Mesh *mesh); - - - void DrawModel(Model model, Vector3 position, float scale, Color tint); - void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); - void DrawModelWires(Model model, Vector3 position, float scale, Color tint); - void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); - void DrawBoundingBox(BoundingBox box, Color color); - void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); - void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); - void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Vector2 origin, float rotation, Color tint); - - - bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); - bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); - bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); - bool CheckCollisionRaySphere(Ray ray, Vector3 center, float radius); - bool CheckCollisionRaySphereEx(Ray ray, Vector3 center, float radius, Vector3 *collisionPoint); - bool CheckCollisionRayBox(Ray ray, BoundingBox box); - RayHitInfo GetCollisionRayMesh(Ray ray, Mesh mesh, Matrix transform); - RayHitInfo GetCollisionRayModel(Ray ray, Model model); - RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); - RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight); - - - - - - - void InitAudioDevice(void); - void CloseAudioDevice(void); - bool IsAudioDeviceReady(void); - void SetMasterVolume(float volume); - - - Wave LoadWave(const char *fileName); - Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); - Sound LoadSound(const char *fileName); - Sound LoadSoundFromWave(Wave wave); - void UpdateSound(Sound sound, const void *data, int samplesCount); - void UnloadWave(Wave wave); - void UnloadSound(Sound sound); - bool ExportWave(Wave wave, const char *fileName); - bool ExportWaveAsCode(Wave wave, const char *fileName); - - - void PlaySound(Sound sound); - void StopSound(Sound sound); - void PauseSound(Sound sound); - void ResumeSound(Sound sound); - void PlaySoundMulti(Sound sound); - void StopSoundMulti(void); - int GetSoundsPlaying(void); - bool IsSoundPlaying(Sound sound); - void SetSoundVolume(Sound sound, float volume); - void SetSoundPitch(Sound sound, float pitch); - void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); - Wave WaveCopy(Wave wave); - void WaveCrop(Wave *wave, int initSample, int finalSample); - float *LoadWaveSamples(Wave wave); - void UnloadWaveSamples(float *samples); - - - Music LoadMusicStream(const char *fileName); - Music LoadMusicStreamFromMemory(const char *fileType, unsigned char* data, int dataSize); - void UnloadMusicStream(Music music); - void PlayMusicStream(Music music); - bool IsMusicStreamPlaying(Music music); - void UpdateMusicStream(Music music); - void StopMusicStream(Music music); - void PauseMusicStream(Music music); - void ResumeMusicStream(Music music); - void SetMusicVolume(Music music, float volume); - void SetMusicPitch(Music music, float pitch); - float GetMusicTimeLength(Music music); - float GetMusicTimePlayed(Music music); - - - AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); - void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount); - void CloseAudioStream(AudioStream stream); - bool IsAudioStreamProcessed(AudioStream stream); - void PlayAudioStream(AudioStream stream); - void PauseAudioStream(AudioStream stream); - void ResumeAudioStream(AudioStream stream); - bool IsAudioStreamPlaying(AudioStream stream); - void StopAudioStream(AudioStream stream); - void SetAudioStreamVolume(AudioStream stream, float volume); - void SetAudioStreamPitch(AudioStream stream, float pitch); - void SetAudioStreamBufferSizeDefault(int size); - - -} -# 12 "lib/Ray/sources/Window.hpp" 2 -# 1 "/usr/include/c++/10/string" 1 3 -# 36 "/usr/include/c++/10/string" 3 - -# 37 "/usr/include/c++/10/string" 3 - -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 1 3 - - -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 4 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 2 3 -# 2304 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 3 - -# 2304 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 3 -namespace std -{ - typedef long unsigned int size_t; - typedef long int ptrdiff_t; - - - typedef decltype(nullptr) nullptr_t; - -} -# 2326 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 3 -namespace std -{ - inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -} -namespace __gnu_cxx -{ - inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { } -} -# 2564 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 3 -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/os_defines.h" 1 3 -# 39 "/usr/include/c++/10/x86_64-redhat-linux/bits/os_defines.h" 3 -# 1 "/usr/include/features.h" 1 3 4 -# 465 "/usr/include/features.h" 3 4 -# 1 "/usr/include/sys/cdefs.h" 1 3 4 -# 449 "/usr/include/sys/cdefs.h" 3 4 -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 450 "/usr/include/sys/cdefs.h" 2 3 4 -# 1 "/usr/include/bits/long-double.h" 1 3 4 -# 451 "/usr/include/sys/cdefs.h" 2 3 4 -# 466 "/usr/include/features.h" 2 3 4 -# 489 "/usr/include/features.h" 3 4 -# 1 "/usr/include/gnu/stubs.h" 1 3 4 -# 10 "/usr/include/gnu/stubs.h" 3 4 -# 1 "/usr/include/gnu/stubs-64.h" 1 3 4 -# 11 "/usr/include/gnu/stubs.h" 2 3 4 -# 490 "/usr/include/features.h" 2 3 4 -# 40 "/usr/include/c++/10/x86_64-redhat-linux/bits/os_defines.h" 2 3 -# 2565 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 2 3 - - -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/cpu_defines.h" 1 3 -# 2568 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++config.h" 2 3 -# 39 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/stringfwd.h" 1 3 -# 37 "/usr/include/c++/10/bits/stringfwd.h" 3 - -# 38 "/usr/include/c++/10/bits/stringfwd.h" 3 - - -# 1 "/usr/include/c++/10/bits/memoryfwd.h" 1 3 -# 46 "/usr/include/c++/10/bits/memoryfwd.h" 3 - -# 47 "/usr/include/c++/10/bits/memoryfwd.h" 3 - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 63 "/usr/include/c++/10/bits/memoryfwd.h" 3 - template - class allocator; - - - template<> - class allocator; - - - - - template - struct uses_allocator; - - - - - -} -# 41 "/usr/include/c++/10/bits/stringfwd.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - - template - struct char_traits; - - template<> struct char_traits; - - - template<> struct char_traits; - - - - - - - - template<> struct char_traits; - template<> struct char_traits; - - -namespace __cxx11 { - - template, - typename _Alloc = allocator<_CharT> > - class basic_string; - -} - - - typedef basic_string string; - - - - typedef basic_string wstring; -# 93 "/usr/include/c++/10/bits/stringfwd.h" 3 - typedef basic_string u16string; - - - typedef basic_string u32string; - - - - - -} -# 40 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/char_traits.h" 1 3 -# 37 "/usr/include/c++/10/bits/char_traits.h" 3 - -# 38 "/usr/include/c++/10/bits/char_traits.h" 3 - -# 1 "/usr/include/c++/10/bits/stl_algobase.h" 1 3 -# 60 "/usr/include/c++/10/bits/stl_algobase.h" 3 -# 1 "/usr/include/c++/10/bits/functexcept.h" 1 3 -# 40 "/usr/include/c++/10/bits/functexcept.h" 3 -# 1 "/usr/include/c++/10/bits/exception_defines.h" 1 3 -# 41 "/usr/include/c++/10/bits/functexcept.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - void - __throw_bad_exception(void) __attribute__((__noreturn__)); - - - void - __throw_bad_alloc(void) __attribute__((__noreturn__)); - - - void - __throw_bad_cast(void) __attribute__((__noreturn__)); - - void - __throw_bad_typeid(void) __attribute__((__noreturn__)); - - - void - __throw_logic_error(const char*) __attribute__((__noreturn__)); - - void - __throw_domain_error(const char*) __attribute__((__noreturn__)); - - void - __throw_invalid_argument(const char*) __attribute__((__noreturn__)); - - void - __throw_length_error(const char*) __attribute__((__noreturn__)); - - void - __throw_out_of_range(const char*) __attribute__((__noreturn__)); - - void - __throw_out_of_range_fmt(const char*, ...) __attribute__((__noreturn__)) - __attribute__((__format__(__gnu_printf__, 1, 2))); - - void - __throw_runtime_error(const char*) __attribute__((__noreturn__)); - - void - __throw_range_error(const char*) __attribute__((__noreturn__)); - - void - __throw_overflow_error(const char*) __attribute__((__noreturn__)); - - void - __throw_underflow_error(const char*) __attribute__((__noreturn__)); - - - void - __throw_ios_failure(const char*) __attribute__((__noreturn__)); - - void - __throw_ios_failure(const char*, int) __attribute__((__noreturn__)); - - - void - __throw_system_error(int) __attribute__((__noreturn__)); - - - void - __throw_future_error(int) __attribute__((__noreturn__)); - - - void - __throw_bad_function_call() __attribute__((__noreturn__)); - - -} -# 61 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/bits/cpp_type_traits.h" 1 3 -# 35 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 - -# 36 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 -# 67 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 -extern "C++" { - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - struct __true_type { }; - struct __false_type { }; - - template - struct __truth_type - { typedef __false_type __type; }; - - template<> - struct __truth_type - { typedef __true_type __type; }; - - - - template - struct __traitor - { - enum { __value = bool(_Sp::__value) || bool(_Tp::__value) }; - typedef typename __truth_type<__value>::__type __type; - }; - - - template - struct __are_same - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template - struct __are_same<_Tp, _Tp> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - template - struct __is_void - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template<> - struct __is_void - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - - - template - struct __is_integer - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - - - - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; -# 184 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_integer - { - enum { __value = 1 }; - typedef __true_type __type; - }; -# 270 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 -template<> struct __is_integer<__int128> { enum { __value = 1 }; typedef __true_type __type; }; template<> struct __is_integer { enum { __value = 1 }; typedef __true_type __type; }; -# 287 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 - template - struct __is_floating - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - - template<> - struct __is_floating - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_floating - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_floating - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - - - template - struct __is_pointer - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template - struct __is_pointer<_Tp*> - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - - - template - struct __is_arithmetic - : public __traitor<__is_integer<_Tp>, __is_floating<_Tp> > - { }; - - - - - template - struct __is_scalar - : public __traitor<__is_arithmetic<_Tp>, __is_pointer<_Tp> > - { }; - - - - - template - struct __is_char - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template<> - struct __is_char - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - template<> - struct __is_char - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - - template - struct __is_byte - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - template<> - struct __is_byte - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_byte - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template<> - struct __is_byte - { - enum { __value = 1 }; - typedef __true_type __type; - }; -# 423 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 - template struct iterator_traits; - - - template - struct __is_nonvolatile_trivially_copyable - { - enum { __value = __is_trivially_copyable(_Tp) }; - }; - - - - - template - struct __is_nonvolatile_trivially_copyable - { - enum { __value = 0 }; - }; - - - template - struct __memcpyable - { - enum { __value = 0 }; - }; - - template - struct __memcpyable<_Tp*, _Tp*> - : __is_nonvolatile_trivially_copyable<_Tp> - { }; - - template - struct __memcpyable<_Tp*, const _Tp*> - : __is_nonvolatile_trivially_copyable<_Tp> - { }; - - - - - - - template - struct __memcmpable - { - enum { __value = 0 }; - }; - - - template - struct __memcmpable<_Tp*, _Tp*> - : __is_nonvolatile_trivially_copyable<_Tp> - { }; - - template - struct __memcmpable - : __is_nonvolatile_trivially_copyable<_Tp> - { }; - - template - struct __memcmpable<_Tp*, const _Tp*> - : __is_nonvolatile_trivially_copyable<_Tp> - { }; - - - - - template::__value> - struct __is_memcmp_ordered - { - static const bool __value = _Tp(-1) > _Tp(1); - }; - - template - struct __is_memcmp_ordered<_Tp, false> - { - static const bool __value = false; - }; - - - template - struct __is_memcmp_ordered_with - { - static const bool __value = __is_memcmp_ordered<_Tp>::__value - && __is_memcmp_ordered<_Up>::__value; - }; - - template - struct __is_memcmp_ordered_with<_Tp, _Up, false> - { - static const bool __value = false; - }; -# 532 "/usr/include/c++/10/bits/cpp_type_traits.h" 3 - template - struct __is_move_iterator - { - enum { __value = 0 }; - typedef __false_type __type; - }; - - - - template - - inline _Iterator - __miter_base(_Iterator __it) - { return __it; } - - -} -} -# 62 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/ext/type_traits.h" 1 3 -# 32 "/usr/include/c++/10/ext/type_traits.h" 3 - -# 33 "/usr/include/c++/10/ext/type_traits.h" 3 - - - - -extern "C++" { - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - template - struct __enable_if - { }; - - template - struct __enable_if - { typedef _Tp __type; }; - - - - template - struct __conditional_type - { typedef _Iftrue __type; }; - - template - struct __conditional_type - { typedef _Iffalse __type; }; - - - - template - struct __add_unsigned - { - private: - typedef __enable_if::__value, _Tp> __if_type; - - public: - typedef typename __if_type::__type __type; - }; - - template<> - struct __add_unsigned - { typedef unsigned char __type; }; - - template<> - struct __add_unsigned - { typedef unsigned char __type; }; - - template<> - struct __add_unsigned - { typedef unsigned short __type; }; - - template<> - struct __add_unsigned - { typedef unsigned int __type; }; - - template<> - struct __add_unsigned - { typedef unsigned long __type; }; - - template<> - struct __add_unsigned - { typedef unsigned long long __type; }; - - - template<> - struct __add_unsigned; - - template<> - struct __add_unsigned; - - - - template - struct __remove_unsigned - { - private: - typedef __enable_if::__value, _Tp> __if_type; - - public: - typedef typename __if_type::__type __type; - }; - - template<> - struct __remove_unsigned - { typedef signed char __type; }; - - template<> - struct __remove_unsigned - { typedef signed char __type; }; - - template<> - struct __remove_unsigned - { typedef short __type; }; - - template<> - struct __remove_unsigned - { typedef int __type; }; - - template<> - struct __remove_unsigned - { typedef long __type; }; - - template<> - struct __remove_unsigned - { typedef long long __type; }; - - - template<> - struct __remove_unsigned; - - template<> - struct __remove_unsigned; - - - - template - inline bool - __is_null_pointer(_Type* __ptr) - { return __ptr == 0; } - - template - inline bool - __is_null_pointer(_Type) - { return false; } - - - inline bool - __is_null_pointer(std::nullptr_t) - { return true; } - - - - template::__value> - struct __promote - { typedef double __type; }; - - - - - template - struct __promote<_Tp, false> - { }; - - template<> - struct __promote - { typedef long double __type; }; - - template<> - struct __promote - { typedef double __type; }; - - template<> - struct __promote - { typedef float __type; }; - - template::__type, - typename _Up2 = typename __promote<_Up>::__type> - struct __promote_2 - { - typedef __typeof__(_Tp2() + _Up2()) __type; - }; - - template::__type, - typename _Up2 = typename __promote<_Up>::__type, - typename _Vp2 = typename __promote<_Vp>::__type> - struct __promote_3 - { - typedef __typeof__(_Tp2() + _Up2() + _Vp2()) __type; - }; - - template::__type, - typename _Up2 = typename __promote<_Up>::__type, - typename _Vp2 = typename __promote<_Vp>::__type, - typename _Wp2 = typename __promote<_Wp>::__type> - struct __promote_4 - { - typedef __typeof__(_Tp2() + _Up2() + _Vp2() + _Wp2()) __type; - }; - - -} -} -# 63 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/ext/numeric_traits.h" 1 3 -# 32 "/usr/include/c++/10/ext/numeric_traits.h" 3 - -# 33 "/usr/include/c++/10/ext/numeric_traits.h" 3 - - - - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - -# 50 "/usr/include/c++/10/ext/numeric_traits.h" 3 - template - struct __is_integer_nonstrict - : public std::__is_integer<_Tp> - { - using std::__is_integer<_Tp>::__value; - - - enum { __width = __value ? sizeof(_Tp) * 8 : 0 }; - }; - - template - struct __numeric_traits_integer - { - - static_assert(__is_integer_nonstrict<_Value>::__value, - "invalid specialization"); - - - - - static const bool __is_signed = (_Value)(-1) < 0; - static const int __digits - = __is_integer_nonstrict<_Value>::__width - __is_signed; - - - static const _Value __max = __is_signed - ? (((((_Value)1 << (__digits - 1)) - 1) << 1) + 1) - : ~(_Value)0; - static const _Value __min = __is_signed ? -__max - 1 : (_Value)0; - }; - - template - const _Value __numeric_traits_integer<_Value>::__min; - - template - const _Value __numeric_traits_integer<_Value>::__max; - - template - const bool __numeric_traits_integer<_Value>::__is_signed; - - template - const int __numeric_traits_integer<_Value>::__digits; -# 135 "/usr/include/c++/10/ext/numeric_traits.h" 3 - template - using __int_traits = __numeric_traits_integer<_Tp>; -# 155 "/usr/include/c++/10/ext/numeric_traits.h" 3 - template - struct __numeric_traits_floating - { - - static const int __max_digits10 = (2 + (std::__are_same<_Value, float>::__value ? 24 : std::__are_same<_Value, double>::__value ? 53 : 64) * 643L / 2136); - - - static const bool __is_signed = true; - static const int __digits10 = (std::__are_same<_Value, float>::__value ? 6 : std::__are_same<_Value, double>::__value ? 15 : 18); - static const int __max_exponent10 = (std::__are_same<_Value, float>::__value ? 38 : std::__are_same<_Value, double>::__value ? 308 : 4932); - }; - - template - const int __numeric_traits_floating<_Value>::__max_digits10; - - template - const bool __numeric_traits_floating<_Value>::__is_signed; - - template - const int __numeric_traits_floating<_Value>::__digits10; - - template - const int __numeric_traits_floating<_Value>::__max_exponent10; - - template - struct __numeric_traits - : public __conditional_type<__is_integer_nonstrict<_Value>::__value, - __numeric_traits_integer<_Value>, - __numeric_traits_floating<_Value> >::__type - { }; - - -} -# 64 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/bits/stl_pair.h" 1 3 -# 59 "/usr/include/c++/10/bits/stl_pair.h" 3 -# 1 "/usr/include/c++/10/bits/move.h" 1 3 -# 38 "/usr/include/c++/10/bits/move.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - template - inline constexpr _Tp* - __addressof(_Tp& __r) noexcept - { return __builtin_addressof(__r); } - - - - -} - -# 1 "/usr/include/c++/10/type_traits" 1 3 -# 32 "/usr/include/c++/10/type_traits" 3 - -# 33 "/usr/include/c++/10/type_traits" 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 56 "/usr/include/c++/10/type_traits" 3 - template - struct integral_constant - { - static constexpr _Tp value = __v; - typedef _Tp value_type; - typedef integral_constant<_Tp, __v> type; - constexpr operator value_type() const noexcept { return value; } - - - - - constexpr value_type operator()() const noexcept { return value; } - - }; - - template - constexpr _Tp integral_constant<_Tp, __v>::value; - - - typedef integral_constant true_type; - - - typedef integral_constant false_type; - - template - using __bool_constant = integral_constant; -# 91 "/usr/include/c++/10/type_traits" 3 - template - struct conditional; - - template - struct __type_identity - { using type = _Type; }; - - template - using __type_identity_t = typename __type_identity<_Tp>::type; - - template - struct __or_; - - template<> - struct __or_<> - : public false_type - { }; - - template - struct __or_<_B1> - : public _B1 - { }; - - template - struct __or_<_B1, _B2> - : public conditional<_B1::value, _B1, _B2>::type - { }; - - template - struct __or_<_B1, _B2, _B3, _Bn...> - : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type - { }; - - template - struct __and_; - - template<> - struct __and_<> - : public true_type - { }; - - template - struct __and_<_B1> - : public _B1 - { }; - - template - struct __and_<_B1, _B2> - : public conditional<_B1::value, _B2, _B1>::type - { }; - - template - struct __and_<_B1, _B2, _B3, _Bn...> - : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type - { }; - - template - struct __not_ - : public __bool_constant - { }; -# 188 "/usr/include/c++/10/type_traits" 3 - template - struct is_reference; - template - struct is_function; - template - struct is_void; - template - struct __is_array_unknown_bounds; - - - - - template - constexpr true_type __is_complete_or_unbounded(__type_identity<_Tp>) - { return {}; } - - template - constexpr typename __or_< - is_reference<_NestedType>, - is_function<_NestedType>, - is_void<_NestedType>, - __is_array_unknown_bounds<_NestedType> - >::type __is_complete_or_unbounded(_TypeIdentity) - { return {}; } - - - - - - - template - struct __success_type - { typedef _Tp type; }; - - struct __failure_type - { }; - - template - struct remove_cv; - - - template - using __remove_cv_t = typename remove_cv<_Tp>::type; - - template - struct is_const; - - - - template - struct __is_void_helper - : public false_type { }; - - template<> - struct __is_void_helper - : public true_type { }; - - - template - struct is_void - : public __is_void_helper<__remove_cv_t<_Tp>>::type - { }; - - template - struct __is_integral_helper - : public false_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - - template<> - struct __is_integral_helper - : public true_type { }; -# 284 "/usr/include/c++/10/type_traits" 3 - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; - - - - - template<> - struct __is_integral_helper<__int128> - : public true_type { }; - - template<> - struct __is_integral_helper - : public true_type { }; -# 364 "/usr/include/c++/10/type_traits" 3 - template - struct is_integral - : public __is_integral_helper<__remove_cv_t<_Tp>>::type - { }; - - template - struct __is_floating_point_helper - : public false_type { }; - - template<> - struct __is_floating_point_helper - : public true_type { }; - - template<> - struct __is_floating_point_helper - : public true_type { }; - - template<> - struct __is_floating_point_helper - : public true_type { }; - - - template<> - struct __is_floating_point_helper<__float128> - : public true_type { }; - - - - template - struct is_floating_point - : public __is_floating_point_helper<__remove_cv_t<_Tp>>::type - { }; - - - template - struct is_array - : public false_type { }; - - template - struct is_array<_Tp[_Size]> - : public true_type { }; - - template - struct is_array<_Tp[]> - : public true_type { }; - - template - struct __is_pointer_helper - : public false_type { }; - - template - struct __is_pointer_helper<_Tp*> - : public true_type { }; - - - template - struct is_pointer - : public __is_pointer_helper<__remove_cv_t<_Tp>>::type - { }; - - - template - struct is_lvalue_reference - : public false_type { }; - - template - struct is_lvalue_reference<_Tp&> - : public true_type { }; - - - template - struct is_rvalue_reference - : public false_type { }; - - template - struct is_rvalue_reference<_Tp&&> - : public true_type { }; - - template - struct __is_member_object_pointer_helper - : public false_type { }; - - template - struct __is_member_object_pointer_helper<_Tp _Cp::*> - : public __not_>::type { }; - - - template - struct is_member_object_pointer - : public __is_member_object_pointer_helper<__remove_cv_t<_Tp>>::type - { }; - - template - struct __is_member_function_pointer_helper - : public false_type { }; - - template - struct __is_member_function_pointer_helper<_Tp _Cp::*> - : public is_function<_Tp>::type { }; - - - template - struct is_member_function_pointer - : public __is_member_function_pointer_helper<__remove_cv_t<_Tp>>::type - { }; - - - template - struct is_enum - : public integral_constant - { }; - - - template - struct is_union - : public integral_constant - { }; - - - template - struct is_class - : public integral_constant - { }; - - - template - struct is_function - : public __bool_constant::value> { }; - - template - struct is_function<_Tp&> - : public false_type { }; - - template - struct is_function<_Tp&&> - : public false_type { }; - - - - template - struct __is_null_pointer_helper - : public false_type { }; - - template<> - struct __is_null_pointer_helper - : public true_type { }; - - - template - struct is_null_pointer - : public __is_null_pointer_helper<__remove_cv_t<_Tp>>::type - { }; - - - template - struct __is_nullptr_t - : public is_null_pointer<_Tp> - { } __attribute__ ((__deprecated__ ("use '" "std::is_null_pointer" "' instead"))); - - - - - template - struct is_reference - : public __or_, - is_rvalue_reference<_Tp>>::type - { }; - - - template - struct is_arithmetic - : public __or_, is_floating_point<_Tp>>::type - { }; - - - template - struct is_fundamental - : public __or_, is_void<_Tp>, - is_null_pointer<_Tp>>::type - { }; - - - template - struct is_object - : public __not_<__or_, is_reference<_Tp>, - is_void<_Tp>>>::type - { }; - - template - struct is_member_pointer; - - - template - struct is_scalar - : public __or_, is_enum<_Tp>, is_pointer<_Tp>, - is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type - { }; - - - template - struct is_compound - : public __not_>::type { }; - - template - struct __is_member_pointer_helper - : public false_type { }; - - template - struct __is_member_pointer_helper<_Tp _Cp::*> - : public true_type { }; - - - template - struct is_member_pointer - : public __is_member_pointer_helper<__remove_cv_t<_Tp>>::type - { }; - - template - struct is_same; - - template - using __is_one_of = __or_...>; - - - template - using __is_signed_integer = __is_one_of<__remove_cv_t<_Tp>, - signed char, signed short, signed int, signed long, - signed long long - - , signed __int128 -# 604 "/usr/include/c++/10/type_traits" 3 - >; - - - template - using __is_unsigned_integer = __is_one_of<__remove_cv_t<_Tp>, - unsigned char, unsigned short, unsigned int, unsigned long, - unsigned long long - - , unsigned __int128 -# 623 "/usr/include/c++/10/type_traits" 3 - >; - - - template - using __is_standard_integer - = __or_<__is_signed_integer<_Tp>, __is_unsigned_integer<_Tp>>; - - - template using __void_t = void; - - - - template - struct __is_referenceable - : public false_type - { }; - - template - struct __is_referenceable<_Tp, __void_t<_Tp&>> - : public true_type - { }; - - - - - template - struct is_const - : public false_type { }; - - template - struct is_const<_Tp const> - : public true_type { }; - - - template - struct is_volatile - : public false_type { }; - - template - struct is_volatile<_Tp volatile> - : public true_type { }; - - - template - struct is_trivial - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_trivially_copyable - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_standard_layout - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - - template - struct - - is_pod - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_literal_type - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_empty - : public integral_constant - { }; - - - template - struct is_polymorphic - : public integral_constant - { }; - - - - - template - struct is_final - : public integral_constant - { }; - - - - template - struct is_abstract - : public integral_constant - { }; - - template::value> - struct __is_signed_helper - : public false_type { }; - - template - struct __is_signed_helper<_Tp, true> - : public integral_constant - { }; - - - template - struct is_signed - : public __is_signed_helper<_Tp>::type - { }; - - - template - struct is_unsigned - : public __and_, __not_>> - { }; -# 770 "/usr/include/c++/10/type_traits" 3 - template - _Up - __declval(int); - - template - _Tp - __declval(long); - - template - auto declval() noexcept -> decltype(__declval<_Tp>(0)); - - template - struct extent; - - template - struct remove_all_extents; - - template - struct __is_array_known_bounds - : public integral_constant::value > 0)> - { }; - - template - struct __is_array_unknown_bounds - : public __and_, __not_>> - { }; - - - - - - - struct __do_is_destructible_impl - { - template().~_Tp())> - static true_type __test(int); - - template - static false_type __test(...); - }; - - template - struct __is_destructible_impl - : public __do_is_destructible_impl - { - typedef decltype(__test<_Tp>(0)) type; - }; - - template, - __is_array_unknown_bounds<_Tp>, - is_function<_Tp>>::value, - bool = __or_, is_scalar<_Tp>>::value> - struct __is_destructible_safe; - - template - struct __is_destructible_safe<_Tp, false, false> - : public __is_destructible_impl::type>::type - { }; - - template - struct __is_destructible_safe<_Tp, true, false> - : public false_type { }; - - template - struct __is_destructible_safe<_Tp, false, true> - : public true_type { }; - - - template - struct is_destructible - : public __is_destructible_safe<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - - - - struct __do_is_nt_destructible_impl - { - template - static __bool_constant().~_Tp())> - __test(int); - - template - static false_type __test(...); - }; - - template - struct __is_nt_destructible_impl - : public __do_is_nt_destructible_impl - { - typedef decltype(__test<_Tp>(0)) type; - }; - - template, - __is_array_unknown_bounds<_Tp>, - is_function<_Tp>>::value, - bool = __or_, is_scalar<_Tp>>::value> - struct __is_nt_destructible_safe; - - template - struct __is_nt_destructible_safe<_Tp, false, false> - : public __is_nt_destructible_impl::type>::type - { }; - - template - struct __is_nt_destructible_safe<_Tp, true, false> - : public false_type { }; - - template - struct __is_nt_destructible_safe<_Tp, false, true> - : public true_type { }; - - - template - struct is_nothrow_destructible - : public __is_nt_destructible_safe<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template - struct __is_constructible_impl - : public __bool_constant<__is_constructible(_Tp, _Args...)> - { }; - - - template - struct is_constructible - : public __is_constructible_impl<_Tp, _Args...> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_default_constructible - : public __is_constructible_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_copy_constructible_impl; - - template - struct __is_copy_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_copy_constructible_impl<_Tp, true> - : public __is_constructible_impl<_Tp, const _Tp&> - { }; - - - template - struct is_copy_constructible - : public __is_copy_constructible_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_move_constructible_impl; - - template - struct __is_move_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_move_constructible_impl<_Tp, true> - : public __is_constructible_impl<_Tp, _Tp&&> - { }; - - - template - struct is_move_constructible - : public __is_move_constructible_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template - struct __is_nt_constructible_impl - : public false_type - { }; - - template - struct __is_nt_constructible_impl - : public __bool_constant()...))> - { }; - - template - struct __is_nt_constructible_impl - : public __bool_constant(std::declval<_Arg>()))> - { }; - - template - struct __is_nt_constructible_impl - : public __bool_constant - { }; - - template - struct __is_nt_constructible_impl - : public __bool_constant::type())> - { }; -# 1001 "/usr/include/c++/10/type_traits" 3 - template - using __is_nothrow_constructible_impl - = __is_nt_constructible_impl<__is_constructible(_Tp, _Args...), - _Tp, _Args...>; - - - template - struct is_nothrow_constructible - : public __is_nothrow_constructible_impl<_Tp, _Args...>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_nothrow_default_constructible - : public __is_nothrow_constructible_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template::value> - struct __is_nothrow_copy_constructible_impl; - - template - struct __is_nothrow_copy_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_nothrow_copy_constructible_impl<_Tp, true> - : public __is_nothrow_constructible_impl<_Tp, const _Tp&> - { }; - - - template - struct is_nothrow_copy_constructible - : public __is_nothrow_copy_constructible_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_nothrow_move_constructible_impl; - - template - struct __is_nothrow_move_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_nothrow_move_constructible_impl<_Tp, true> - : public __is_nothrow_constructible_impl<_Tp, _Tp&&> - { }; - - - template - struct is_nothrow_move_constructible - : public __is_nothrow_move_constructible_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_assignable - : public __bool_constant<__is_assignable(_Tp, _Up)> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_copy_assignable_impl; - - template - struct __is_copy_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_copy_assignable_impl<_Tp, true> - : public __bool_constant<__is_assignable(_Tp&, const _Tp&)> - { }; - - - template - struct is_copy_assignable - : public __is_copy_assignable_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_move_assignable_impl; - - template - struct __is_move_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_move_assignable_impl<_Tp, true> - : public __bool_constant<__is_assignable(_Tp&, _Tp&&)> - { }; - - - template - struct is_move_assignable - : public __is_move_assignable_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template - struct __is_nt_assignable_impl - : public integral_constant() = declval<_Up>())> - { }; - - template - struct __is_nothrow_assignable_impl - : public __and_<__bool_constant<__is_assignable(_Tp, _Up)>, - __is_nt_assignable_impl<_Tp, _Up>> - { }; - - - template - struct is_nothrow_assignable - : public __is_nothrow_assignable_impl<_Tp, _Up> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_nt_copy_assignable_impl; - - template - struct __is_nt_copy_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_nt_copy_assignable_impl<_Tp, true> - : public __is_nothrow_assignable_impl<_Tp&, const _Tp&> - { }; - - - template - struct is_nothrow_copy_assignable - : public __is_nt_copy_assignable_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_nt_move_assignable_impl; - - template - struct __is_nt_move_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_nt_move_assignable_impl<_Tp, true> - : public __is_nothrow_assignable_impl<_Tp&, _Tp&&> - { }; - - - template - struct is_nothrow_move_assignable - : public __is_nt_move_assignable_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_trivially_constructible - : public __bool_constant<__is_trivially_constructible(_Tp, _Args...)> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_trivially_default_constructible - : public __bool_constant<__is_trivially_constructible(_Tp)> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - struct __do_is_implicitly_default_constructible_impl - { - template - static void __helper(const _Tp&); - - template - static true_type __test(const _Tp&, - decltype(__helper({}))* = 0); - - static false_type __test(...); - }; - - template - struct __is_implicitly_default_constructible_impl - : public __do_is_implicitly_default_constructible_impl - { - typedef decltype(__test(declval<_Tp>())) type; - }; - - template - struct __is_implicitly_default_constructible_safe - : public __is_implicitly_default_constructible_impl<_Tp>::type - { }; - - template - struct __is_implicitly_default_constructible - : public __and_<__is_constructible_impl<_Tp>, - __is_implicitly_default_constructible_safe<_Tp>> - { }; - - template::value> - struct __is_trivially_copy_constructible_impl; - - template - struct __is_trivially_copy_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_trivially_copy_constructible_impl<_Tp, true> - : public __and_<__is_copy_constructible_impl<_Tp>, - integral_constant> - { }; - - - template - struct is_trivially_copy_constructible - : public __is_trivially_copy_constructible_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_trivially_move_constructible_impl; - - template - struct __is_trivially_move_constructible_impl<_Tp, false> - : public false_type { }; - - template - struct __is_trivially_move_constructible_impl<_Tp, true> - : public __and_<__is_move_constructible_impl<_Tp>, - integral_constant> - { }; - - - template - struct is_trivially_move_constructible - : public __is_trivially_move_constructible_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_trivially_assignable - : public __bool_constant<__is_trivially_assignable(_Tp, _Up)> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_trivially_copy_assignable_impl; - - template - struct __is_trivially_copy_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_trivially_copy_assignable_impl<_Tp, true> - : public __bool_constant<__is_trivially_assignable(_Tp&, const _Tp&)> - { }; - - - template - struct is_trivially_copy_assignable - : public __is_trivially_copy_assignable_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - template::value> - struct __is_trivially_move_assignable_impl; - - template - struct __is_trivially_move_assignable_impl<_Tp, false> - : public false_type { }; - - template - struct __is_trivially_move_assignable_impl<_Tp, true> - : public __bool_constant<__is_trivially_assignable(_Tp&, _Tp&&)> - { }; - - - template - struct is_trivially_move_assignable - : public __is_trivially_move_assignable_impl<_Tp> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_trivially_destructible - : public __and_<__is_destructible_safe<_Tp>, - __bool_constant<__has_trivial_destructor(_Tp)>> - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - - template - struct has_virtual_destructor - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - - - - template - struct alignment_of - : public integral_constant - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct rank - : public integral_constant { }; - - template - struct rank<_Tp[_Size]> - : public integral_constant::value> { }; - - template - struct rank<_Tp[]> - : public integral_constant::value> { }; - - - template - struct extent - : public integral_constant { }; - - template - struct extent<_Tp[_Size], _Uint> - : public integral_constant::value> - { }; - - template - struct extent<_Tp[], _Uint> - : public integral_constant::value> - { }; - - - - - - template - struct is_same - - : public integral_constant - - - - { }; -# 1410 "/usr/include/c++/10/type_traits" 3 - template - struct is_base_of - : public integral_constant - { }; - - template, is_function<_To>, - is_array<_To>>::value> - struct __is_convertible_helper - { - typedef typename is_void<_To>::type type; - }; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" - template - class __is_convertible_helper<_From, _To, false> - { - template - static void __test_aux(_To1) noexcept; - - template(std::declval<_From1>()))> - static true_type - __test(int); - - template - static false_type - __test(...); - - public: - typedef decltype(__test<_From, _To>(0)) type; - }; -#pragma GCC diagnostic pop - - - template - struct is_convertible - : public __is_convertible_helper<_From, _To>::type - { }; - - - template - using __is_array_convertible - = is_convertible<_FromElementType(*)[], _ToElementType(*)[]>; - - template, is_function<_To>, - is_array<_To>>::value> - struct __is_nt_convertible_helper - : is_void<_To> - { }; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" - template - class __is_nt_convertible_helper<_From, _To, false> - { - template - static void __test_aux(_To1) noexcept; - - template - static - __bool_constant(std::declval<_From1>()))> - __test(int); - - template - static false_type - __test(...); - - public: - using type = decltype(__test<_From, _To>(0)); - }; -#pragma GCC diagnostic pop - - - template - struct __is_nothrow_convertible - : public __is_nt_convertible_helper<_From, _To>::type - { }; -# 1508 "/usr/include/c++/10/type_traits" 3 - template - struct remove_const - { typedef _Tp type; }; - - template - struct remove_const<_Tp const> - { typedef _Tp type; }; - - - template - struct remove_volatile - { typedef _Tp type; }; - - template - struct remove_volatile<_Tp volatile> - { typedef _Tp type; }; - - - template - struct remove_cv - { using type = _Tp; }; - - template - struct remove_cv - { using type = _Tp; }; - - template - struct remove_cv - { using type = _Tp; }; - - template - struct remove_cv - { using type = _Tp; }; - - - template - struct add_const - { typedef _Tp const type; }; - - - template - struct add_volatile - { typedef _Tp volatile type; }; - - - template - struct add_cv - { - typedef typename - add_const::type>::type type; - }; - - - - - - - template - using remove_const_t = typename remove_const<_Tp>::type; - - - template - using remove_volatile_t = typename remove_volatile<_Tp>::type; - - - template - using remove_cv_t = typename remove_cv<_Tp>::type; - - - template - using add_const_t = typename add_const<_Tp>::type; - - - template - using add_volatile_t = typename add_volatile<_Tp>::type; - - - template - using add_cv_t = typename add_cv<_Tp>::type; - - - - - - template - struct remove_reference - { typedef _Tp type; }; - - template - struct remove_reference<_Tp&> - { typedef _Tp type; }; - - template - struct remove_reference<_Tp&&> - { typedef _Tp type; }; - - template::value> - struct __add_lvalue_reference_helper - { typedef _Tp type; }; - - template - struct __add_lvalue_reference_helper<_Tp, true> - { typedef _Tp& type; }; - - - template - struct add_lvalue_reference - : public __add_lvalue_reference_helper<_Tp> - { }; - - template::value> - struct __add_rvalue_reference_helper - { typedef _Tp type; }; - - template - struct __add_rvalue_reference_helper<_Tp, true> - { typedef _Tp&& type; }; - - - template - struct add_rvalue_reference - : public __add_rvalue_reference_helper<_Tp> - { }; - - - - template - using remove_reference_t = typename remove_reference<_Tp>::type; - - - template - using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type; - - - template - using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type; - - - - - - template - struct __cv_selector; - - template - struct __cv_selector<_Unqualified, false, false> - { typedef _Unqualified __type; }; - - template - struct __cv_selector<_Unqualified, false, true> - { typedef volatile _Unqualified __type; }; - - template - struct __cv_selector<_Unqualified, true, false> - { typedef const _Unqualified __type; }; - - template - struct __cv_selector<_Unqualified, true, true> - { typedef const volatile _Unqualified __type; }; - - template::value, - bool _IsVol = is_volatile<_Qualified>::value> - class __match_cv_qualifiers - { - typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match; - - public: - typedef typename __match::__type __type; - }; - - - template - struct __make_unsigned - { typedef _Tp __type; }; - - template<> - struct __make_unsigned - { typedef unsigned char __type; }; - - template<> - struct __make_unsigned - { typedef unsigned char __type; }; - - template<> - struct __make_unsigned - { typedef unsigned short __type; }; - - template<> - struct __make_unsigned - { typedef unsigned int __type; }; - - template<> - struct __make_unsigned - { typedef unsigned long __type; }; - - template<> - struct __make_unsigned - { typedef unsigned long long __type; }; - - - template<> - struct __make_unsigned<__int128> - { typedef unsigned __int128 __type; }; -# 1730 "/usr/include/c++/10/type_traits" 3 - template::value, - bool _IsEnum = is_enum<_Tp>::value> - class __make_unsigned_selector; - - template - class __make_unsigned_selector<_Tp, true, false> - { - using __unsigned_type - = typename __make_unsigned<__remove_cv_t<_Tp>>::__type; - - public: - using __type - = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; - }; - - class __make_unsigned_selector_base - { - protected: - template struct _List { }; - - template - struct _List<_Tp, _Up...> : _List<_Up...> - { static constexpr size_t __size = sizeof(_Tp); }; - - template - struct __select; - - template - struct __select<_Sz, _List<_Uint, _UInts...>, true> - { using __type = _Uint; }; - - template - struct __select<_Sz, _List<_Uint, _UInts...>, false> - : __select<_Sz, _List<_UInts...>> - { }; - }; - - - template - class __make_unsigned_selector<_Tp, false, true> - : __make_unsigned_selector_base - { - - using _UInts = _List; - - using __unsigned_type = typename __select::__type; - - public: - using __type - = typename __match_cv_qualifiers<_Tp, __unsigned_type>::__type; - }; - - - - - - - template<> - struct __make_unsigned - { - using __type - = typename __make_unsigned_selector::__type; - }; -# 1806 "/usr/include/c++/10/type_traits" 3 - template<> - struct __make_unsigned - { - using __type - = typename __make_unsigned_selector::__type; - }; - - template<> - struct __make_unsigned - { - using __type - = typename __make_unsigned_selector::__type; - }; - - - - - - template - struct make_unsigned - { typedef typename __make_unsigned_selector<_Tp>::__type type; }; - - - template<> - struct make_unsigned; - - - - template - struct __make_signed - { typedef _Tp __type; }; - - template<> - struct __make_signed - { typedef signed char __type; }; - - template<> - struct __make_signed - { typedef signed char __type; }; - - template<> - struct __make_signed - { typedef signed short __type; }; - - template<> - struct __make_signed - { typedef signed int __type; }; - - template<> - struct __make_signed - { typedef signed long __type; }; - - template<> - struct __make_signed - { typedef signed long long __type; }; - - - template<> - struct __make_signed - { typedef __int128 __type; }; -# 1884 "/usr/include/c++/10/type_traits" 3 - template::value, - bool _IsEnum = is_enum<_Tp>::value> - class __make_signed_selector; - - template - class __make_signed_selector<_Tp, true, false> - { - using __signed_type - = typename __make_signed<__remove_cv_t<_Tp>>::__type; - - public: - using __type - = typename __match_cv_qualifiers<_Tp, __signed_type>::__type; - }; - - - template - class __make_signed_selector<_Tp, false, true> - { - typedef typename __make_unsigned_selector<_Tp>::__type __unsigned_type; - - public: - typedef typename __make_signed_selector<__unsigned_type>::__type __type; - }; - - - - - - - template<> - struct __make_signed - { - using __type - = typename __make_signed_selector::__type; - }; -# 1932 "/usr/include/c++/10/type_traits" 3 - template<> - struct __make_signed - { - using __type - = typename __make_signed_selector::__type; - }; - - template<> - struct __make_signed - { - using __type - = typename __make_signed_selector::__type; - }; - - - - - - template - struct make_signed - { typedef typename __make_signed_selector<_Tp>::__type type; }; - - - template<> - struct make_signed; - - - - template - using make_signed_t = typename make_signed<_Tp>::type; - - - template - using make_unsigned_t = typename make_unsigned<_Tp>::type; - - - - - - template - struct remove_extent - { typedef _Tp type; }; - - template - struct remove_extent<_Tp[_Size]> - { typedef _Tp type; }; - - template - struct remove_extent<_Tp[]> - { typedef _Tp type; }; - - - template - struct remove_all_extents - { typedef _Tp type; }; - - template - struct remove_all_extents<_Tp[_Size]> - { typedef typename remove_all_extents<_Tp>::type type; }; - - template - struct remove_all_extents<_Tp[]> - { typedef typename remove_all_extents<_Tp>::type type; }; - - - - template - using remove_extent_t = typename remove_extent<_Tp>::type; - - - template - using remove_all_extents_t = typename remove_all_extents<_Tp>::type; - - - - - template - struct __remove_pointer_helper - { typedef _Tp type; }; - - template - struct __remove_pointer_helper<_Tp, _Up*> - { typedef _Up type; }; - - - template - struct remove_pointer - : public __remove_pointer_helper<_Tp, __remove_cv_t<_Tp>> - { }; - - - template, - is_void<_Tp>>::value> - struct __add_pointer_helper - { typedef _Tp type; }; - - template - struct __add_pointer_helper<_Tp, true> - { typedef typename remove_reference<_Tp>::type* type; }; - - template - struct add_pointer - : public __add_pointer_helper<_Tp> - { }; - - - - template - using remove_pointer_t = typename remove_pointer<_Tp>::type; - - - template - using add_pointer_t = typename add_pointer<_Tp>::type; - - - template - struct __aligned_storage_msa - { - union __type - { - unsigned char __data[_Len]; - struct __attribute__((__aligned__)) { } __align; - }; - }; -# 2067 "/usr/include/c++/10/type_traits" 3 - template::__type)> - struct aligned_storage - { - union type - { - unsigned char __data[_Len]; - struct __attribute__((__aligned__((_Align)))) { } __align; - }; - }; - - template - struct __strictest_alignment - { - static const size_t _S_alignment = 0; - static const size_t _S_size = 0; - }; - - template - struct __strictest_alignment<_Tp, _Types...> - { - static const size_t _S_alignment = - alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment - ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment; - static const size_t _S_size = - sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size - ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size; - }; -# 2106 "/usr/include/c++/10/type_traits" 3 - template - struct aligned_union - { - private: - static_assert(sizeof...(_Types) != 0, "At least one type is required"); - - using __strictest = __strictest_alignment<_Types...>; - static const size_t _S_len = _Len > __strictest::_S_size - ? _Len : __strictest::_S_size; - public: - - static const size_t alignment_value = __strictest::_S_alignment; - - typedef typename aligned_storage<_S_len, alignment_value>::type type; - }; - - template - const size_t aligned_union<_Len, _Types...>::alignment_value; - - - - template::value, - bool _IsFunction = is_function<_Up>::value> - struct __decay_selector; - - - template - struct __decay_selector<_Up, false, false> - { typedef __remove_cv_t<_Up> __type; }; - - template - struct __decay_selector<_Up, true, false> - { typedef typename remove_extent<_Up>::type* __type; }; - - template - struct __decay_selector<_Up, false, true> - { typedef typename add_pointer<_Up>::type __type; }; - - - template - class decay - { - typedef typename remove_reference<_Tp>::type __remove_type; - - public: - typedef typename __decay_selector<__remove_type>::__type type; - }; - - - template - using __decay_t = typename decay<_Tp>::type; - - template - class reference_wrapper; - - - template - struct __strip_reference_wrapper - { - typedef _Tp __type; - }; - - template - struct __strip_reference_wrapper > - { - typedef _Tp& __type; - }; - - template - using __decay_and_strip = __strip_reference_wrapper<__decay_t<_Tp>>; - - - - - template - struct enable_if - { }; - - - template - struct enable_if - { typedef _Tp type; }; - - - template - using __enable_if_t = typename enable_if<_Cond, _Tp>::type; - - template - using _Require = __enable_if_t<__and_<_Cond...>::value>; - - - - template - struct conditional - { typedef _Iftrue type; }; - - - template - struct conditional - { typedef _Iffalse type; }; - - - template - using __remove_cvref_t - = typename remove_cv::type>::type; - - - template - struct common_type; - - - - struct __do_common_type_impl - { - template - using __cond_t - = decltype(true ? std::declval<_Tp>() : std::declval<_Up>()); - - - - template - static __success_type<__decay_t<__cond_t<_Tp, _Up>>> - _S_test(int); -# 2239 "/usr/include/c++/10/type_traits" 3 - template - static __failure_type - _S_test_2(...); - - template - static decltype(_S_test_2<_Tp, _Up>(0)) - _S_test(...); - }; - - - template<> - struct common_type<> - { }; - - - template - struct common_type<_Tp0> - : public common_type<_Tp0, _Tp0> - { }; - - - template, typename _Dp2 = __decay_t<_Tp2>> - struct __common_type_impl - { - - - using type = common_type<_Dp1, _Dp2>; - }; - - template - struct __common_type_impl<_Tp1, _Tp2, _Tp1, _Tp2> - : private __do_common_type_impl - { - - - using type = decltype(_S_test<_Tp1, _Tp2>(0)); - }; - - - template - struct common_type<_Tp1, _Tp2> - : public __common_type_impl<_Tp1, _Tp2>::type - { }; - - template - struct __common_type_pack - { }; - - template - struct __common_type_fold; - - - template - struct common_type<_Tp1, _Tp2, _Rp...> - : public __common_type_fold, - __common_type_pack<_Rp...>> - { }; - - - - - template - struct __common_type_fold<_CTp, __common_type_pack<_Rp...>, - __void_t> - : public common_type - { }; - - - template - struct __common_type_fold<_CTp, _Rp, void> - { }; - - template::value> - struct __underlying_type_impl - { - using type = __underlying_type(_Tp); - }; - - template - struct __underlying_type_impl<_Tp, false> - { }; - - - template - struct underlying_type - : public __underlying_type_impl<_Tp> - { }; - - template - struct __declval_protector - { - static const bool __stop = false; - }; - - template - auto declval() noexcept -> decltype(__declval<_Tp>(0)) - { - static_assert(__declval_protector<_Tp>::__stop, - "declval() must not be used!"); - return __declval<_Tp>(0); - } - - - template - class result_of; - - - - - - struct __invoke_memfun_ref { }; - struct __invoke_memfun_deref { }; - struct __invoke_memobj_ref { }; - struct __invoke_memobj_deref { }; - struct __invoke_other { }; - - - template - struct __result_of_success : __success_type<_Tp> - { using __invoke_type = _Tag; }; - - - struct __result_of_memfun_ref_impl - { - template - static __result_of_success().*std::declval<_Fp>())(std::declval<_Args>()...) - ), __invoke_memfun_ref> _S_test(int); - - template - static __failure_type _S_test(...); - }; - - template - struct __result_of_memfun_ref - : private __result_of_memfun_ref_impl - { - typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; - }; - - - struct __result_of_memfun_deref_impl - { - template - static __result_of_success()).*std::declval<_Fp>())(std::declval<_Args>()...) - ), __invoke_memfun_deref> _S_test(int); - - template - static __failure_type _S_test(...); - }; - - template - struct __result_of_memfun_deref - : private __result_of_memfun_deref_impl - { - typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type; - }; - - - struct __result_of_memobj_ref_impl - { - template - static __result_of_success().*std::declval<_Fp>() - ), __invoke_memobj_ref> _S_test(int); - - template - static __failure_type _S_test(...); - }; - - template - struct __result_of_memobj_ref - : private __result_of_memobj_ref_impl - { - typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; - }; - - - struct __result_of_memobj_deref_impl - { - template - static __result_of_success()).*std::declval<_Fp>() - ), __invoke_memobj_deref> _S_test(int); - - template - static __failure_type _S_test(...); - }; - - template - struct __result_of_memobj_deref - : private __result_of_memobj_deref_impl - { - typedef decltype(_S_test<_MemPtr, _Arg>(0)) type; - }; - - template - struct __result_of_memobj; - - template - struct __result_of_memobj<_Res _Class::*, _Arg> - { - typedef __remove_cvref_t<_Arg> _Argval; - typedef _Res _Class::* _MemPtr; - typedef typename conditional<__or_, - is_base_of<_Class, _Argval>>::value, - __result_of_memobj_ref<_MemPtr, _Arg>, - __result_of_memobj_deref<_MemPtr, _Arg> - >::type::type type; - }; - - template - struct __result_of_memfun; - - template - struct __result_of_memfun<_Res _Class::*, _Arg, _Args...> - { - typedef typename remove_reference<_Arg>::type _Argval; - typedef _Res _Class::* _MemPtr; - typedef typename conditional::value, - __result_of_memfun_ref<_MemPtr, _Arg, _Args...>, - __result_of_memfun_deref<_MemPtr, _Arg, _Args...> - >::type::type type; - }; - - - - - - - template> - struct __inv_unwrap - { - using type = _Tp; - }; - - template - struct __inv_unwrap<_Tp, reference_wrapper<_Up>> - { - using type = _Up&; - }; - - template - struct __result_of_impl - { - typedef __failure_type type; - }; - - template - struct __result_of_impl - : public __result_of_memobj<__decay_t<_MemPtr>, - typename __inv_unwrap<_Arg>::type> - { }; - - template - struct __result_of_impl - : public __result_of_memfun<__decay_t<_MemPtr>, - typename __inv_unwrap<_Arg>::type, _Args...> - { }; - - - struct __result_of_other_impl - { - template - static __result_of_success()(std::declval<_Args>()...) - ), __invoke_other> _S_test(int); - - template - static __failure_type _S_test(...); - }; - - template - struct __result_of_impl - : private __result_of_other_impl - { - typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type; - }; - - - template - struct __invoke_result - : public __result_of_impl< - is_member_object_pointer< - typename remove_reference<_Functor>::type - >::value, - is_member_function_pointer< - typename remove_reference<_Functor>::type - >::value, - _Functor, _ArgTypes... - >::type - { }; - - template - struct result_of<_Functor(_ArgTypes...)> - : public __invoke_result<_Functor, _ArgTypes...> - { }; - - - - template::__type)> - using aligned_storage_t = typename aligned_storage<_Len, _Align>::type; - - template - using aligned_union_t = typename aligned_union<_Len, _Types...>::type; - - - template - using decay_t = typename decay<_Tp>::type; - - - template - using enable_if_t = typename enable_if<_Cond, _Tp>::type; - - - template - using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type; - - - template - using common_type_t = typename common_type<_Tp...>::type; - - - template - using underlying_type_t = typename underlying_type<_Tp>::type; - - - template - using result_of_t = typename result_of<_Tp>::type; - - - - - - template using void_t = void; - - - - template class _Op, typename... _Args> - struct __detector - { - using value_t = false_type; - using type = _Default; - }; - - - template class _Op, - typename... _Args> - struct __detector<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> - { - using value_t = true_type; - using type = _Op<_Args...>; - }; - - - template class _Op, - typename... _Args> - using __detected_or = __detector<_Default, void, _Op, _Args...>; - - - template class _Op, - typename... _Args> - using __detected_or_t - = typename __detected_or<_Default, _Op, _Args...>::type; -# 2624 "/usr/include/c++/10/type_traits" 3 - template - struct __is_swappable; - - template - struct __is_nothrow_swappable; - - template - class tuple; - - template - struct __is_tuple_like_impl : false_type - { }; - - template - struct __is_tuple_like_impl> : true_type - { }; - - - template - struct __is_tuple_like - : public __is_tuple_like_impl<__remove_cvref_t<_Tp>>::type - { }; - - template - - inline - _Require<__not_<__is_tuple_like<_Tp>>, - is_move_constructible<_Tp>, - is_move_assignable<_Tp>> - swap(_Tp&, _Tp&) - noexcept(__and_, - is_nothrow_move_assignable<_Tp>>::value); - - template - - inline - __enable_if_t<__is_swappable<_Tp>::value> - swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) - noexcept(__is_nothrow_swappable<_Tp>::value); - - namespace __swappable_details { - using std::swap; - - struct __do_is_swappable_impl - { - template(), std::declval<_Tp&>()))> - static true_type __test(int); - - template - static false_type __test(...); - }; - - struct __do_is_nothrow_swappable_impl - { - template - static __bool_constant< - noexcept(swap(std::declval<_Tp&>(), std::declval<_Tp&>())) - > __test(int); - - template - static false_type __test(...); - }; - - } - - template - struct __is_swappable_impl - : public __swappable_details::__do_is_swappable_impl - { - typedef decltype(__test<_Tp>(0)) type; - }; - - template - struct __is_nothrow_swappable_impl - : public __swappable_details::__do_is_nothrow_swappable_impl - { - typedef decltype(__test<_Tp>(0)) type; - }; - - template - struct __is_swappable - : public __is_swappable_impl<_Tp>::type - { }; - - template - struct __is_nothrow_swappable - : public __is_nothrow_swappable_impl<_Tp>::type - { }; - - - - - - - template - struct is_swappable - : public __is_swappable_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - template - struct is_nothrow_swappable - : public __is_nothrow_swappable_impl<_Tp>::type - { - static_assert(std::__is_complete_or_unbounded(__type_identity<_Tp>{}), - "template argument must be a complete class or an unbounded array"); - }; - - - - template - constexpr bool is_swappable_v = - is_swappable<_Tp>::value; - - - template - constexpr bool is_nothrow_swappable_v = - is_nothrow_swappable<_Tp>::value; - - - namespace __swappable_with_details { - using std::swap; - - struct __do_is_swappable_with_impl - { - template(), std::declval<_Up>())), - typename - = decltype(swap(std::declval<_Up>(), std::declval<_Tp>()))> - static true_type __test(int); - - template - static false_type __test(...); - }; - - struct __do_is_nothrow_swappable_with_impl - { - template - static __bool_constant< - noexcept(swap(std::declval<_Tp>(), std::declval<_Up>())) - && - noexcept(swap(std::declval<_Up>(), std::declval<_Tp>())) - > __test(int); - - template - static false_type __test(...); - }; - - } - - template - struct __is_swappable_with_impl - : public __swappable_with_details::__do_is_swappable_with_impl - { - typedef decltype(__test<_Tp, _Up>(0)) type; - }; - - - template - struct __is_swappable_with_impl<_Tp&, _Tp&> - : public __swappable_details::__do_is_swappable_impl - { - typedef decltype(__test<_Tp&>(0)) type; - }; - - template - struct __is_nothrow_swappable_with_impl - : public __swappable_with_details::__do_is_nothrow_swappable_with_impl - { - typedef decltype(__test<_Tp, _Up>(0)) type; - }; - - - template - struct __is_nothrow_swappable_with_impl<_Tp&, _Tp&> - : public __swappable_details::__do_is_nothrow_swappable_impl - { - typedef decltype(__test<_Tp&>(0)) type; - }; - - - template - struct is_swappable_with - : public __is_swappable_with_impl<_Tp, _Up>::type - { }; - - - template - struct is_nothrow_swappable_with - : public __is_nothrow_swappable_with_impl<_Tp, _Up>::type - { }; - - - - template - constexpr bool is_swappable_with_v = - is_swappable_with<_Tp, _Up>::value; - - - template - constexpr bool is_nothrow_swappable_with_v = - is_nothrow_swappable_with<_Tp, _Up>::value; - - - - - - - - template::value, typename = void> - struct __is_invocable_impl : false_type { }; - - - template - struct __is_invocable_impl<_Result, _Ret, - true, - __void_t> - : true_type - { }; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" - - template - struct __is_invocable_impl<_Result, _Ret, - false, - __void_t> - { - private: - - - static typename _Result::type _S_get(); - - template - static void _S_conv(_Tp); - - - template(_S_get()))> - static true_type - _S_test(int); - - template - static false_type - _S_test(...); - - public: - using type = decltype(_S_test<_Ret>(1)); - }; -#pragma GCC diagnostic pop - - template - struct __is_invocable - : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type - { }; - - template - constexpr bool __call_is_nt(__invoke_memfun_ref) - { - using _Up = typename __inv_unwrap<_Tp>::type; - return noexcept((std::declval<_Up>().*std::declval<_Fn>())( - std::declval<_Args>()...)); - } - - template - constexpr bool __call_is_nt(__invoke_memfun_deref) - { - return noexcept(((*std::declval<_Tp>()).*std::declval<_Fn>())( - std::declval<_Args>()...)); - } - - template - constexpr bool __call_is_nt(__invoke_memobj_ref) - { - using _Up = typename __inv_unwrap<_Tp>::type; - return noexcept(std::declval<_Up>().*std::declval<_Fn>()); - } - - template - constexpr bool __call_is_nt(__invoke_memobj_deref) - { - return noexcept((*std::declval<_Tp>()).*std::declval<_Fn>()); - } - - template - constexpr bool __call_is_nt(__invoke_other) - { - return noexcept(std::declval<_Fn>()(std::declval<_Args>()...)); - } - - template - struct __call_is_nothrow - : __bool_constant< - std::__call_is_nt<_Fn, _Args...>(typename _Result::__invoke_type{}) - > - { }; - - template - using __call_is_nothrow_ - = __call_is_nothrow<__invoke_result<_Fn, _Args...>, _Fn, _Args...>; - - - template - struct __is_nothrow_invocable - : __and_<__is_invocable<_Fn, _Args...>, - __call_is_nothrow_<_Fn, _Args...>>::type - { }; - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" - struct __nonesuchbase {}; - struct __nonesuch : private __nonesuchbase { - ~__nonesuch() = delete; - __nonesuch(__nonesuch const&) = delete; - void operator=(__nonesuch const&) = delete; - }; -#pragma GCC diagnostic pop -# 3455 "/usr/include/c++/10/type_traits" 3 - -} -# 58 "/usr/include/c++/10/bits/move.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 74 "/usr/include/c++/10/bits/move.h" 3 - template - constexpr _Tp&& - forward(typename std::remove_reference<_Tp>::type& __t) noexcept - { return static_cast<_Tp&&>(__t); } - - - - - - - - template - constexpr _Tp&& - forward(typename std::remove_reference<_Tp>::type&& __t) noexcept - { - static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument" - " substituting _Tp is an lvalue reference type"); - return static_cast<_Tp&&>(__t); - } - - - - - - - template - constexpr typename std::remove_reference<_Tp>::type&& - move(_Tp&& __t) noexcept - { return static_cast::type&&>(__t); } - - - template - struct __move_if_noexcept_cond - : public __and_<__not_>, - is_copy_constructible<_Tp>>::type { }; -# 118 "/usr/include/c++/10/bits/move.h" 3 - template - constexpr typename - conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type - move_if_noexcept(_Tp& __x) noexcept - { return std::move(__x); } -# 138 "/usr/include/c++/10/bits/move.h" 3 - template - inline _Tp* - addressof(_Tp& __r) noexcept - { return std::__addressof(__r); } - - - - template - const _Tp* addressof(const _Tp&&) = delete; - - - template - - inline _Tp - __exchange(_Tp& __obj, _Up&& __new_val) - { - _Tp __old_val = std::move(__obj); - __obj = std::forward<_Up>(__new_val); - return __old_val; - } -# 179 "/usr/include/c++/10/bits/move.h" 3 - template - - inline - - typename enable_if<__and_<__not_<__is_tuple_like<_Tp>>, - is_move_constructible<_Tp>, - is_move_assignable<_Tp>>::value>::type - - - - swap(_Tp& __a, _Tp& __b) - noexcept(__and_, is_nothrow_move_assignable<_Tp>>::value) - - { - - - - - _Tp __tmp = std::move(__a); - __a = std::move(__b); - __b = std::move(__tmp); - } - - - - - template - - inline - - typename enable_if<__is_swappable<_Tp>::value>::type - - - - swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]) - noexcept(__is_nothrow_swappable<_Tp>::value) - { - for (size_t __n = 0; __n < _Nm; ++__n) - swap(__a[__n], __b[__n]); - } - - - -} -# 60 "/usr/include/c++/10/bits/stl_pair.h" 2 3 -# 69 "/usr/include/c++/10/bits/stl_pair.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 80 "/usr/include/c++/10/bits/stl_pair.h" 3 - struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; - - - constexpr piecewise_construct_t piecewise_construct = - piecewise_construct_t(); - - - - - template - class tuple; - - template - struct _Index_tuple; - - - - - - - template - struct _PCC - { - template - static constexpr bool _ConstructiblePair() - { - return __and_, - is_constructible<_T2, const _U2&>>::value; - } - - template - static constexpr bool _ImplicitlyConvertiblePair() - { - return __and_, - is_convertible>::value; - } - - template - static constexpr bool _MoveConstructiblePair() - { - return __and_, - is_constructible<_T2, _U2&&>>::value; - } - - template - static constexpr bool _ImplicitlyMoveConvertiblePair() - { - return __and_, - is_convertible<_U2&&, _T2>>::value; - } - - template - static constexpr bool _CopyMovePair() - { - using __do_converts = __and_, - is_convertible<_U2&&, _T2>>; - using __converts = typename conditional<__implicit, - __do_converts, - __not_<__do_converts>>::type; - return __and_, - is_constructible<_T2, _U2&&>, - __converts - >::value; - } - - template - static constexpr bool _MoveCopyPair() - { - using __do_converts = __and_, - is_convertible>; - using __converts = typename conditional<__implicit, - __do_converts, - __not_<__do_converts>>::type; - return __and_, - is_constructible<_T2, const _U2&&>, - __converts - >::value; - } - }; - - template - struct _PCC - { - template - static constexpr bool _ConstructiblePair() - { - return false; - } - - template - static constexpr bool _ImplicitlyConvertiblePair() - { - return false; - } - - template - static constexpr bool _MoveConstructiblePair() - { - return false; - } - - template - static constexpr bool _ImplicitlyMoveConvertiblePair() - { - return false; - } - }; - - - template class __pair_base - { - - template friend struct pair; - __pair_base() = default; - ~__pair_base() = default; - __pair_base(const __pair_base&) = default; - __pair_base& operator=(const __pair_base&) = delete; - - }; -# 210 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - struct pair - : private __pair_base<_T1, _T2> - { - typedef _T1 first_type; - typedef _T2 second_type; - - _T1 first; - _T2 second; - - - - - - - template , - __is_implicitly_default_constructible<_U2>> - ::value, bool>::type = true> - - constexpr pair() - : first(), second() { } - - - template , - is_default_constructible<_U2>, - __not_< - __and_<__is_implicitly_default_constructible<_U1>, - __is_implicitly_default_constructible<_U2>>>> - ::value, bool>::type = false> - explicit constexpr pair() - : first(), second() { } -# 256 "/usr/include/c++/10/bits/stl_pair.h" 3 - using _PCCP = _PCC; - - - - template() - && _PCCP::template - _ImplicitlyConvertiblePair<_U1, _U2>(), - bool>::type=true> - constexpr pair(const _T1& __a, const _T2& __b) - : first(__a), second(__b) { } - - - template() - && !_PCCP::template - _ImplicitlyConvertiblePair<_U1, _U2>(), - bool>::type=false> - explicit constexpr pair(const _T1& __a, const _T2& __b) - : first(__a), second(__b) { } -# 288 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - using _PCCFP = _PCC::value - || !is_same<_T2, _U2>::value, - _T1, _T2>; - - - template::template - _ConstructiblePair<_U1, _U2>() - && _PCCFP<_U1, _U2>::template - _ImplicitlyConvertiblePair<_U1, _U2>(), - bool>::type=true> - constexpr pair(const pair<_U1, _U2>& __p) - : first(__p.first), second(__p.second) { } - - template::template - _ConstructiblePair<_U1, _U2>() - && !_PCCFP<_U1, _U2>::template - _ImplicitlyConvertiblePair<_U1, _U2>(), - bool>::type=false> - explicit constexpr pair(const pair<_U1, _U2>& __p) - : first(__p.first), second(__p.second) { } - - - - constexpr pair(const pair&) = default; - constexpr pair(pair&&) = default; - - - template(), - bool>::type=true> - constexpr pair(_U1&& __x, const _T2& __y) - : first(std::forward<_U1>(__x)), second(__y) { } - - template(), - bool>::type=false> - explicit constexpr pair(_U1&& __x, const _T2& __y) - : first(std::forward<_U1>(__x)), second(__y) { } - - template(), - bool>::type=true> - constexpr pair(const _T1& __x, _U2&& __y) - : first(__x), second(std::forward<_U2>(__y)) { } - - template(), - bool>::type=false> - explicit pair(const _T1& __x, _U2&& __y) - : first(__x), second(std::forward<_U2>(__y)) { } - - template() - && _PCCP::template - _ImplicitlyMoveConvertiblePair<_U1, _U2>(), - bool>::type=true> - constexpr pair(_U1&& __x, _U2&& __y) - : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } - - template() - && !_PCCP::template - _ImplicitlyMoveConvertiblePair<_U1, _U2>(), - bool>::type=false> - explicit constexpr pair(_U1&& __x, _U2&& __y) - : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { } - - - template::template - _MoveConstructiblePair<_U1, _U2>() - && _PCCFP<_U1, _U2>::template - _ImplicitlyMoveConvertiblePair<_U1, _U2>(), - bool>::type=true> - constexpr pair(pair<_U1, _U2>&& __p) - : first(std::forward<_U1>(__p.first)), - second(std::forward<_U2>(__p.second)) { } - - template::template - _MoveConstructiblePair<_U1, _U2>() - && !_PCCFP<_U1, _U2>::template - _ImplicitlyMoveConvertiblePair<_U1, _U2>(), - bool>::type=false> - explicit constexpr pair(pair<_U1, _U2>&& __p) - : first(std::forward<_U1>(__p.first)), - second(std::forward<_U2>(__p.second)) { } - - template - - pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>); - - pair& - operator=(typename conditional< - __and_, - is_copy_assignable<_T2>>::value, - const pair&, const __nonesuch&>::type __p) - { - first = __p.first; - second = __p.second; - return *this; - } - - pair& - operator=(typename conditional< - __and_, - is_move_assignable<_T2>>::value, - pair&&, __nonesuch&&>::type __p) - noexcept(__and_, - is_nothrow_move_assignable<_T2>>::value) - { - first = std::forward(__p.first); - second = std::forward(__p.second); - return *this; - } - - template - - typename enable_if<__and_, - is_assignable<_T2&, const _U2&>>::value, - pair&>::type - operator=(const pair<_U1, _U2>& __p) - { - first = __p.first; - second = __p.second; - return *this; - } - - template - - typename enable_if<__and_, - is_assignable<_T2&, _U2&&>>::value, - pair&>::type - operator=(pair<_U1, _U2>&& __p) - { - first = std::forward<_U1>(__p.first); - second = std::forward<_U2>(__p.second); - return *this; - } - - - void - swap(pair& __p) - noexcept(__and_<__is_nothrow_swappable<_T1>, - __is_nothrow_swappable<_T2>>::value) - { - using std::swap; - swap(first, __p.first); - swap(second, __p.second); - } - - private: - template - - pair(tuple<_Args1...>&, tuple<_Args2...>&, - _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>); - - }; -# 464 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - inline constexpr bool - operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __x.first == __y.first && __x.second == __y.second; } -# 487 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - inline constexpr bool - operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __x.first < __y.first - || (!(__y.first < __x.first) && __x.second < __y.second); } - - - template - inline constexpr bool - operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__x == __y); } - - - template - inline constexpr bool - operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return __y < __x; } - - - template - inline constexpr bool - operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__y < __x); } - - - template - inline constexpr bool - operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) - { return !(__x < __y); } -# 524 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - inline - - - typename enable_if<__and_<__is_swappable<_T1>, - __is_swappable<_T2>>::value>::type - - - - swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - - template - typename enable_if, - __is_swappable<_T2>>::value>::type - swap(pair<_T1, _T2>&, pair<_T1, _T2>&) = delete; -# 564 "/usr/include/c++/10/bits/stl_pair.h" 3 - template - constexpr pair::__type, - typename __decay_and_strip<_T2>::__type> - make_pair(_T1&& __x, _T2&& __y) - { - typedef typename __decay_and_strip<_T1>::__type __ds_type1; - typedef typename __decay_and_strip<_T2>::__type __ds_type2; - typedef pair<__ds_type1, __ds_type2> __pair_type; - return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y)); - } -# 583 "/usr/include/c++/10/bits/stl_pair.h" 3 - -} -# 65 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 1 3 -# 62 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 - -# 63 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 -# 74 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 93 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 - struct input_iterator_tag { }; - - - struct output_iterator_tag { }; - - - struct forward_iterator_tag : public input_iterator_tag { }; - - - - struct bidirectional_iterator_tag : public forward_iterator_tag { }; - - - - struct random_access_iterator_tag : public bidirectional_iterator_tag { }; -# 125 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 - template - struct iterator - { - - typedef _Category iterator_category; - - typedef _Tp value_type; - - typedef _Distance difference_type; - - typedef _Pointer pointer; - - typedef _Reference reference; - }; -# 149 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 - template - struct iterator_traits; - - - - - template> - struct __iterator_traits { }; - - - - template - struct __iterator_traits<_Iterator, - __void_t> - { - typedef typename _Iterator::iterator_category iterator_category; - typedef typename _Iterator::value_type value_type; - typedef typename _Iterator::difference_type difference_type; - typedef typename _Iterator::pointer pointer; - typedef typename _Iterator::reference reference; - }; - - - template - struct iterator_traits - : public __iterator_traits<_Iterator> { }; -# 209 "/usr/include/c++/10/bits/stl_iterator_base_types.h" 3 - template - struct iterator_traits<_Tp*> - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef _Tp* pointer; - typedef _Tp& reference; - }; - - - template - struct iterator_traits - { - typedef random_access_iterator_tag iterator_category; - typedef _Tp value_type; - typedef ptrdiff_t difference_type; - typedef const _Tp* pointer; - typedef const _Tp& reference; - }; - - - - - - - template - inline constexpr - typename iterator_traits<_Iter>::iterator_category - __iterator_category(const _Iter&) - { return typename iterator_traits<_Iter>::iterator_category(); } - - - - - template - using __iterator_category_t - = typename iterator_traits<_Iter>::iterator_category; - - template - using _RequireInputIter = - __enable_if_t, - input_iterator_tag>::value>; - - template> - struct __is_random_access_iter - : is_base_of - { - typedef is_base_of _Base; - enum { __value = _Base::value }; - }; - - - - - - - - -} -# 66 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 1 3 -# 62 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 3 - -# 63 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 3 - -# 1 "/usr/include/c++/10/bits/concept_check.h" 1 3 -# 33 "/usr/include/c++/10/bits/concept_check.h" 3 - -# 34 "/usr/include/c++/10/bits/concept_check.h" 3 -# 65 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 2 3 -# 1 "/usr/include/c++/10/debug/assertions.h" 1 3 -# 66 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - template struct _List_iterator; - template struct _List_const_iterator; - - - template - inline constexpr - typename iterator_traits<_InputIterator>::difference_type - __distance(_InputIterator __first, _InputIterator __last, - input_iterator_tag) - { - - - - typename iterator_traits<_InputIterator>::difference_type __n = 0; - while (__first != __last) - { - ++__first; - ++__n; - } - return __n; - } - - template - inline constexpr - typename iterator_traits<_RandomAccessIterator>::difference_type - __distance(_RandomAccessIterator __first, _RandomAccessIterator __last, - random_access_iterator_tag) - { - - - - return __last - __first; - } - - - - template - ptrdiff_t - __distance(std::_List_iterator<_Tp>, - std::_List_iterator<_Tp>, - input_iterator_tag); - - template - ptrdiff_t - __distance(std::_List_const_iterator<_Tp>, - std::_List_const_iterator<_Tp>, - input_iterator_tag); -# 135 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 3 - template - inline - typename iterator_traits<_InputIterator>::difference_type - distance(_InputIterator __first, _InputIterator __last) - { - - return std::__distance(__first, __last, - std::__iterator_category(__first)); - } - - template - inline constexpr void - __advance(_InputIterator& __i, _Distance __n, input_iterator_tag) - { - - - ; - while (__n--) - ++__i; - } - - template - inline constexpr void - __advance(_BidirectionalIterator& __i, _Distance __n, - bidirectional_iterator_tag) - { - - - - if (__n > 0) - while (__n--) - ++__i; - else - while (__n++) - --__i; - } - - template - inline constexpr void - __advance(_RandomAccessIterator& __i, _Distance __n, - random_access_iterator_tag) - { - - - - if (__builtin_constant_p(__n) && __n == 1) - ++__i; - else if (__builtin_constant_p(__n) && __n == -1) - --__i; - else - __i += __n; - } -# 200 "/usr/include/c++/10/bits/stl_iterator_base_funcs.h" 3 - template - inline void - advance(_InputIterator& __i, _Distance __n) - { - - typename iterator_traits<_InputIterator>::difference_type __d = __n; - std::__advance(__i, __d, std::__iterator_category(__i)); - } - - - - template - inline _InputIterator - next(_InputIterator __x, typename - iterator_traits<_InputIterator>::difference_type __n = 1) - { - - - std::advance(__x, __n); - return __x; - } - - template - inline _BidirectionalIterator - prev(_BidirectionalIterator __x, typename - iterator_traits<_BidirectionalIterator>::difference_type __n = 1) - { - - - - std::advance(__x, -__n); - return __x; - } - - - - -} -# 67 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 -# 1 "/usr/include/c++/10/bits/stl_iterator.h" 1 3 -# 66 "/usr/include/c++/10/bits/stl_iterator.h" 3 -# 1 "/usr/include/c++/10/bits/ptr_traits.h" 1 3 -# 42 "/usr/include/c++/10/bits/ptr_traits.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - class __undefined; - - - template - struct __get_first_arg - { using type = __undefined; }; - - template class _Template, typename _Tp, - typename... _Types> - struct __get_first_arg<_Template<_Tp, _Types...>> - { using type = _Tp; }; - - template - using __get_first_arg_t = typename __get_first_arg<_Tp>::type; - - - template - struct __replace_first_arg - { }; - - template class _Template, typename _Up, - typename _Tp, typename... _Types> - struct __replace_first_arg<_Template<_Tp, _Types...>, _Up> - { using type = _Template<_Up, _Types...>; }; - - template - using __replace_first_arg_t = typename __replace_first_arg<_Tp, _Up>::type; - - template - using __make_not_void - = typename conditional::value, __undefined, _Tp>::type; - - - - - - template - struct pointer_traits - { - private: - template - using __element_type = typename _Tp::element_type; - - template - using __difference_type = typename _Tp::difference_type; - - template - struct __rebind : __replace_first_arg<_Tp, _Up> { }; - - template - struct __rebind<_Tp, _Up, __void_t>> - { using type = typename _Tp::template rebind<_Up>; }; - - public: - - using pointer = _Ptr; - - - using element_type - = __detected_or_t<__get_first_arg_t<_Ptr>, __element_type, _Ptr>; - - - using difference_type - = __detected_or_t; - - - template - using rebind = typename __rebind<_Ptr, _Up>::type; - - static _Ptr - pointer_to(__make_not_void& __e) - { return _Ptr::pointer_to(__e); } - - static_assert(!is_same::value, - "pointer type defines element_type or is like SomePointer"); - }; - - - - - - template - struct pointer_traits<_Tp*> - { - - typedef _Tp* pointer; - - typedef _Tp element_type; - - typedef ptrdiff_t difference_type; - - template - using rebind = _Up*; - - - - - - - static pointer - pointer_to(__make_not_void& __r) noexcept - { return std::addressof(__r); } - }; - - - template - using __ptr_rebind = typename pointer_traits<_Ptr>::template rebind<_Tp>; - - template - constexpr _Tp* - __to_address(_Tp* __ptr) noexcept - { - static_assert(!std::is_function<_Tp>::value, "not a function pointer"); - return __ptr; - } - - - template - constexpr typename std::pointer_traits<_Ptr>::element_type* - __to_address(const _Ptr& __ptr) - { return std::__to_address(__ptr.operator->()); } -# 210 "/usr/include/c++/10/bits/ptr_traits.h" 3 - -} -# 67 "/usr/include/c++/10/bits/stl_iterator.h" 2 3 -# 85 "/usr/include/c++/10/bits/stl_iterator.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 124 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class reverse_iterator - : public iterator::iterator_category, - typename iterator_traits<_Iterator>::value_type, - typename iterator_traits<_Iterator>::difference_type, - typename iterator_traits<_Iterator>::pointer, - typename iterator_traits<_Iterator>::reference> - { - protected: - _Iterator current; - - typedef iterator_traits<_Iterator> __traits_type; - - public: - typedef _Iterator iterator_type; - typedef typename __traits_type::difference_type difference_type; - typedef typename __traits_type::pointer pointer; - typedef typename __traits_type::reference reference; -# 160 "/usr/include/c++/10/bits/stl_iterator.h" 3 - - reverse_iterator() : current() { } - - - - - explicit - reverse_iterator(iterator_type __x) : current(__x) { } - - - - - - reverse_iterator(const reverse_iterator& __x) - : current(__x.current) { } - - - reverse_iterator& operator=(const reverse_iterator&) = default; - - - - - - - template - - reverse_iterator(const reverse_iterator<_Iter>& __x) - : current(__x.base()) { } - - - - - iterator_type - base() const - { return current; } -# 206 "/usr/include/c++/10/bits/stl_iterator.h" 3 - reference - operator*() const - { - _Iterator __tmp = current; - return *--__tmp; - } - - - - - - - pointer - operator->() const - - - - - { - - - _Iterator __tmp = current; - --__tmp; - return _S_to_pointer(__tmp); - } - - - - - - - reverse_iterator& - operator++() - { - --current; - return *this; - } - - - - - - - reverse_iterator - operator++(int) - { - reverse_iterator __tmp = *this; - --current; - return __tmp; - } - - - - - - - reverse_iterator& - operator--() - { - ++current; - return *this; - } - - - - - - - reverse_iterator - operator--(int) - { - reverse_iterator __tmp = *this; - ++current; - return __tmp; - } - - - - - - - reverse_iterator - operator+(difference_type __n) const - { return reverse_iterator(current - __n); } - - - - - - - - reverse_iterator& - operator+=(difference_type __n) - { - current -= __n; - return *this; - } - - - - - - - reverse_iterator - operator-(difference_type __n) const - { return reverse_iterator(current + __n); } - - - - - - - - reverse_iterator& - operator-=(difference_type __n) - { - current += __n; - return *this; - } - - - - - - - reference - operator[](difference_type __n) const - { return *(*this + __n); } -# 360 "/usr/include/c++/10/bits/stl_iterator.h" 3 - private: - template - static _Tp* - _S_to_pointer(_Tp* __p) - { return __p; } - - template - static pointer - _S_to_pointer(_Tp __t) - { return __t.operator->(); } - }; -# 383 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - inline bool - operator==(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __x.base() == __y.base(); } - - template - inline bool - operator<(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __y.base() < __x.base(); } - - template - inline bool - operator!=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__x == __y); } - - template - inline bool - operator>(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return __y < __x; } - - template - inline bool - operator<=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__y < __x); } - - template - inline bool - operator>=(const reverse_iterator<_Iterator>& __x, - const reverse_iterator<_Iterator>& __y) - { return !(__x < __y); } - - - - template - inline bool - operator==(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __x.base() == __y.base(); } - - template - inline bool - operator<(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __y.base() < __x.base(); } - - template - inline bool - operator!=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__x == __y); } - - template - inline bool - operator>(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return __y < __x; } - - template - inline bool - operator<=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__y < __x); } - - template - inline bool - operator>=(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - { return !(__x < __y); } -# 523 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - inline auto - operator-(const reverse_iterator<_IteratorL>& __x, - const reverse_iterator<_IteratorR>& __y) - -> decltype(__y.base() - __x.base()) - { return __y.base() - __x.base(); } - - - template - inline reverse_iterator<_Iterator> - operator+(typename reverse_iterator<_Iterator>::difference_type __n, - const reverse_iterator<_Iterator>& __x) - { return reverse_iterator<_Iterator>(__x.base() - __n); } - - - - template - inline reverse_iterator<_Iterator> - __make_reverse_iterator(_Iterator __i) - { return reverse_iterator<_Iterator>(__i); } - - - - - - - - template - inline reverse_iterator<_Iterator> - make_reverse_iterator(_Iterator __i) - { return reverse_iterator<_Iterator>(__i); } -# 564 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - - auto - __niter_base(reverse_iterator<_Iterator> __it) - -> decltype(__make_reverse_iterator(__niter_base(__it.base()))) - { return __make_reverse_iterator(__niter_base(__it.base())); } - - template - struct __is_move_iterator > - : __is_move_iterator<_Iterator> - { }; - - template - - auto - __miter_base(reverse_iterator<_Iterator> __it) - -> decltype(__make_reverse_iterator(__miter_base(__it.base()))) - { return __make_reverse_iterator(__miter_base(__it.base())); } -# 595 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class back_insert_iterator - : public iterator - { - protected: - _Container* container; - - public: - - typedef _Container container_type; - - - - - - - - explicit - back_insert_iterator(_Container& __x) - : container(std::__addressof(__x)) { } -# 635 "/usr/include/c++/10/bits/stl_iterator.h" 3 - - back_insert_iterator& - operator=(const typename _Container::value_type& __value) - { - container->push_back(__value); - return *this; - } - - - back_insert_iterator& - operator=(typename _Container::value_type&& __value) - { - container->push_back(std::move(__value)); - return *this; - } - - - - - back_insert_iterator& - operator*() - { return *this; } - - - - back_insert_iterator& - operator++() - { return *this; } - - - - back_insert_iterator - operator++(int) - { return *this; } - }; -# 682 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - - inline back_insert_iterator<_Container> - back_inserter(_Container& __x) - { return back_insert_iterator<_Container>(__x); } -# 698 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class front_insert_iterator - : public iterator - { - protected: - _Container* container; - - public: - - typedef _Container container_type; - - - - - - - - explicit - front_insert_iterator(_Container& __x) - : container(std::__addressof(__x)) { } -# 738 "/usr/include/c++/10/bits/stl_iterator.h" 3 - - front_insert_iterator& - operator=(const typename _Container::value_type& __value) - { - container->push_front(__value); - return *this; - } - - - front_insert_iterator& - operator=(typename _Container::value_type&& __value) - { - container->push_front(std::move(__value)); - return *this; - } - - - - - front_insert_iterator& - operator*() - { return *this; } - - - - front_insert_iterator& - operator++() - { return *this; } - - - - front_insert_iterator - operator++(int) - { return *this; } - }; -# 785 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - - inline front_insert_iterator<_Container> - front_inserter(_Container& __x) - { return front_insert_iterator<_Container>(__x); } -# 805 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class insert_iterator - : public iterator - { - - - - - - - - typedef typename _Container::iterator _Iter; - - protected: - _Container* container; - _Iter iter; - - - public: - - typedef _Container container_type; -# 837 "/usr/include/c++/10/bits/stl_iterator.h" 3 - - insert_iterator(_Container& __x, _Iter __i) - : container(std::__addressof(__x)), iter(__i) {} -# 873 "/usr/include/c++/10/bits/stl_iterator.h" 3 - - insert_iterator& - operator=(const typename _Container::value_type& __value) - { - iter = container->insert(iter, __value); - ++iter; - return *this; - } - - - insert_iterator& - operator=(typename _Container::value_type&& __value) - { - iter = container->insert(iter, std::move(__value)); - ++iter; - return *this; - } - - - - - insert_iterator& - operator*() - { return *this; } - - - - insert_iterator& - operator++() - { return *this; } - - - - insert_iterator& - operator++(int) - { return *this; } - }; -# 929 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - inline insert_iterator<_Container> - inserter(_Container& __x, typename _Container::iterator __i) - { return insert_iterator<_Container>(__x, __i); } - - - - - -} - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - -# 951 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class __normal_iterator - { - protected: - _Iterator _M_current; - - typedef std::iterator_traits<_Iterator> __traits_type; - - public: - typedef _Iterator iterator_type; - typedef typename __traits_type::iterator_category iterator_category; - typedef typename __traits_type::value_type value_type; - typedef typename __traits_type::difference_type difference_type; - typedef typename __traits_type::reference reference; - typedef typename __traits_type::pointer pointer; - - - - - - constexpr __normal_iterator() noexcept - : _M_current(_Iterator()) { } - - explicit - __normal_iterator(const _Iterator& __i) noexcept - : _M_current(__i) { } - - - template - - __normal_iterator(const __normal_iterator<_Iter, - typename __enable_if< - (std::__are_same<_Iter, typename _Container::pointer>::__value), - _Container>::__type>& __i) noexcept - : _M_current(__i.base()) { } - - - - reference - operator*() const noexcept - { return *_M_current; } - - - pointer - operator->() const noexcept - { return _M_current; } - - - __normal_iterator& - operator++() noexcept - { - ++_M_current; - return *this; - } - - - __normal_iterator - operator++(int) noexcept - { return __normal_iterator(_M_current++); } - - - - __normal_iterator& - operator--() noexcept - { - --_M_current; - return *this; - } - - - __normal_iterator - operator--(int) noexcept - { return __normal_iterator(_M_current--); } - - - - reference - operator[](difference_type __n) const noexcept - { return _M_current[__n]; } - - - __normal_iterator& - operator+=(difference_type __n) noexcept - { _M_current += __n; return *this; } - - - __normal_iterator - operator+(difference_type __n) const noexcept - { return __normal_iterator(_M_current + __n); } - - - __normal_iterator& - operator-=(difference_type __n) noexcept - { _M_current -= __n; return *this; } - - - __normal_iterator - operator-(difference_type __n) const noexcept - { return __normal_iterator(_M_current - __n); } - - - const _Iterator& - base() const noexcept - { return _M_current; } - }; -# 1083 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - - inline bool - operator==(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() == __rhs.base(); } - - template - - inline bool - operator==(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() == __rhs.base(); } - - template - - inline bool - operator!=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() != __rhs.base(); } - - template - - inline bool - operator!=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() != __rhs.base(); } - - - template - inline bool - operator<(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() < __rhs.base(); } - - template - - inline bool - operator<(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() < __rhs.base(); } - - template - inline bool - operator>(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() > __rhs.base(); } - - template - - inline bool - operator>(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() > __rhs.base(); } - - template - inline bool - operator<=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() <= __rhs.base(); } - - template - - inline bool - operator<=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() <= __rhs.base(); } - - template - inline bool - operator>=(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) - noexcept - { return __lhs.base() >= __rhs.base(); } - - template - - inline bool - operator>=(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() >= __rhs.base(); } - - - - - - - template - - - - inline auto - operator-(const __normal_iterator<_IteratorL, _Container>& __lhs, - const __normal_iterator<_IteratorR, _Container>& __rhs) noexcept - -> decltype(__lhs.base() - __rhs.base()) - - - - - - { return __lhs.base() - __rhs.base(); } - - template - - inline typename __normal_iterator<_Iterator, _Container>::difference_type - operator-(const __normal_iterator<_Iterator, _Container>& __lhs, - const __normal_iterator<_Iterator, _Container>& __rhs) - noexcept - { return __lhs.base() - __rhs.base(); } - - template - - inline __normal_iterator<_Iterator, _Container> - operator+(typename __normal_iterator<_Iterator, _Container>::difference_type - __n, const __normal_iterator<_Iterator, _Container>& __i) - noexcept - { return __normal_iterator<_Iterator, _Container>(__i.base() + __n); } - - -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - template - - _Iterator - __niter_base(__gnu_cxx::__normal_iterator<_Iterator, _Container> __it) - noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) - { return __it.base(); } -# 1282 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - class move_iterator - { - _Iterator _M_current; - - using __traits_type = iterator_traits<_Iterator>; - - - - using __base_ref = typename __traits_type::reference; - - - public: - using iterator_type = _Iterator; -# 1306 "/usr/include/c++/10/bits/stl_iterator.h" 3 - typedef typename __traits_type::iterator_category iterator_category; - typedef typename __traits_type::value_type value_type; - typedef typename __traits_type::difference_type difference_type; - - typedef _Iterator pointer; - - - typedef typename conditional::value, - typename remove_reference<__base_ref>::type&&, - __base_ref>::type reference; - - - - move_iterator() - : _M_current() { } - - explicit - move_iterator(iterator_type __i) - : _M_current(std::move(__i)) { } - - template - - move_iterator(const move_iterator<_Iter>& __i) - : _M_current(__i.base()) { } - - template - - move_iterator& operator=(const move_iterator<_Iter>& __i) - { - _M_current = __i.base(); - return *this; - } - - - iterator_type - base() const - { return _M_current; } -# 1356 "/usr/include/c++/10/bits/stl_iterator.h" 3 - reference - operator*() const - - - - { return static_cast(*_M_current); } - - - pointer - operator->() const - { return _M_current; } - - move_iterator& - operator++() - { - ++_M_current; - return *this; - } - - move_iterator - operator++(int) - { - move_iterator __tmp = *this; - ++_M_current; - return __tmp; - } - - - - - - - - move_iterator& - operator--() - { - --_M_current; - return *this; - } - - move_iterator - operator--(int) - { - move_iterator __tmp = *this; - --_M_current; - return __tmp; - } - - move_iterator - operator+(difference_type __n) const - { return move_iterator(_M_current + __n); } - - move_iterator& - operator+=(difference_type __n) - { - _M_current += __n; - return *this; - } - - move_iterator - operator-(difference_type __n) const - { return move_iterator(_M_current - __n); } - - move_iterator& - operator-=(difference_type __n) - { - _M_current -= __n; - return *this; - } - - reference - operator[](difference_type __n) const - - - - { return std::move(_M_current[__n]); } -# 1461 "/usr/include/c++/10/bits/stl_iterator.h" 3 - }; - - template - inline bool - operator==(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - - - - { return __x.base() == __y.base(); } -# 1480 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - inline bool - operator!=(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - { return !(__x == __y); } - - - template - inline bool - operator<(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - - - - { return __x.base() < __y.base(); } - - template - inline bool - operator<=(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - - - - { return !(__y < __x); } - - template - inline bool - operator>(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - - - - { return __y < __x; } - - template - inline bool - operator>=(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - - - - { return !(__x < __y); } -# 1531 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - inline bool - operator==(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return __x.base() == __y.base(); } - - template - inline bool - operator!=(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return !(__x == __y); } - - template - inline bool - operator<(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return __x.base() < __y.base(); } - - template - inline bool - operator<=(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return !(__y < __x); } - - template - inline bool - operator>(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return __y < __x; } - - template - inline bool - operator>=(const move_iterator<_Iterator>& __x, - const move_iterator<_Iterator>& __y) - { return !(__x < __y); } - - - - template - inline auto - operator-(const move_iterator<_IteratorL>& __x, - const move_iterator<_IteratorR>& __y) - -> decltype(__x.base() - __y.base()) - { return __x.base() - __y.base(); } - - template - inline move_iterator<_Iterator> - operator+(typename move_iterator<_Iterator>::difference_type __n, - const move_iterator<_Iterator>& __x) - { return __x + __n; } - - template - inline move_iterator<_Iterator> - make_move_iterator(_Iterator __i) - { return move_iterator<_Iterator>(std::move(__i)); } - - template::value_type>::value, - _Iterator, move_iterator<_Iterator>>::type> - inline _ReturnType - __make_move_if_noexcept_iterator(_Iterator __i) - { return _ReturnType(__i); } - - - - template::value, - const _Tp*, move_iterator<_Tp*>>::type> - inline _ReturnType - __make_move_if_noexcept_iterator(_Tp* __i) - { return _ReturnType(__i); } -# 2188 "/usr/include/c++/10/bits/stl_iterator.h" 3 - template - auto - __niter_base(move_iterator<_Iterator> __it) - -> decltype(make_move_iterator(__niter_base(__it.base()))) - { return make_move_iterator(__niter_base(__it.base())); } - - template - struct __is_move_iterator > - { - enum { __value = 1 }; - typedef __true_type __type; - }; - - template - auto - __miter_base(move_iterator<_Iterator> __it) - -> decltype(__miter_base(__it.base())) - { return __miter_base(__it.base()); } -# 2235 "/usr/include/c++/10/bits/stl_iterator.h" 3 - -} -# 68 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 - -# 1 "/usr/include/c++/10/debug/debug.h" 1 3 -# 48 "/usr/include/c++/10/debug/debug.h" 3 -namespace std -{ - namespace __debug { } -} - - - - -namespace __gnu_debug -{ - using namespace std::__debug; - - template - struct _Safe_iterator; -} -# 70 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 - -# 1 "/usr/include/c++/10/bits/predefined_ops.h" 1 3 -# 33 "/usr/include/c++/10/bits/predefined_ops.h" 3 -namespace __gnu_cxx -{ -namespace __ops -{ - struct _Iter_less_iter - { - template - constexpr - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) const - { return *__it1 < *__it2; } - }; - - constexpr - inline _Iter_less_iter - __iter_less_iter() - { return _Iter_less_iter(); } - - struct _Iter_less_val - { - - constexpr _Iter_less_val() = default; - - - - - - explicit - _Iter_less_val(_Iter_less_iter) { } - - template - - bool - operator()(_Iterator __it, _Value& __val) const - { return *__it < __val; } - }; - - - inline _Iter_less_val - __iter_less_val() - { return _Iter_less_val(); } - - - inline _Iter_less_val - __iter_comp_val(_Iter_less_iter) - { return _Iter_less_val(); } - - struct _Val_less_iter - { - - constexpr _Val_less_iter() = default; - - - - - - explicit - _Val_less_iter(_Iter_less_iter) { } - - template - - bool - operator()(_Value& __val, _Iterator __it) const - { return __val < *__it; } - }; - - - inline _Val_less_iter - __val_less_iter() - { return _Val_less_iter(); } - - - inline _Val_less_iter - __val_comp_iter(_Iter_less_iter) - { return _Val_less_iter(); } - - struct _Iter_equal_to_iter - { - template - - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) const - { return *__it1 == *__it2; } - }; - - - inline _Iter_equal_to_iter - __iter_equal_to_iter() - { return _Iter_equal_to_iter(); } - - struct _Iter_equal_to_val - { - template - - bool - operator()(_Iterator __it, _Value& __val) const - { return *__it == __val; } - }; - - - inline _Iter_equal_to_val - __iter_equal_to_val() - { return _Iter_equal_to_val(); } - - - inline _Iter_equal_to_val - __iter_comp_val(_Iter_equal_to_iter) - { return _Iter_equal_to_val(); } - - template - struct _Iter_comp_iter - { - _Compare _M_comp; - - explicit constexpr - _Iter_comp_iter(_Compare __comp) - : _M_comp(std::move(__comp)) - { } - - template - constexpr - bool - operator()(_Iterator1 __it1, _Iterator2 __it2) - { return bool(_M_comp(*__it1, *__it2)); } - }; - - template - constexpr - inline _Iter_comp_iter<_Compare> - __iter_comp_iter(_Compare __comp) - { return _Iter_comp_iter<_Compare>(std::move(__comp)); } - - template - struct _Iter_comp_val - { - _Compare _M_comp; - - - explicit - _Iter_comp_val(_Compare __comp) - : _M_comp(std::move(__comp)) - { } - - - explicit - _Iter_comp_val(const _Iter_comp_iter<_Compare>& __comp) - : _M_comp(__comp._M_comp) - { } - - - - explicit - _Iter_comp_val(_Iter_comp_iter<_Compare>&& __comp) - : _M_comp(std::move(__comp._M_comp)) - { } - - - template - - bool - operator()(_Iterator __it, _Value& __val) - { return bool(_M_comp(*__it, __val)); } - }; - - template - - inline _Iter_comp_val<_Compare> - __iter_comp_val(_Compare __comp) - { return _Iter_comp_val<_Compare>(std::move(__comp)); } - - template - - inline _Iter_comp_val<_Compare> - __iter_comp_val(_Iter_comp_iter<_Compare> __comp) - { return _Iter_comp_val<_Compare>(std::move(__comp)); } - - template - struct _Val_comp_iter - { - _Compare _M_comp; - - - explicit - _Val_comp_iter(_Compare __comp) - : _M_comp(std::move(__comp)) - { } - - - explicit - _Val_comp_iter(const _Iter_comp_iter<_Compare>& __comp) - : _M_comp(__comp._M_comp) - { } - - - - explicit - _Val_comp_iter(_Iter_comp_iter<_Compare>&& __comp) - : _M_comp(std::move(__comp._M_comp)) - { } - - - template - - bool - operator()(_Value& __val, _Iterator __it) - { return bool(_M_comp(__val, *__it)); } - }; - - template - - inline _Val_comp_iter<_Compare> - __val_comp_iter(_Compare __comp) - { return _Val_comp_iter<_Compare>(std::move(__comp)); } - - template - - inline _Val_comp_iter<_Compare> - __val_comp_iter(_Iter_comp_iter<_Compare> __comp) - { return _Val_comp_iter<_Compare>(std::move(__comp)); } - - template - struct _Iter_equals_val - { - _Value& _M_value; - - - explicit - _Iter_equals_val(_Value& __value) - : _M_value(__value) - { } - - template - - bool - operator()(_Iterator __it) - { return *__it == _M_value; } - }; - - template - - inline _Iter_equals_val<_Value> - __iter_equals_val(_Value& __val) - { return _Iter_equals_val<_Value>(__val); } - - template - struct _Iter_equals_iter - { - _Iterator1 _M_it1; - - - explicit - _Iter_equals_iter(_Iterator1 __it1) - : _M_it1(__it1) - { } - - template - - bool - operator()(_Iterator2 __it2) - { return *__it2 == *_M_it1; } - }; - - template - - inline _Iter_equals_iter<_Iterator> - __iter_comp_iter(_Iter_equal_to_iter, _Iterator __it) - { return _Iter_equals_iter<_Iterator>(__it); } - - template - struct _Iter_pred - { - _Predicate _M_pred; - - - explicit - _Iter_pred(_Predicate __pred) - : _M_pred(std::move(__pred)) - { } - - template - - bool - operator()(_Iterator __it) - { return bool(_M_pred(*__it)); } - }; - - template - - inline _Iter_pred<_Predicate> - __pred_iter(_Predicate __pred) - { return _Iter_pred<_Predicate>(std::move(__pred)); } - - template - struct _Iter_comp_to_val - { - _Compare _M_comp; - _Value& _M_value; - - - _Iter_comp_to_val(_Compare __comp, _Value& __value) - : _M_comp(std::move(__comp)), _M_value(__value) - { } - - template - - bool - operator()(_Iterator __it) - { return bool(_M_comp(*__it, _M_value)); } - }; - - template - _Iter_comp_to_val<_Compare, _Value> - - __iter_comp_val(_Compare __comp, _Value &__val) - { - return _Iter_comp_to_val<_Compare, _Value>(std::move(__comp), __val); - } - - template - struct _Iter_comp_to_iter - { - _Compare _M_comp; - _Iterator1 _M_it1; - - - _Iter_comp_to_iter(_Compare __comp, _Iterator1 __it1) - : _M_comp(std::move(__comp)), _M_it1(__it1) - { } - - template - - bool - operator()(_Iterator2 __it2) - { return bool(_M_comp(*__it2, *_M_it1)); } - }; - - template - - inline _Iter_comp_to_iter<_Compare, _Iterator> - __iter_comp_iter(_Iter_comp_iter<_Compare> __comp, _Iterator __it) - { - return _Iter_comp_to_iter<_Compare, _Iterator>( - std::move(__comp._M_comp), __it); - } - - template - struct _Iter_negate - { - _Predicate _M_pred; - - - explicit - _Iter_negate(_Predicate __pred) - : _M_pred(std::move(__pred)) - { } - - template - - bool - operator()(_Iterator __it) - { return !bool(_M_pred(*__it)); } - }; - - template - - inline _Iter_negate<_Predicate> - __negate(_Iter_pred<_Predicate> __pred) - { return _Iter_negate<_Predicate>(std::move(__pred._M_pred)); } - -} -} -# 72 "/usr/include/c++/10/bits/stl_algobase.h" 2 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - template - constexpr - inline int - __memcmp(const _Tp* __first1, const _Up* __first2, size_t __num) - { - - static_assert(sizeof(_Tp) == sizeof(_Up), "can be compared with memcmp"); -# 105 "/usr/include/c++/10/bits/stl_algobase.h" 3 - return __builtin_memcmp(__first1, __first2, sizeof(_Tp) * __num); - } -# 149 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline void - iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) - { - - - - -# 182 "/usr/include/c++/10/bits/stl_algobase.h" 3 - swap(*__a, *__b); - - } -# 198 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - _ForwardIterator2 - swap_ranges(_ForwardIterator1 __first1, _ForwardIterator1 __last1, - _ForwardIterator2 __first2) - { - - - - - - ; - - for (; __first1 != __last1; ++__first1, (void)++__first2) - std::iter_swap(__first1, __first2); - return __first2; - } -# 227 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - constexpr - inline const _Tp& - min(const _Tp& __a, const _Tp& __b) - { - - - - if (__b < __a) - return __b; - return __a; - } -# 251 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - constexpr - inline const _Tp& - max(const _Tp& __a, const _Tp& __b) - { - - - - if (__a < __b) - return __b; - return __a; - } -# 275 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - constexpr - inline const _Tp& - min(const _Tp& __a, const _Tp& __b, _Compare __comp) - { - - if (__comp(__b, __a)) - return __b; - return __a; - } -# 297 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - constexpr - inline const _Tp& - max(const _Tp& __a, const _Tp& __b, _Compare __comp) - { - - if (__comp(__a, __b)) - return __b; - return __a; - } - - - - template - - inline _Iterator - __niter_base(_Iterator __it) - noexcept(std::is_nothrow_copy_constructible<_Iterator>::value) - { return __it; } - - - - - template - - inline _From - __niter_wrap(_From __from, _To __res) - { return __from + (__res - std::__niter_base(__from)); } - - - template - - inline _Iterator - __niter_wrap(const _Iterator&, _Iterator __res) - { return __res; } - - - - - - - - template - struct __copy_move - { - template - - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - for (; __first != __last; ++__result, (void)++__first) - *__result = *__first; - return __result; - } - }; - - - template - struct __copy_move - { - template - - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - for (; __first != __last; ++__result, (void)++__first) - *__result = std::move(*__first); - return __result; - } - }; - - - template<> - struct __copy_move - { - template - - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - typedef typename iterator_traits<_II>::difference_type _Distance; - for(_Distance __n = __last - __first; __n > 0; --__n) - { - *__result = *__first; - ++__first; - ++__result; - } - return __result; - } - }; - - - template<> - struct __copy_move - { - template - - static _OI - __copy_m(_II __first, _II __last, _OI __result) - { - typedef typename iterator_traits<_II>::difference_type _Distance; - for(_Distance __n = __last - __first; __n > 0; --__n) - { - *__result = std::move(*__first); - ++__first; - ++__result; - } - return __result; - } - }; - - - template - struct __copy_move<_IsMove, true, random_access_iterator_tag> - { - template - - static _Tp* - __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) - { - - using __assignable = conditional<_IsMove, - is_move_assignable<_Tp>, - is_copy_assignable<_Tp>>; - - static_assert( __assignable::type::value, "type is not assignable" ); - - const ptrdiff_t _Num = __last - __first; - if (_Num) - __builtin_memmove(__result, __first, sizeof(_Tp) * _Num); - return __result + _Num; - } - }; - - - - template - struct char_traits; - - template - class istreambuf_iterator; - - template - class ostreambuf_iterator; - - template - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type - __copy_move_a2(_CharT*, _CharT*, - ostreambuf_iterator<_CharT, char_traits<_CharT> >); - - template - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - ostreambuf_iterator<_CharT, char_traits<_CharT> > >::__type - __copy_move_a2(const _CharT*, const _CharT*, - ostreambuf_iterator<_CharT, char_traits<_CharT> >); - - template - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, - _CharT*>::__type - __copy_move_a2(istreambuf_iterator<_CharT, char_traits<_CharT> >, - istreambuf_iterator<_CharT, char_traits<_CharT> >, _CharT*); - - template - - inline _OI - __copy_move_a2(_II __first, _II __last, _OI __result) - { - typedef typename iterator_traits<_II>::iterator_category _Category; - - - - - - return std::__copy_move<_IsMove, __memcpyable<_OI, _II>::__value, - _Category>::__copy_m(__first, __last, __result); - } - - - - template - struct _Deque_iterator; - - - - template - _OI - __copy_move_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, - std::_Deque_iterator<_Tp, _Ref, _Ptr>, - _OI); - - template - std::_Deque_iterator<_OTp, _OTp&, _OTp*> - __copy_move_a1(std::_Deque_iterator<_ITp, _IRef, _IPtr>, - std::_Deque_iterator<_ITp, _IRef, _IPtr>, - std::_Deque_iterator<_OTp, _OTp&, _OTp*>); - - template - typename __gnu_cxx::__enable_if< - __is_random_access_iter<_II>::__value, - std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type - __copy_move_a1(_II, _II, std::_Deque_iterator<_Tp, _Tp&, _Tp*>); - - template - - inline _OI - __copy_move_a1(_II __first, _II __last, _OI __result) - { return std::__copy_move_a2<_IsMove>(__first, __last, __result); } - - template - - inline _OI - __copy_move_a(_II __first, _II __last, _OI __result) - { - return std::__niter_wrap(__result, - std::__copy_move_a1<_IsMove>(std::__niter_base(__first), - std::__niter_base(__last), - std::__niter_base(__result))); - } - - template - _OI - __copy_move_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - _OI); - - template - __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> - __copy_move_a(_II, _II, - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); - - template - ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> - __copy_move_a(const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, - const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, - const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); -# 557 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _OI - copy(_II __first, _II __last, _OI __result) - { - - - - - ; - - return std::__copy_move_a<__is_move_iterator<_II>::__value> - (std::__miter_base(__first), std::__miter_base(__last), __result); - } -# 590 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _OI - move(_II __first, _II __last, _OI __result) - { - - - - - ; - - return std::__copy_move_a(std::__miter_base(__first), - std::__miter_base(__last), __result); - } - - - - - - - template - struct __copy_move_backward - { - template - - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - while (__first != __last) - *--__result = *--__last; - return __result; - } - }; - - - template - struct __copy_move_backward - { - template - - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - while (__first != __last) - *--__result = std::move(*--__last); - return __result; - } - }; - - - template<> - struct __copy_move_backward - { - template - - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - typename iterator_traits<_BI1>::difference_type - __n = __last - __first; - for (; __n > 0; --__n) - *--__result = *--__last; - return __result; - } - }; - - - template<> - struct __copy_move_backward - { - template - - static _BI2 - __copy_move_b(_BI1 __first, _BI1 __last, _BI2 __result) - { - typename iterator_traits<_BI1>::difference_type - __n = __last - __first; - for (; __n > 0; --__n) - *--__result = std::move(*--__last); - return __result; - } - }; - - - template - struct __copy_move_backward<_IsMove, true, random_access_iterator_tag> - { - template - - static _Tp* - __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result) - { - - using __assignable = conditional<_IsMove, - is_move_assignable<_Tp>, - is_copy_assignable<_Tp>>; - - static_assert( __assignable::type::value, "type is not assignable" ); - - const ptrdiff_t _Num = __last - __first; - if (_Num) - __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num); - return __result - _Num; - } - }; - - template - - inline _BI2 - __copy_move_backward_a2(_BI1 __first, _BI1 __last, _BI2 __result) - { - typedef typename iterator_traits<_BI1>::iterator_category _Category; - - - - - - return std::__copy_move_backward<_IsMove, - __memcpyable<_BI2, _BI1>::__value, - _Category>::__copy_move_b(__first, - __last, - __result); - } - - template - - inline _BI2 - __copy_move_backward_a1(_BI1 __first, _BI1 __last, _BI2 __result) - { return std::__copy_move_backward_a2<_IsMove>(__first, __last, __result); } - - template - _OI - __copy_move_backward_a1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, - std::_Deque_iterator<_Tp, _Ref, _Ptr>, - _OI); - - template - std::_Deque_iterator<_OTp, _OTp&, _OTp*> - __copy_move_backward_a1( - std::_Deque_iterator<_ITp, _IRef, _IPtr>, - std::_Deque_iterator<_ITp, _IRef, _IPtr>, - std::_Deque_iterator<_OTp, _OTp&, _OTp*>); - - template - typename __gnu_cxx::__enable_if< - __is_random_access_iter<_II>::__value, - std::_Deque_iterator<_Tp, _Tp&, _Tp*> >::__type - __copy_move_backward_a1(_II, _II, - std::_Deque_iterator<_Tp, _Tp&, _Tp*>); - - template - - inline _OI - __copy_move_backward_a(_II __first, _II __last, _OI __result) - { - return std::__niter_wrap(__result, - std::__copy_move_backward_a1<_IsMove> - (std::__niter_base(__first), std::__niter_base(__last), - std::__niter_base(__result))); - } - - template - _OI - __copy_move_backward_a( - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - _OI); - - template - __gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> - __copy_move_backward_a(_II, _II, - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&); - - template - ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat> - __copy_move_backward_a( - const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, - const ::__gnu_debug::_Safe_iterator<_IIte, _ISeq, _ICat>&, - const ::__gnu_debug::_Safe_iterator<_OIte, _OSeq, _OCat>&); -# 794 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _BI2 - copy_backward(_BI1 __first, _BI1 __last, _BI2 __result) - { - - - - - - - ; - - return std::__copy_move_backward_a<__is_move_iterator<_BI1>::__value> - (std::__miter_base(__first), std::__miter_base(__last), __result); - } -# 830 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _BI2 - move_backward(_BI1 __first, _BI1 __last, _BI2 __result) - { - - - - - - - ; - - return std::__copy_move_backward_a(std::__miter_base(__first), - std::__miter_base(__last), - __result); - } - - - - - - - template - - inline typename - __gnu_cxx::__enable_if::__value, void>::__type - __fill_a1(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - for (; __first != __last; ++__first) - *__first = __value; - } - - template - - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, void>::__type - __fill_a1(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __value) - { - const _Tp __tmp = __value; - for (; __first != __last; ++__first) - *__first = __tmp; - } - - - template - - inline typename - __gnu_cxx::__enable_if<__is_byte<_Tp>::__value, void>::__type - __fill_a1(_Tp* __first, _Tp* __last, const _Tp& __c) - { - const _Tp __tmp = __c; -# 892 "/usr/include/c++/10/bits/stl_algobase.h" 3 - if (const size_t __len = __last - __first) - __builtin_memset(__first, static_cast(__tmp), __len); - } - - template - - inline void - __fill_a1(::__gnu_cxx::__normal_iterator<_Ite, _Cont> __first, - ::__gnu_cxx::__normal_iterator<_Ite, _Cont> __last, - const _Tp& __value) - { std::__fill_a1(__first.base(), __last.base(), __value); } - - template - void - __fill_a1(const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, - const std::_Deque_iterator<_Tp, _Tp&, _Tp*>&, - const _VTp&); - - template - - inline void - __fill_a(_FIte __first, _FIte __last, const _Tp& __value) - { std::__fill_a1(__first, __last, __value); } - - template - void - __fill_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>&, - const _Tp&); -# 934 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline void - fill(_ForwardIterator __first, _ForwardIterator __last, const _Tp& __value) - { - - - - ; - - std::__fill_a(__first, __last, __value); - } - - - inline constexpr int - __size_to_integer(int __n) { return __n; } - inline constexpr unsigned - __size_to_integer(unsigned __n) { return __n; } - inline constexpr long - __size_to_integer(long __n) { return __n; } - inline constexpr unsigned long - __size_to_integer(unsigned long __n) { return __n; } - inline constexpr long long - __size_to_integer(long long __n) { return __n; } - inline constexpr unsigned long long - __size_to_integer(unsigned long long __n) { return __n; } - - - inline constexpr __int128 - __size_to_integer(__int128 __n) { return __n; } - inline constexpr unsigned __int128 - __size_to_integer(unsigned __int128 __n) { return __n; } -# 986 "/usr/include/c++/10/bits/stl_algobase.h" 3 - inline constexpr long long - __size_to_integer(float __n) { return (long long)__n; } - inline constexpr long long - __size_to_integer(double __n) { return (long long)__n; } - inline constexpr long long - __size_to_integer(long double __n) { return (long long)__n; } - - inline constexpr long long - __size_to_integer(__float128 __n) { return (long long)__n; } - - - template - - inline typename - __gnu_cxx::__enable_if::__value, _OutputIterator>::__type - __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) - { - for (; __n > 0; --__n, (void) ++__first) - *__first = __value; - return __first; - } - - template - - inline typename - __gnu_cxx::__enable_if<__is_scalar<_Tp>::__value, _OutputIterator>::__type - __fill_n_a1(_OutputIterator __first, _Size __n, const _Tp& __value) - { - const _Tp __tmp = __value; - for (; __n > 0; --__n, (void) ++__first) - *__first = __tmp; - return __first; - } - - template - ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat> - __fill_n_a(const ::__gnu_debug::_Safe_iterator<_Ite, _Seq, _Cat>& __first, - _Size __n, const _Tp& __value, - std::input_iterator_tag); - - template - - inline _OutputIterator - __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, - std::output_iterator_tag) - { - - static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); - - return __fill_n_a1(__first, __n, __value); - } - - template - - inline _OutputIterator - __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, - std::input_iterator_tag) - { - - static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); - - return __fill_n_a1(__first, __n, __value); - } - - template - - inline _OutputIterator - __fill_n_a(_OutputIterator __first, _Size __n, const _Tp& __value, - std::random_access_iterator_tag) - { - - static_assert(is_integral<_Size>{}, "fill_n must pass integral size"); - - if (__n <= 0) - return __first; - - ; - - std::__fill_a(__first, __first + __n, __value); - return __first + __n; - } -# 1086 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _OI - fill_n(_OI __first, _Size __n, const _Tp& __value) - { - - - - return std::__fill_n_a(__first, std::__size_to_integer(__n), __value, - std::__iterator_category(__first)); - } - - template - struct __equal - { - template - - static bool - equal(_II1 __first1, _II1 __last1, _II2 __first2) - { - for (; __first1 != __last1; ++__first1, (void) ++__first2) - if (!(*__first1 == *__first2)) - return false; - return true; - } - }; - - template<> - struct __equal - { - template - - static bool - equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) - { - if (const size_t __len = (__last1 - __first1)) - return !std::__memcmp(__first1, __first2, __len); - return true; - } - }; - - template - typename __gnu_cxx::__enable_if< - __is_random_access_iter<_II>::__value, bool>::__type - __equal_aux1(std::_Deque_iterator<_Tp, _Ref, _Ptr>, - std::_Deque_iterator<_Tp, _Ref, _Ptr>, - _II); - - template - bool - __equal_aux1(std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, - std::_Deque_iterator<_Tp1, _Ref1, _Ptr1>, - std::_Deque_iterator<_Tp2, _Ref2, _Ptr2>); - - template - typename __gnu_cxx::__enable_if< - __is_random_access_iter<_II>::__value, bool>::__type - __equal_aux1(_II, _II, - std::_Deque_iterator<_Tp, _Ref, _Ptr>); - - template - - inline bool - __equal_aux1(_II1 __first1, _II1 __last1, _II2 __first2) - { - typedef typename iterator_traits<_II1>::value_type _ValueType1; - const bool __simple = ((__is_integer<_ValueType1>::__value - || __is_pointer<_ValueType1>::__value) - && __memcmpable<_II1, _II2>::__value); - return std::__equal<__simple>::equal(__first1, __last1, __first2); - } - - template - - inline bool - __equal_aux(_II1 __first1, _II1 __last1, _II2 __first2) - { - return std::__equal_aux1(std::__niter_base(__first1), - std::__niter_base(__last1), - std::__niter_base(__first2)); - } - - template - bool - __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, - const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, - _II2); - - template - bool - __equal_aux(_II1, _II1, - const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); - - template - bool - __equal_aux(const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, - const ::__gnu_debug::_Safe_iterator<_II1, _Seq1, _Cat1>&, - const ::__gnu_debug::_Safe_iterator<_II2, _Seq2, _Cat2>&); - - template - struct __lc_rai - { - template - - static _II1 - __newlast1(_II1, _II1 __last1, _II2, _II2) - { return __last1; } - - template - - static bool - __cnd2(_II __first, _II __last) - { return __first != __last; } - }; - - template<> - struct __lc_rai - { - template - - static _RAI1 - __newlast1(_RAI1 __first1, _RAI1 __last1, - _RAI2 __first2, _RAI2 __last2) - { - const typename iterator_traits<_RAI1>::difference_type - __diff1 = __last1 - __first1; - const typename iterator_traits<_RAI2>::difference_type - __diff2 = __last2 - __first2; - return __diff2 < __diff1 ? __first1 + __diff2 : __last1; - } - - template - static bool - __cnd2(_RAI, _RAI) - { return true; } - }; - - template - - bool - __lexicographical_compare_impl(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2, - _Compare __comp) - { - typedef typename iterator_traits<_II1>::iterator_category _Category1; - typedef typename iterator_traits<_II2>::iterator_category _Category2; - typedef std::__lc_rai<_Category1, _Category2> __rai_type; - - __last1 = __rai_type::__newlast1(__first1, __last1, __first2, __last2); - for (; __first1 != __last1 && __rai_type::__cnd2(__first2, __last2); - ++__first1, (void)++__first2) - { - if (__comp(__first1, __first2)) - return true; - if (__comp(__first2, __first1)) - return false; - } - return __first1 == __last1 && __first2 != __last2; - } - - template - struct __lexicographical_compare - { - template - - static bool - __lc(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) - { - using __gnu_cxx::__ops::__iter_less_iter; - return std::__lexicographical_compare_impl(__first1, __last1, - __first2, __last2, - __iter_less_iter()); - } - }; - - template<> - struct __lexicographical_compare - { - template - - static bool - __lc(const _Tp* __first1, const _Tp* __last1, - const _Up* __first2, const _Up* __last2) - { - const size_t __len1 = __last1 - __first1; - const size_t __len2 = __last2 - __first2; - if (const size_t __len = std::min(__len1, __len2)) - if (int __result = std::__memcmp(__first1, __first2, __len)) - return __result < 0; - return __len1 < __len2; - } - }; - - template - - inline bool - __lexicographical_compare_aux(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2) - { - typedef typename iterator_traits<_II1>::value_type _ValueType1; - typedef typename iterator_traits<_II2>::value_type _ValueType2; - const bool __simple = - (__is_memcmp_ordered_with<_ValueType1, _ValueType2>::__value - && __is_pointer<_II1>::__value - && __is_pointer<_II2>::__value - - - - - - - - ); - - return std::__lexicographical_compare<__simple>::__lc(__first1, __last1, - __first2, __last2); - } - - template - - _ForwardIterator - __lower_bound(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __val, _Compare __comp) - { - typedef typename iterator_traits<_ForwardIterator>::difference_type - _DistanceType; - - _DistanceType __len = std::distance(__first, __last); - - while (__len > 0) - { - _DistanceType __half = __len >> 1; - _ForwardIterator __middle = __first; - std::advance(__middle, __half); - if (__comp(__middle, __val)) - { - __first = __middle; - ++__first; - __len = __len - __half - 1; - } - else - __len = __half; - } - return __first; - } -# 1345 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline _ForwardIterator - lower_bound(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __val) - { - - - - - ; - - return std::__lower_bound(__first, __last, __val, - __gnu_cxx::__ops::__iter_less_val()); - } - - - - inline constexpr int - __lg(int __n) - { return (int)sizeof(int) * 8 - 1 - __builtin_clz(__n); } - - inline constexpr unsigned - __lg(unsigned __n) - { return (int)sizeof(int) * 8 - 1 - __builtin_clz(__n); } - - inline constexpr long - __lg(long __n) - { return (int)sizeof(long) * 8 - 1 - __builtin_clzl(__n); } - - inline constexpr unsigned long - __lg(unsigned long __n) - { return (int)sizeof(long) * 8 - 1 - __builtin_clzl(__n); } - - inline constexpr long long - __lg(long long __n) - { return (int)sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } - - inline constexpr unsigned long long - __lg(unsigned long long __n) - { return (int)sizeof(long long) * 8 - 1 - __builtin_clzll(__n); } - - -# 1401 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - equal(_II1 __first1, _II1 __last1, _II2 __first2) - { - - - - - - - ; - - return std::__equal_aux(__first1, __last1, __first2); - } -# 1432 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - equal(_IIter1 __first1, _IIter1 __last1, - _IIter2 __first2, _BinaryPredicate __binary_pred) - { - - - - ; - - for (; __first1 != __last1; ++__first1, (void)++__first2) - if (!bool(__binary_pred(*__first1, *__first2))) - return false; - return true; - } - - - - template - - inline bool - __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) - { - using _RATag = random_access_iterator_tag; - using _Cat1 = typename iterator_traits<_II1>::iterator_category; - using _Cat2 = typename iterator_traits<_II2>::iterator_category; - using _RAIters = __and_, is_same<_Cat2, _RATag>>; - if (_RAIters()) - { - auto __d1 = std::distance(__first1, __last1); - auto __d2 = std::distance(__first2, __last2); - if (__d1 != __d2) - return false; - return std::equal(__first1, __last1, __first2); - } - - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, (void)++__first2) - if (!(*__first1 == *__first2)) - return false; - return __first1 == __last1 && __first2 == __last2; - } - - - template - - inline bool - __equal4(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2, - _BinaryPredicate __binary_pred) - { - using _RATag = random_access_iterator_tag; - using _Cat1 = typename iterator_traits<_II1>::iterator_category; - using _Cat2 = typename iterator_traits<_II2>::iterator_category; - using _RAIters = __and_, is_same<_Cat2, _RATag>>; - if (_RAIters()) - { - auto __d1 = std::distance(__first1, __last1); - auto __d2 = std::distance(__first2, __last2); - if (__d1 != __d2) - return false; - return std::equal(__first1, __last1, __first2, - __binary_pred); - } - - for (; __first1 != __last1 && __first2 != __last2; - ++__first1, (void)++__first2) - if (!bool(__binary_pred(*__first1, *__first2))) - return false; - return __first1 == __last1 && __first2 == __last2; - } -# 1522 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - equal(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2) - { - - - - - - - ; - ; - - return std::__equal4(__first1, __last1, __first2, __last2); - } -# 1555 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - equal(_IIter1 __first1, _IIter1 __last1, - _IIter2 __first2, _IIter2 __last2, _BinaryPredicate __binary_pred) - { - - - - ; - ; - - return std::__equal4(__first1, __last1, __first2, __last2, - __binary_pred); - } -# 1587 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - lexicographical_compare(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2) - { - - - - - - - - - - ; - ; - - return std::__lexicographical_compare_aux(std::__niter_base(__first1), - std::__niter_base(__last1), - std::__niter_base(__first2), - std::__niter_base(__last2)); - } -# 1624 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - lexicographical_compare(_II1 __first1, _II1 __last1, - _II2 __first2, _II2 __last2, _Compare __comp) - { - - - - ; - ; - - return std::__lexicographical_compare_impl - (__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__comp)); - } -# 1737 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - pair<_InputIterator1, _InputIterator2> - __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _BinaryPredicate __binary_pred) - { - while (__first1 != __last1 && __binary_pred(__first1, __first2)) - { - ++__first1; - ++__first2; - } - return pair<_InputIterator1, _InputIterator2>(__first1, __first2); - } -# 1765 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2) - { - - - - - - - ; - - return std::__mismatch(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_equal_to_iter()); - } -# 1799 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _BinaryPredicate __binary_pred) - { - - - - ; - - return std::__mismatch(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); - } - - - - template - - pair<_InputIterator1, _InputIterator2> - __mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _InputIterator2 __last2, - _BinaryPredicate __binary_pred) - { - while (__first1 != __last1 && __first2 != __last2 - && __binary_pred(__first1, __first2)) - { - ++__first1; - ++__first2; - } - return pair<_InputIterator1, _InputIterator2>(__first1, __first2); - } -# 1848 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _InputIterator2 __last2) - { - - - - - - - ; - ; - - return std::__mismatch(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_equal_to_iter()); - } -# 1884 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline pair<_InputIterator1, _InputIterator2> - mismatch(_InputIterator1 __first1, _InputIterator1 __last1, - _InputIterator2 __first2, _InputIterator2 __last2, - _BinaryPredicate __binary_pred) - { - - - - ; - ; - - return std::__mismatch(__first1, __last1, __first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__binary_pred)); - } - - - - - - template - - inline _InputIterator - __find_if(_InputIterator __first, _InputIterator __last, - _Predicate __pred, input_iterator_tag) - { - while (__first != __last && !__pred(__first)) - ++__first; - return __first; - } - - - template - - _RandomAccessIterator - __find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, - _Predicate __pred, random_access_iterator_tag) - { - typename iterator_traits<_RandomAccessIterator>::difference_type - __trip_count = (__last - __first) >> 2; - - for (; __trip_count > 0; --__trip_count) - { - if (__pred(__first)) - return __first; - ++__first; - - if (__pred(__first)) - return __first; - ++__first; - - if (__pred(__first)) - return __first; - ++__first; - - if (__pred(__first)) - return __first; - ++__first; - } - - switch (__last - __first) - { - case 3: - if (__pred(__first)) - return __first; - ++__first; - - case 2: - if (__pred(__first)) - return __first; - ++__first; - - case 1: - if (__pred(__first)) - return __first; - ++__first; - - case 0: - default: - return __last; - } - } - - template - - inline _Iterator - __find_if(_Iterator __first, _Iterator __last, _Predicate __pred) - { - return __find_if(__first, __last, __pred, - std::__iterator_category(__first)); - } - - template - - typename iterator_traits<_InputIterator>::difference_type - __count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) - { - typename iterator_traits<_InputIterator>::difference_type __n = 0; - for (; __first != __last; ++__first) - if (__pred(__first)) - ++__n; - return __n; - } - - - template - - bool - __is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, - _ForwardIterator2 __first2, _BinaryPredicate __pred) - { - - - for (; __first1 != __last1; ++__first1, (void)++__first2) - if (!__pred(__first1, __first2)) - break; - - if (__first1 == __last1) - return true; - - - - _ForwardIterator2 __last2 = __first2; - std::advance(__last2, std::distance(__first1, __last1)); - for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan) - { - if (__scan != std::__find_if(__first1, __scan, - __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))) - continue; - - auto __matches - = std::__count_if(__first2, __last2, - __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)); - if (0 == __matches || - std::__count_if(__scan, __last1, - __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)) - != __matches) - return false; - } - return true; - } -# 2041 "/usr/include/c++/10/bits/stl_algobase.h" 3 - template - - inline bool - is_permutation(_ForwardIterator1 __first1, _ForwardIterator1 __last1, - _ForwardIterator2 __first2) - { - - - - - - - ; - - return std::__is_permutation(__first1, __last1, __first2, - __gnu_cxx::__ops::__iter_equal_to_iter()); - } - - - -} -# 40 "/usr/include/c++/10/bits/char_traits.h" 2 3 -# 1 "/usr/include/c++/10/bits/postypes.h" 1 3 -# 38 "/usr/include/c++/10/bits/postypes.h" 3 - -# 39 "/usr/include/c++/10/bits/postypes.h" 3 - -# 1 "/usr/include/c++/10/cwchar" 1 3 -# 39 "/usr/include/c++/10/cwchar" 3 - -# 40 "/usr/include/c++/10/cwchar" 3 - - - - -# 1 "/usr/include/wchar.h" 1 3 4 -# 27 "/usr/include/wchar.h" 3 4 -# 1 "/usr/include/bits/libc-header-start.h" 1 3 4 -# 28 "/usr/include/wchar.h" 2 3 4 - - -# 1 "/usr/include/bits/floatn.h" 1 3 4 -# 74 "/usr/include/bits/floatn.h" 3 4 -typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); -# 86 "/usr/include/bits/floatn.h" 3 4 -typedef __float128 _Float128; -# 119 "/usr/include/bits/floatn.h" 3 4 -# 1 "/usr/include/bits/floatn-common.h" 1 3 4 -# 24 "/usr/include/bits/floatn-common.h" 3 4 -# 1 "/usr/include/bits/long-double.h" 1 3 4 -# 25 "/usr/include/bits/floatn-common.h" 2 3 4 -# 214 "/usr/include/bits/floatn-common.h" 3 4 -typedef float _Float32; -# 251 "/usr/include/bits/floatn-common.h" 3 4 -typedef double _Float64; -# 268 "/usr/include/bits/floatn-common.h" 3 4 -typedef double _Float32x; -# 285 "/usr/include/bits/floatn-common.h" 3 4 -typedef long double _Float64x; -# 120 "/usr/include/bits/floatn.h" 2 3 4 -# 31 "/usr/include/wchar.h" 2 3 4 - - - - -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 209 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 3 4 -typedef long unsigned int size_t; -# 36 "/usr/include/wchar.h" 2 3 4 - - - - -# 1 "/usr/include/bits/wchar.h" 1 3 4 -# 41 "/usr/include/wchar.h" 2 3 4 -# 1 "/usr/include/bits/types/wint_t.h" 1 3 4 -# 20 "/usr/include/bits/types/wint_t.h" 3 4 -typedef unsigned int wint_t; -# 42 "/usr/include/wchar.h" 2 3 4 -# 1 "/usr/include/bits/types/mbstate_t.h" 1 3 4 - - - -# 1 "/usr/include/bits/types/__mbstate_t.h" 1 3 4 -# 13 "/usr/include/bits/types/__mbstate_t.h" 3 4 -typedef struct -{ - int __count; - union - { - unsigned int __wch; - char __wchb[4]; - } __value; -} __mbstate_t; -# 5 "/usr/include/bits/types/mbstate_t.h" 2 3 4 - -typedef __mbstate_t mbstate_t; -# 43 "/usr/include/wchar.h" 2 3 4 -# 1 "/usr/include/bits/types/__FILE.h" 1 3 4 - - - -struct _IO_FILE; -typedef struct _IO_FILE __FILE; -# 44 "/usr/include/wchar.h" 2 3 4 - - -# 1 "/usr/include/bits/types/FILE.h" 1 3 4 - - - -struct _IO_FILE; - - -typedef struct _IO_FILE FILE; -# 47 "/usr/include/wchar.h" 2 3 4 - - -# 1 "/usr/include/bits/types/locale_t.h" 1 3 4 -# 22 "/usr/include/bits/types/locale_t.h" 3 4 -# 1 "/usr/include/bits/types/__locale_t.h" 1 3 4 -# 28 "/usr/include/bits/types/__locale_t.h" 3 4 -struct __locale_struct -{ - - struct __locale_data *__locales[13]; - - - const unsigned short int *__ctype_b; - const int *__ctype_tolower; - const int *__ctype_toupper; - - - const char *__names[13]; -}; - -typedef struct __locale_struct *__locale_t; -# 23 "/usr/include/bits/types/locale_t.h" 2 3 4 - -typedef __locale_t locale_t; -# 50 "/usr/include/wchar.h" 2 3 4 -# 79 "/usr/include/wchar.h" 3 4 -extern "C" { - - - -struct tm; - - - -extern wchar_t *wcscpy (wchar_t *__restrict __dest, - const wchar_t *__restrict __src) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern wchar_t *wcsncpy (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, size_t __n) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern wchar_t *wcscat (wchar_t *__restrict __dest, - const wchar_t *__restrict __src) - throw () __attribute__ ((__nonnull__ (1, 2))); - -extern wchar_t *wcsncat (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, size_t __n) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int wcscmp (const wchar_t *__s1, const wchar_t *__s2) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); - -extern int wcsncmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); - - - -extern int wcscasecmp (const wchar_t *__s1, const wchar_t *__s2) throw (); - - -extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2, - size_t __n) throw (); - - - -extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2, - locale_t __loc) throw (); - -extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2, - size_t __n, locale_t __loc) throw (); - - - - -extern int wcscoll (const wchar_t *__s1, const wchar_t *__s2) throw (); - - - -extern size_t wcsxfrm (wchar_t *__restrict __s1, - const wchar_t *__restrict __s2, size_t __n) throw (); - - - - - - - -extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2, - locale_t __loc) throw (); - - - - -extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2, - size_t __n, locale_t __loc) throw (); - - -extern wchar_t *wcsdup (const wchar_t *__s) throw () __attribute__ ((__malloc__)); - - - - -extern "C++" wchar_t *wcschr (wchar_t *__wcs, wchar_t __wc) - throw () __asm ("wcschr") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wcschr (const wchar_t *__wcs, wchar_t __wc) - throw () __asm ("wcschr") __attribute__ ((__pure__)); - - - - - - -extern "C++" wchar_t *wcsrchr (wchar_t *__wcs, wchar_t __wc) - throw () __asm ("wcsrchr") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wcsrchr (const wchar_t *__wcs, wchar_t __wc) - throw () __asm ("wcsrchr") __attribute__ ((__pure__)); -# 181 "/usr/include/wchar.h" 3 4 -extern wchar_t *wcschrnul (const wchar_t *__s, wchar_t __wc) - throw () __attribute__ ((__pure__)); - - - - -extern size_t wcscspn (const wchar_t *__wcs, const wchar_t *__reject) - throw () __attribute__ ((__pure__)); - - -extern size_t wcsspn (const wchar_t *__wcs, const wchar_t *__accept) - throw () __attribute__ ((__pure__)); - - -extern "C++" wchar_t *wcspbrk (wchar_t *__wcs, const wchar_t *__accept) - throw () __asm ("wcspbrk") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wcspbrk (const wchar_t *__wcs, - const wchar_t *__accept) - throw () __asm ("wcspbrk") __attribute__ ((__pure__)); - - - - - - -extern "C++" wchar_t *wcsstr (wchar_t *__haystack, const wchar_t *__needle) - throw () __asm ("wcsstr") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wcsstr (const wchar_t *__haystack, - const wchar_t *__needle) - throw () __asm ("wcsstr") __attribute__ ((__pure__)); - - - - - - -extern wchar_t *wcstok (wchar_t *__restrict __s, - const wchar_t *__restrict __delim, - wchar_t **__restrict __ptr) throw (); - - -extern size_t wcslen (const wchar_t *__s) throw () __attribute__ ((__pure__)); - - - - -extern "C++" wchar_t *wcswcs (wchar_t *__haystack, const wchar_t *__needle) - throw () __asm ("wcswcs") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wcswcs (const wchar_t *__haystack, - const wchar_t *__needle) - throw () __asm ("wcswcs") __attribute__ ((__pure__)); -# 240 "/usr/include/wchar.h" 3 4 -extern size_t wcsnlen (const wchar_t *__s, size_t __maxlen) - throw () __attribute__ ((__pure__)); - - - - - -extern "C++" wchar_t *wmemchr (wchar_t *__s, wchar_t __c, size_t __n) - throw () __asm ("wmemchr") __attribute__ ((__pure__)); -extern "C++" const wchar_t *wmemchr (const wchar_t *__s, wchar_t __c, - size_t __n) - throw () __asm ("wmemchr") __attribute__ ((__pure__)); - - - - - - -extern int wmemcmp (const wchar_t *__s1, const wchar_t *__s2, size_t __n) - throw () __attribute__ ((__pure__)); - - -extern wchar_t *wmemcpy (wchar_t *__restrict __s1, - const wchar_t *__restrict __s2, size_t __n) throw (); - - - -extern wchar_t *wmemmove (wchar_t *__s1, const wchar_t *__s2, size_t __n) - throw (); - - -extern wchar_t *wmemset (wchar_t *__s, wchar_t __c, size_t __n) throw (); - - - - -extern wchar_t *wmempcpy (wchar_t *__restrict __s1, - const wchar_t *__restrict __s2, size_t __n) - throw (); - - - - - -extern wint_t btowc (int __c) throw (); - - - -extern int wctob (wint_t __c) throw (); - - - -extern int mbsinit (const mbstate_t *__ps) throw () __attribute__ ((__pure__)); - - - -extern size_t mbrtowc (wchar_t *__restrict __pwc, - const char *__restrict __s, size_t __n, - mbstate_t *__restrict __p) throw (); - - -extern size_t wcrtomb (char *__restrict __s, wchar_t __wc, - mbstate_t *__restrict __ps) throw (); - - -extern size_t __mbrlen (const char *__restrict __s, size_t __n, - mbstate_t *__restrict __ps) throw (); -extern size_t mbrlen (const char *__restrict __s, size_t __n, - mbstate_t *__restrict __ps) throw (); -# 337 "/usr/include/wchar.h" 3 4 -extern size_t mbsrtowcs (wchar_t *__restrict __dst, - const char **__restrict __src, size_t __len, - mbstate_t *__restrict __ps) throw (); - - - -extern size_t wcsrtombs (char *__restrict __dst, - const wchar_t **__restrict __src, size_t __len, - mbstate_t *__restrict __ps) throw (); - - - - - -extern size_t mbsnrtowcs (wchar_t *__restrict __dst, - const char **__restrict __src, size_t __nmc, - size_t __len, mbstate_t *__restrict __ps) throw (); - - - -extern size_t wcsnrtombs (char *__restrict __dst, - const wchar_t **__restrict __src, - size_t __nwc, size_t __len, - mbstate_t *__restrict __ps) throw (); - - - - - - -extern int wcwidth (wchar_t __c) throw (); - - - -extern int wcswidth (const wchar_t *__s, size_t __n) throw (); - - - - - -extern double wcstod (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); - - - -extern float wcstof (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); -extern long double wcstold (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); -# 396 "/usr/include/wchar.h" 3 4 -extern _Float32 wcstof32 (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); - - - -extern _Float64 wcstof64 (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); - - - -extern _Float128 wcstof128 (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); - - - -extern _Float32x wcstof32x (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); - - - -extern _Float64x wcstof64x (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr) throw (); -# 428 "/usr/include/wchar.h" 3 4 -extern long int wcstol (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base) throw (); - - - -extern unsigned long int wcstoul (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base) - throw (); - - - - -__extension__ -extern long long int wcstoll (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base) - throw (); - - - -__extension__ -extern unsigned long long int wcstoull (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base) throw (); - - - - - -__extension__ -extern long long int wcstoq (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base) - throw (); - - - -__extension__ -extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base) throw (); - - - - - - -extern long int wcstol_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base, - locale_t __loc) throw (); - -extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base, locale_t __loc) throw (); - -__extension__ -extern long long int wcstoll_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base, locale_t __loc) throw (); - -__extension__ -extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base, locale_t __loc) - throw (); - -extern double wcstod_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, locale_t __loc) - throw (); - -extern float wcstof_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, locale_t __loc) - throw (); - -extern long double wcstold_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); -# 511 "/usr/include/wchar.h" 3 4 -extern _Float32 wcstof32_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); - - - -extern _Float64 wcstof64_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); - - - -extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); - - - -extern _Float32x wcstof32x_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); - - - -extern _Float64x wcstof64x_l (const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - locale_t __loc) throw (); -# 551 "/usr/include/wchar.h" 3 4 -extern wchar_t *wcpcpy (wchar_t *__restrict __dest, - const wchar_t *__restrict __src) throw (); - - - -extern wchar_t *wcpncpy (wchar_t *__restrict __dest, - const wchar_t *__restrict __src, size_t __n) - throw (); -# 567 "/usr/include/wchar.h" 3 4 -extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) throw (); - - - - - -extern int fwide (__FILE *__fp, int __mode) throw (); - - - - - - -extern int fwprintf (__FILE *__restrict __stream, - const wchar_t *__restrict __format, ...) - ; - - - - -extern int wprintf (const wchar_t *__restrict __format, ...) - ; - -extern int swprintf (wchar_t *__restrict __s, size_t __n, - const wchar_t *__restrict __format, ...) - throw () ; - - - - - -extern int vfwprintf (__FILE *__restrict __s, - const wchar_t *__restrict __format, - __gnuc_va_list __arg) - ; - - - - -extern int vwprintf (const wchar_t *__restrict __format, - __gnuc_va_list __arg) - ; - - -extern int vswprintf (wchar_t *__restrict __s, size_t __n, - const wchar_t *__restrict __format, - __gnuc_va_list __arg) - throw () ; - - - - - - -extern int fwscanf (__FILE *__restrict __stream, - const wchar_t *__restrict __format, ...) - ; - - - - -extern int wscanf (const wchar_t *__restrict __format, ...) - ; - -extern int swscanf (const wchar_t *__restrict __s, - const wchar_t *__restrict __format, ...) - throw () ; -# 642 "/usr/include/wchar.h" 3 4 -extern int fwscanf (__FILE *__restrict __stream, const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc99_fwscanf") - - - ; -extern int wscanf (const wchar_t *__restrict __format, ...) __asm__ ("" "__isoc99_wscanf") - - ; -extern int swscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, ...) throw () __asm__ ("" "__isoc99_swscanf") - - - ; -# 673 "/usr/include/wchar.h" 3 4 -extern int vfwscanf (__FILE *__restrict __s, - const wchar_t *__restrict __format, - __gnuc_va_list __arg) - ; - - - - -extern int vwscanf (const wchar_t *__restrict __format, - __gnuc_va_list __arg) - ; - -extern int vswscanf (const wchar_t *__restrict __s, - const wchar_t *__restrict __format, - __gnuc_va_list __arg) - throw () ; - - - - - - - -extern int vfwscanf (__FILE *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfwscanf") - - - ; -extern int vwscanf (const wchar_t *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vwscanf") - - ; -extern int vswscanf (const wchar_t *__restrict __s, const wchar_t *__restrict __format, __gnuc_va_list __arg) throw () __asm__ ("" "__isoc99_vswscanf") - - - ; -# 729 "/usr/include/wchar.h" 3 4 -extern wint_t fgetwc (__FILE *__stream); -extern wint_t getwc (__FILE *__stream); - - - - - -extern wint_t getwchar (void); - - - - - - -extern wint_t fputwc (wchar_t __wc, __FILE *__stream); -extern wint_t putwc (wchar_t __wc, __FILE *__stream); - - - - - -extern wint_t putwchar (wchar_t __wc); - - - - - - - -extern wchar_t *fgetws (wchar_t *__restrict __ws, int __n, - __FILE *__restrict __stream); - - - - - -extern int fputws (const wchar_t *__restrict __ws, - __FILE *__restrict __stream); - - - - - - -extern wint_t ungetwc (wint_t __wc, __FILE *__stream); -# 784 "/usr/include/wchar.h" 3 4 -extern wint_t getwc_unlocked (__FILE *__stream); -extern wint_t getwchar_unlocked (void); - - - - - - - -extern wint_t fgetwc_unlocked (__FILE *__stream); - - - - - - - -extern wint_t fputwc_unlocked (wchar_t __wc, __FILE *__stream); -# 810 "/usr/include/wchar.h" 3 4 -extern wint_t putwc_unlocked (wchar_t __wc, __FILE *__stream); -extern wint_t putwchar_unlocked (wchar_t __wc); -# 820 "/usr/include/wchar.h" 3 4 -extern wchar_t *fgetws_unlocked (wchar_t *__restrict __ws, int __n, - __FILE *__restrict __stream); - - - - - - - -extern int fputws_unlocked (const wchar_t *__restrict __ws, - __FILE *__restrict __stream); - - - - - - -extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize, - const wchar_t *__restrict __format, - const struct tm *__restrict __tp) throw (); - - - - -extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize, - const wchar_t *__restrict __format, - const struct tm *__restrict __tp, - locale_t __loc) throw (); -# 860 "/usr/include/wchar.h" 3 4 -} -# 45 "/usr/include/c++/10/cwchar" 2 3 -# 62 "/usr/include/c++/10/cwchar" 3 -namespace std -{ - using ::mbstate_t; -} -# 135 "/usr/include/c++/10/cwchar" 3 -extern "C++" -{ -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - using ::wint_t; - - using ::btowc; - using ::fgetwc; - using ::fgetws; - using ::fputwc; - using ::fputws; - using ::fwide; - using ::fwprintf; - using ::fwscanf; - using ::getwc; - using ::getwchar; - using ::mbrlen; - using ::mbrtowc; - using ::mbsinit; - using ::mbsrtowcs; - using ::putwc; - using ::putwchar; - - using ::swprintf; - - using ::swscanf; - using ::ungetwc; - using ::vfwprintf; - - using ::vfwscanf; - - - using ::vswprintf; - - - using ::vswscanf; - - using ::vwprintf; - - using ::vwscanf; - - using ::wcrtomb; - using ::wcscat; - using ::wcscmp; - using ::wcscoll; - using ::wcscpy; - using ::wcscspn; - using ::wcsftime; - using ::wcslen; - using ::wcsncat; - using ::wcsncmp; - using ::wcsncpy; - using ::wcsrtombs; - using ::wcsspn; - using ::wcstod; - - using ::wcstof; - - using ::wcstok; - using ::wcstol; - using ::wcstoul; - using ::wcsxfrm; - using ::wctob; - using ::wmemcmp; - using ::wmemcpy; - using ::wmemmove; - using ::wmemset; - using ::wprintf; - using ::wscanf; - using ::wcschr; - using ::wcspbrk; - using ::wcsrchr; - using ::wcsstr; - using ::wmemchr; -# 234 "/usr/include/c++/10/cwchar" 3 - -} -} - - - - - - - -namespace __gnu_cxx -{ - - - - - - using ::wcstold; -# 260 "/usr/include/c++/10/cwchar" 3 - using ::wcstoll; - using ::wcstoull; - -} - -namespace std -{ - using ::__gnu_cxx::wcstold; - using ::__gnu_cxx::wcstoll; - using ::__gnu_cxx::wcstoull; -} -# 280 "/usr/include/c++/10/cwchar" 3 -namespace std -{ - - using std::wcstof; - - - using std::vfwscanf; - - - using std::vswscanf; - - - using std::vwscanf; - - - - using std::wcstold; - using std::wcstoll; - using std::wcstoull; - -} -# 41 "/usr/include/c++/10/bits/postypes.h" 2 3 -# 68 "/usr/include/c++/10/bits/postypes.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 88 "/usr/include/c++/10/bits/postypes.h" 3 - typedef long streamoff; -# 98 "/usr/include/c++/10/bits/postypes.h" 3 - typedef ptrdiff_t streamsize; -# 111 "/usr/include/c++/10/bits/postypes.h" 3 - template - class fpos - { - private: - streamoff _M_off; - _StateT _M_state; - - public: - - - - - fpos() - : _M_off(0), _M_state() { } -# 133 "/usr/include/c++/10/bits/postypes.h" 3 - fpos(streamoff __off) - : _M_off(__off), _M_state() { } - - - fpos(const fpos&) = default; - fpos& operator=(const fpos&) = default; - ~fpos() = default; - - - - operator streamoff() const { return _M_off; } - - - void - state(_StateT __st) - { _M_state = __st; } - - - _StateT - state() const - { return _M_state; } - - - - - - fpos& - operator+=(streamoff __off) - { - _M_off += __off; - return *this; - } - - - - - - fpos& - operator-=(streamoff __off) - { - _M_off -= __off; - return *this; - } - - - - - - - - fpos - operator+(streamoff __off) const - { - fpos __pos(*this); - __pos += __off; - return __pos; - } - - - - - - - - fpos - operator-(streamoff __off) const - { - fpos __pos(*this); - __pos -= __off; - return __pos; - } - - - - - - - streamoff - operator-(const fpos& __other) const - { return _M_off - __other._M_off; } - }; - - - - - - - template - inline bool - operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) - { return streamoff(__lhs) == streamoff(__rhs); } - - template - inline bool - operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) - { return streamoff(__lhs) != streamoff(__rhs); } - - - - - - typedef fpos streampos; - - typedef fpos wstreampos; -# 245 "/usr/include/c++/10/bits/postypes.h" 3 - typedef fpos u16streampos; - - typedef fpos u32streampos; - - - -} -# 41 "/usr/include/c++/10/bits/char_traits.h" 2 3 -# 1 "/usr/include/c++/10/cwchar" 1 3 -# 39 "/usr/include/c++/10/cwchar" 3 - -# 40 "/usr/include/c++/10/cwchar" 3 -# 42 "/usr/include/c++/10/bits/char_traits.h" 2 3 -# 50 "/usr/include/c++/10/bits/char_traits.h" 3 -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - -# 64 "/usr/include/c++/10/bits/char_traits.h" 3 - template - struct _Char_types - { - typedef unsigned long int_type; - typedef std::streampos pos_type; - typedef std::streamoff off_type; - typedef std::mbstate_t state_type; - }; -# 89 "/usr/include/c++/10/bits/char_traits.h" 3 - template - struct char_traits - { - typedef _CharT char_type; - typedef typename _Char_types<_CharT>::int_type int_type; - typedef typename _Char_types<_CharT>::pos_type pos_type; - typedef typename _Char_types<_CharT>::off_type off_type; - typedef typename _Char_types<_CharT>::state_type state_type; - - - - - static constexpr void - assign(char_type& __c1, const char_type& __c2) - { __c1 = __c2; } - - static constexpr bool - eq(const char_type& __c1, const char_type& __c2) - { return __c1 == __c2; } - - static constexpr bool - lt(const char_type& __c1, const char_type& __c2) - { return __c1 < __c2; } - - static constexpr int - compare(const char_type* __s1, const char_type* __s2, std::size_t __n); - - static constexpr std::size_t - length(const char_type* __s); - - static constexpr const char_type* - find(const char_type* __s, std::size_t __n, const char_type& __a); - - static char_type* - move(char_type* __s1, const char_type* __s2, std::size_t __n); - - static char_type* - copy(char_type* __s1, const char_type* __s2, std::size_t __n); - - static char_type* - assign(char_type* __s, std::size_t __n, char_type __a); - - static constexpr char_type - to_char_type(const int_type& __c) - { return static_cast(__c); } - - static constexpr int_type - to_int_type(const char_type& __c) - { return static_cast(__c); } - - static constexpr bool - eq_int_type(const int_type& __c1, const int_type& __c2) - { return __c1 == __c2; } - - static constexpr int_type - eof() - { return static_cast(-1); } - - static constexpr int_type - not_eof(const int_type& __c) - { return !eq_int_type(__c, eof()) ? __c : to_int_type(char_type()); } - }; - - template - constexpr int - char_traits<_CharT>:: - compare(const char_type* __s1, const char_type* __s2, std::size_t __n) - { - for (std::size_t __i = 0; __i < __n; ++__i) - if (lt(__s1[__i], __s2[__i])) - return -1; - else if (lt(__s2[__i], __s1[__i])) - return 1; - return 0; - } - - template - constexpr std::size_t - char_traits<_CharT>:: - length(const char_type* __p) - { - std::size_t __i = 0; - while (!eq(__p[__i], char_type())) - ++__i; - return __i; - } - - template - constexpr const typename char_traits<_CharT>::char_type* - char_traits<_CharT>:: - find(const char_type* __s, std::size_t __n, const char_type& __a) - { - for (std::size_t __i = 0; __i < __n; ++__i) - if (eq(__s[__i], __a)) - return __s + __i; - return 0; - } - - template - - typename char_traits<_CharT>::char_type* - char_traits<_CharT>:: - move(char_type* __s1, const char_type* __s2, std::size_t __n) - { - if (__n == 0) - return __s1; -# 205 "/usr/include/c++/10/bits/char_traits.h" 3 - return static_cast<_CharT*>(__builtin_memmove(__s1, __s2, - __n * sizeof(char_type))); - } - - template - - typename char_traits<_CharT>::char_type* - char_traits<_CharT>:: - copy(char_type* __s1, const char_type* __s2, std::size_t __n) - { - - std::copy(__s2, __s2 + __n, __s1); - return __s1; - } - - template - - typename char_traits<_CharT>::char_type* - char_traits<_CharT>:: - assign(char_type* __s, std::size_t __n, char_type __a) - { - - std::fill_n(__s, __n, __a); - return __s; - } - - -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 309 "/usr/include/c++/10/bits/char_traits.h" 3 - template - struct char_traits : public __gnu_cxx::char_traits<_CharT> - { }; - - - - template<> - struct char_traits - { - typedef char char_type; - typedef int int_type; - typedef streampos pos_type; - typedef streamoff off_type; - typedef mbstate_t state_type; - - - - - static void - assign(char_type& __c1, const char_type& __c2) noexcept - { __c1 = __c2; } - - static constexpr bool - eq(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr bool - lt(const char_type& __c1, const char_type& __c2) noexcept - { - - return (static_cast(__c1) - < static_cast(__c2)); - } - - static int - compare(const char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return 0; -# 361 "/usr/include/c++/10/bits/char_traits.h" 3 - return __builtin_memcmp(__s1, __s2, __n); - } - - static size_t - length(const char_type* __s) - { - - - - - return __builtin_strlen(__s); - } - - static const char_type* - find(const char_type* __s, size_t __n, const char_type& __a) - { - if (__n == 0) - return 0; - - - - - - - return static_cast(__builtin_memchr(__s, __a, __n)); - } - - static char_type* - move(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return static_cast(__builtin_memmove(__s1, __s2, __n)); - } - - static char_type* - copy(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return static_cast(__builtin_memcpy(__s1, __s2, __n)); - } - - static char_type* - assign(char_type* __s, size_t __n, char_type __a) - { - if (__n == 0) - return __s; - - - - - return static_cast(__builtin_memset(__s, __a, __n)); - } - - static constexpr char_type - to_char_type(const int_type& __c) noexcept - { return static_cast(__c); } - - - - static constexpr int_type - to_int_type(const char_type& __c) noexcept - { return static_cast(static_cast(__c)); } - - static constexpr bool - eq_int_type(const int_type& __c1, const int_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr int_type - eof() noexcept - { return static_cast(-1); } - - static constexpr int_type - not_eof(const int_type& __c) noexcept - { return (__c == eof()) ? 0 : __c; } - }; - - - - - template<> - struct char_traits - { - typedef wchar_t char_type; - typedef wint_t int_type; - typedef streamoff off_type; - typedef wstreampos pos_type; - typedef mbstate_t state_type; - - - - - static void - assign(char_type& __c1, const char_type& __c2) noexcept - { __c1 = __c2; } - - static constexpr bool - eq(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr bool - lt(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 < __c2; } - - static int - compare(const char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return 0; - - - - - - - return wmemcmp(__s1, __s2, __n); - } - - static size_t - length(const char_type* __s) - { - - - - - return wcslen(__s); - } - - static const char_type* - find(const char_type* __s, size_t __n, const char_type& __a) - { - if (__n == 0) - return 0; - - - - - - - return wmemchr(__s, __a, __n); - } - - static char_type* - move(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return wmemmove(__s1, __s2, __n); - } - - static char_type* - copy(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return wmemcpy(__s1, __s2, __n); - } - - static char_type* - assign(char_type* __s, size_t __n, char_type __a) - { - if (__n == 0) - return __s; - - - - - return wmemset(__s, __a, __n); - } - - static constexpr char_type - to_char_type(const int_type& __c) noexcept - { return char_type(__c); } - - static constexpr int_type - to_int_type(const char_type& __c) noexcept - { return int_type(__c); } - - static constexpr bool - eq_int_type(const int_type& __c1, const int_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr int_type - eof() noexcept - { return static_cast((0xffffffffu)); } - - static constexpr int_type - not_eof(const int_type& __c) noexcept - { return eq_int_type(__c, eof()) ? 0 : __c; } - }; -# 694 "/usr/include/c++/10/bits/char_traits.h" 3 - -} - - - -# 1 "/usr/include/c++/10/cstdint" 1 3 -# 32 "/usr/include/c++/10/cstdint" 3 - -# 33 "/usr/include/c++/10/cstdint" 3 -# 41 "/usr/include/c++/10/cstdint" 3 -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdint.h" 1 3 4 -# 9 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdint.h" 3 4 -# 1 "/usr/include/stdint.h" 1 3 4 -# 26 "/usr/include/stdint.h" 3 4 -# 1 "/usr/include/bits/libc-header-start.h" 1 3 4 -# 27 "/usr/include/stdint.h" 2 3 4 -# 1 "/usr/include/bits/types.h" 1 3 4 -# 27 "/usr/include/bits/types.h" 3 4 -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 28 "/usr/include/bits/types.h" 2 3 4 -# 1 "/usr/include/bits/timesize.h" 1 3 4 -# 29 "/usr/include/bits/types.h" 2 3 4 - - -typedef unsigned char __u_char; -typedef unsigned short int __u_short; -typedef unsigned int __u_int; -typedef unsigned long int __u_long; - - -typedef signed char __int8_t; -typedef unsigned char __uint8_t; -typedef signed short int __int16_t; -typedef unsigned short int __uint16_t; -typedef signed int __int32_t; -typedef unsigned int __uint32_t; - -typedef signed long int __int64_t; -typedef unsigned long int __uint64_t; - - - - - - -typedef __int8_t __int_least8_t; -typedef __uint8_t __uint_least8_t; -typedef __int16_t __int_least16_t; -typedef __uint16_t __uint_least16_t; -typedef __int32_t __int_least32_t; -typedef __uint32_t __uint_least32_t; -typedef __int64_t __int_least64_t; -typedef __uint64_t __uint_least64_t; - - - -typedef long int __quad_t; -typedef unsigned long int __u_quad_t; - - - - - - - -typedef long int __intmax_t; -typedef unsigned long int __uintmax_t; -# 141 "/usr/include/bits/types.h" 3 4 -# 1 "/usr/include/bits/typesizes.h" 1 3 4 -# 142 "/usr/include/bits/types.h" 2 3 4 -# 1 "/usr/include/bits/time64.h" 1 3 4 -# 143 "/usr/include/bits/types.h" 2 3 4 - - -typedef unsigned long int __dev_t; -typedef unsigned int __uid_t; -typedef unsigned int __gid_t; -typedef unsigned long int __ino_t; -typedef unsigned long int __ino64_t; -typedef unsigned int __mode_t; -typedef unsigned long int __nlink_t; -typedef long int __off_t; -typedef long int __off64_t; -typedef int __pid_t; -typedef struct { int __val[2]; } __fsid_t; -typedef long int __clock_t; -typedef unsigned long int __rlim_t; -typedef unsigned long int __rlim64_t; -typedef unsigned int __id_t; -typedef long int __time_t; -typedef unsigned int __useconds_t; -typedef long int __suseconds_t; -typedef long int __suseconds64_t; - -typedef int __daddr_t; -typedef int __key_t; - - -typedef int __clockid_t; - - -typedef void * __timer_t; - - -typedef long int __blksize_t; - - - - -typedef long int __blkcnt_t; -typedef long int __blkcnt64_t; - - -typedef unsigned long int __fsblkcnt_t; -typedef unsigned long int __fsblkcnt64_t; - - -typedef unsigned long int __fsfilcnt_t; -typedef unsigned long int __fsfilcnt64_t; - - -typedef long int __fsword_t; - -typedef long int __ssize_t; - - -typedef long int __syscall_slong_t; - -typedef unsigned long int __syscall_ulong_t; - - - -typedef __off64_t __loff_t; -typedef char *__caddr_t; - - -typedef long int __intptr_t; - - -typedef unsigned int __socklen_t; - - - - -typedef int __sig_atomic_t; -# 28 "/usr/include/stdint.h" 2 3 4 - -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 30 "/usr/include/stdint.h" 2 3 4 - - - - -# 1 "/usr/include/bits/stdint-intn.h" 1 3 4 -# 24 "/usr/include/bits/stdint-intn.h" 3 4 -typedef __int8_t int8_t; -typedef __int16_t int16_t; -typedef __int32_t int32_t; -typedef __int64_t int64_t; -# 35 "/usr/include/stdint.h" 2 3 4 - - -# 1 "/usr/include/bits/stdint-uintn.h" 1 3 4 -# 24 "/usr/include/bits/stdint-uintn.h" 3 4 -typedef __uint8_t uint8_t; -typedef __uint16_t uint16_t; -typedef __uint32_t uint32_t; -typedef __uint64_t uint64_t; -# 38 "/usr/include/stdint.h" 2 3 4 - - - - - -typedef __int_least8_t int_least8_t; -typedef __int_least16_t int_least16_t; -typedef __int_least32_t int_least32_t; -typedef __int_least64_t int_least64_t; - - -typedef __uint_least8_t uint_least8_t; -typedef __uint_least16_t uint_least16_t; -typedef __uint_least32_t uint_least32_t; -typedef __uint_least64_t uint_least64_t; - - - - - -typedef signed char int_fast8_t; - -typedef long int int_fast16_t; -typedef long int int_fast32_t; -typedef long int int_fast64_t; -# 71 "/usr/include/stdint.h" 3 4 -typedef unsigned char uint_fast8_t; - -typedef unsigned long int uint_fast16_t; -typedef unsigned long int uint_fast32_t; -typedef unsigned long int uint_fast64_t; -# 87 "/usr/include/stdint.h" 3 4 -typedef long int intptr_t; - - -typedef unsigned long int uintptr_t; -# 101 "/usr/include/stdint.h" 3 4 -typedef __intmax_t intmax_t; -typedef __uintmax_t uintmax_t; -# 10 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stdint.h" 2 3 4 -# 42 "/usr/include/c++/10/cstdint" 2 3 - - -namespace std -{ - - using ::int8_t; - using ::int16_t; - using ::int32_t; - using ::int64_t; - - using ::int_fast8_t; - using ::int_fast16_t; - using ::int_fast32_t; - using ::int_fast64_t; - - using ::int_least8_t; - using ::int_least16_t; - using ::int_least32_t; - using ::int_least64_t; - - using ::intmax_t; - using ::intptr_t; - - using ::uint8_t; - using ::uint16_t; - using ::uint32_t; - using ::uint64_t; - - using ::uint_fast8_t; - using ::uint_fast16_t; - using ::uint_fast32_t; - using ::uint_fast64_t; - - using ::uint_least8_t; - using ::uint_least16_t; - using ::uint_least32_t; - using ::uint_least64_t; - - using ::uintmax_t; - using ::uintptr_t; - - - - - -} -# 700 "/usr/include/c++/10/bits/char_traits.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - template<> - struct char_traits - { - typedef char16_t char_type; - - typedef uint_least16_t int_type; - - - - - - typedef streamoff off_type; - typedef u16streampos pos_type; - typedef mbstate_t state_type; - - - - - static void - assign(char_type& __c1, const char_type& __c2) noexcept - { __c1 = __c2; } - - static constexpr bool - eq(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr bool - lt(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 < __c2; } - - static int - compare(const char_type* __s1, const char_type* __s2, size_t __n) - { - for (size_t __i = 0; __i < __n; ++__i) - if (lt(__s1[__i], __s2[__i])) - return -1; - else if (lt(__s2[__i], __s1[__i])) - return 1; - return 0; - } - - static size_t - length(const char_type* __s) - { - size_t __i = 0; - while (!eq(__s[__i], char_type())) - ++__i; - return __i; - } - - static const char_type* - find(const char_type* __s, size_t __n, const char_type& __a) - { - for (size_t __i = 0; __i < __n; ++__i) - if (eq(__s[__i], __a)) - return __s + __i; - return 0; - } - - static char_type* - move(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return (static_cast - (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); - } - - static char_type* - copy(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return (static_cast - (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); - } - - static char_type* - assign(char_type* __s, size_t __n, char_type __a) - { - for (size_t __i = 0; __i < __n; ++__i) - assign(__s[__i], __a); - return __s; - } - - static constexpr char_type - to_char_type(const int_type& __c) noexcept - { return char_type(__c); } - - static constexpr int_type - to_int_type(const char_type& __c) noexcept - { return __c == eof() ? int_type(0xfffd) : int_type(__c); } - - static constexpr bool - eq_int_type(const int_type& __c1, const int_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr int_type - eof() noexcept - { return static_cast(-1); } - - static constexpr int_type - not_eof(const int_type& __c) noexcept - { return eq_int_type(__c, eof()) ? 0 : __c; } - }; - - template<> - struct char_traits - { - typedef char32_t char_type; - - typedef uint_least32_t int_type; - - - - - - typedef streamoff off_type; - typedef u32streampos pos_type; - typedef mbstate_t state_type; - - - - - static void - assign(char_type& __c1, const char_type& __c2) noexcept - { __c1 = __c2; } - - static constexpr bool - eq(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr bool - lt(const char_type& __c1, const char_type& __c2) noexcept - { return __c1 < __c2; } - - static int - compare(const char_type* __s1, const char_type* __s2, size_t __n) - { - for (size_t __i = 0; __i < __n; ++__i) - if (lt(__s1[__i], __s2[__i])) - return -1; - else if (lt(__s2[__i], __s1[__i])) - return 1; - return 0; - } - - static size_t - length(const char_type* __s) - { - size_t __i = 0; - while (!eq(__s[__i], char_type())) - ++__i; - return __i; - } - - static const char_type* - find(const char_type* __s, size_t __n, const char_type& __a) - { - for (size_t __i = 0; __i < __n; ++__i) - if (eq(__s[__i], __a)) - return __s + __i; - return 0; - } - - static char_type* - move(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return (static_cast - (__builtin_memmove(__s1, __s2, __n * sizeof(char_type)))); - } - - static char_type* - copy(char_type* __s1, const char_type* __s2, size_t __n) - { - if (__n == 0) - return __s1; - - - - - return (static_cast - (__builtin_memcpy(__s1, __s2, __n * sizeof(char_type)))); - } - - static char_type* - assign(char_type* __s, size_t __n, char_type __a) - { - for (size_t __i = 0; __i < __n; ++__i) - assign(__s[__i], __a); - return __s; - } - - static constexpr char_type - to_char_type(const int_type& __c) noexcept - { return char_type(__c); } - - static constexpr int_type - to_int_type(const char_type& __c) noexcept - { return int_type(__c); } - - static constexpr bool - eq_int_type(const int_type& __c1, const int_type& __c2) noexcept - { return __c1 == __c2; } - - static constexpr int_type - eof() noexcept - { return static_cast(-1); } - - static constexpr int_type - not_eof(const int_type& __c) noexcept - { return eq_int_type(__c, eof()) ? 0 : __c; } - }; -# 952 "/usr/include/c++/10/bits/char_traits.h" 3 - -} -# 41 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/allocator.h" 1 3 -# 46 "/usr/include/c++/10/bits/allocator.h" 3 -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++allocator.h" 1 3 -# 33 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++allocator.h" 3 -# 1 "/usr/include/c++/10/ext/new_allocator.h" 1 3 -# 33 "/usr/include/c++/10/ext/new_allocator.h" 3 -# 1 "/usr/include/c++/10/new" 1 3 -# 38 "/usr/include/c++/10/new" 3 - -# 39 "/usr/include/c++/10/new" 3 - - -# 1 "/usr/include/c++/10/exception" 1 3 -# 33 "/usr/include/c++/10/exception" 3 - -# 34 "/usr/include/c++/10/exception" 3 - -#pragma GCC visibility push(default) - - -# 1 "/usr/include/c++/10/bits/exception.h" 1 3 -# 34 "/usr/include/c++/10/bits/exception.h" 3 - -# 35 "/usr/include/c++/10/bits/exception.h" 3 - -#pragma GCC visibility push(default) - - - -extern "C++" { - -namespace std -{ -# 60 "/usr/include/c++/10/bits/exception.h" 3 - class exception - { - public: - exception() noexcept { } - virtual ~exception() noexcept; - - exception(const exception&) = default; - exception& operator=(const exception&) = default; - exception(exception&&) = default; - exception& operator=(exception&&) = default; - - - - - virtual const char* - what() const noexcept; - }; - - - -} - -} - -#pragma GCC visibility pop -# 39 "/usr/include/c++/10/exception" 2 3 - -extern "C++" { - -namespace std -{ - - - - - - - class bad_exception : public exception - { - public: - bad_exception() noexcept { } - - - - virtual ~bad_exception() noexcept; - - - virtual const char* - what() const noexcept; - }; - - - typedef void (*terminate_handler) (); - - - typedef void (*unexpected_handler) (); - - - terminate_handler set_terminate(terminate_handler) noexcept; - - - - terminate_handler get_terminate() noexcept; - - - - - void terminate() noexcept __attribute__ ((__noreturn__)); - - - unexpected_handler set_unexpected(unexpected_handler) noexcept; - - - - unexpected_handler get_unexpected() noexcept; - - - - - void unexpected() __attribute__ ((__noreturn__)); -# 105 "/usr/include/c++/10/exception" 3 - - bool uncaught_exception() noexcept __attribute__ ((__pure__)); - - - - - int uncaught_exceptions() noexcept __attribute__ ((__pure__)); - - - -} - -namespace __gnu_cxx -{ - -# 137 "/usr/include/c++/10/exception" 3 - void __verbose_terminate_handler(); - - -} - -} - -#pragma GCC visibility pop - - -# 1 "/usr/include/c++/10/bits/exception_ptr.h" 1 3 -# 34 "/usr/include/c++/10/bits/exception_ptr.h" 3 -#pragma GCC visibility push(default) - - - -# 1 "/usr/include/c++/10/bits/cxxabi_init_exception.h" 1 3 -# 34 "/usr/include/c++/10/bits/cxxabi_init_exception.h" 3 - -# 35 "/usr/include/c++/10/bits/cxxabi_init_exception.h" 3 - -#pragma GCC visibility push(default) - -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 143 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 3 4 -typedef long int ptrdiff_t; -# 415 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 3 4 -typedef struct { - long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); - long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); -# 426 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 3 4 -} max_align_t; - - - - - - - typedef decltype(nullptr) nullptr_t; -# 39 "/usr/include/c++/10/bits/cxxabi_init_exception.h" 2 3 -# 50 "/usr/include/c++/10/bits/cxxabi_init_exception.h" 3 -namespace std -{ - class type_info; -} - -namespace __cxxabiv1 -{ - struct __cxa_refcounted_exception; - - extern "C" - { - - void* - __cxa_allocate_exception(size_t) noexcept; - - void - __cxa_free_exception(void*) noexcept; - - - __cxa_refcounted_exception* - __cxa_init_primary_exception(void *object, std::type_info *tinfo, - void ( *dest) (void *)) noexcept; - - } -} - - - -#pragma GCC visibility pop -# 39 "/usr/include/c++/10/bits/exception_ptr.h" 2 3 -# 1 "/usr/include/c++/10/typeinfo" 1 3 -# 32 "/usr/include/c++/10/typeinfo" 3 - -# 33 "/usr/include/c++/10/typeinfo" 3 - - - -# 1 "/usr/include/c++/10/bits/hash_bytes.h" 1 3 -# 33 "/usr/include/c++/10/bits/hash_bytes.h" 3 - -# 34 "/usr/include/c++/10/bits/hash_bytes.h" 3 - - - -namespace std -{ - - - - - - - - size_t - _Hash_bytes(const void* __ptr, size_t __len, size_t __seed); - - - - - - size_t - _Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed); - - -} -# 37 "/usr/include/c++/10/typeinfo" 2 3 - - -#pragma GCC visibility push(default) - -extern "C++" { - -namespace __cxxabiv1 -{ - class __class_type_info; -} -# 80 "/usr/include/c++/10/typeinfo" 3 -namespace std -{ - - - - - - - class type_info - { - public: - - - - - virtual ~type_info(); - - - - const char* name() const noexcept - { return __name[0] == '*' ? __name + 1 : __name; } -# 115 "/usr/include/c++/10/typeinfo" 3 - bool before(const type_info& __arg) const noexcept - { return (__name[0] == '*' && __arg.__name[0] == '*') - ? __name < __arg.__name - : __builtin_strcmp (__name, __arg.__name) < 0; } - - bool operator==(const type_info& __arg) const noexcept - { - return ((__name == __arg.__name) - || (__name[0] != '*' && - __builtin_strcmp (__name, __arg.__name) == 0)); - } -# 138 "/usr/include/c++/10/typeinfo" 3 - bool operator!=(const type_info& __arg) const noexcept - { return !operator==(__arg); } - - - - size_t hash_code() const noexcept - { - - return _Hash_bytes(name(), __builtin_strlen(name()), - static_cast(0xc70f6907UL)); - - - - } - - - - virtual bool __is_pointer_p() const; - - - virtual bool __is_function_p() const; - - - - - - - - virtual bool __do_catch(const type_info *__thr_type, void **__thr_obj, - unsigned __outer) const; - - - virtual bool __do_upcast(const __cxxabiv1::__class_type_info *__target, - void **__obj_ptr) const; - - protected: - const char *__name; - - explicit type_info(const char *__n): __name(__n) { } - - private: - - type_info& operator=(const type_info&); - type_info(const type_info&); - }; - - - - - - - - class bad_cast : public exception - { - public: - bad_cast() noexcept { } - - - - virtual ~bad_cast() noexcept; - - - virtual const char* what() const noexcept; - }; - - - - - - class bad_typeid : public exception - { - public: - bad_typeid () noexcept { } - - - - virtual ~bad_typeid() noexcept; - - - virtual const char* what() const noexcept; - }; -} - -} - -#pragma GCC visibility pop -# 40 "/usr/include/c++/10/bits/exception_ptr.h" 2 3 -# 1 "/usr/include/c++/10/new" 1 3 -# 41 "/usr/include/c++/10/bits/exception_ptr.h" 2 3 - -extern "C++" { - -namespace std -{ - class type_info; - - - - - - - namespace __exception_ptr - { - class exception_ptr; - } - - using __exception_ptr::exception_ptr; - - - - - - exception_ptr current_exception() noexcept; - - template - exception_ptr make_exception_ptr(_Ex) noexcept; - - - void rethrow_exception(exception_ptr) __attribute__ ((__noreturn__)); - - namespace __exception_ptr - { - using std::rethrow_exception; - - - - - - class exception_ptr - { - void* _M_exception_object; - - explicit exception_ptr(void* __e) noexcept; - - void _M_addref() noexcept; - void _M_release() noexcept; - - void *_M_get() const noexcept __attribute__ ((__pure__)); - - friend exception_ptr std::current_exception() noexcept; - friend void std::rethrow_exception(exception_ptr); - template - friend exception_ptr std::make_exception_ptr(_Ex) noexcept; - - public: - exception_ptr() noexcept; - - exception_ptr(const exception_ptr&) noexcept; - - - exception_ptr(nullptr_t) noexcept - : _M_exception_object(0) - { } - - exception_ptr(exception_ptr&& __o) noexcept - : _M_exception_object(__o._M_exception_object) - { __o._M_exception_object = 0; } -# 118 "/usr/include/c++/10/bits/exception_ptr.h" 3 - exception_ptr& - operator=(const exception_ptr&) noexcept; - - - exception_ptr& - operator=(exception_ptr&& __o) noexcept - { - exception_ptr(static_cast(__o)).swap(*this); - return *this; - } - - - ~exception_ptr() noexcept; - - void - swap(exception_ptr&) noexcept; -# 145 "/usr/include/c++/10/bits/exception_ptr.h" 3 - explicit operator bool() const - { return _M_exception_object; } - - - friend bool - operator==(const exception_ptr&, const exception_ptr&) - noexcept __attribute__ ((__pure__)); - - const class std::type_info* - __cxa_exception_type() const noexcept - __attribute__ ((__pure__)); - }; - - - - bool - operator==(const exception_ptr&, const exception_ptr&) - noexcept __attribute__ ((__pure__)); - - bool - operator!=(const exception_ptr&, const exception_ptr&) - noexcept __attribute__ ((__pure__)); - - inline void - swap(exception_ptr& __lhs, exception_ptr& __rhs) - { __lhs.swap(__rhs); } - - - - - template - inline void - __dest_thunk(void* __x) - { static_cast<_Ex*>(__x)->~_Ex(); } - - - } - - - template - exception_ptr - make_exception_ptr(_Ex __ex) noexcept - { - - void* __e = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ex)); - (void) __cxxabiv1::__cxa_init_primary_exception( - __e, const_cast(&typeid(__ex)), - __exception_ptr::__dest_thunk<_Ex>); - try - { - ::new (__e) _Ex(__ex); - return exception_ptr(__e); - } - catch(...) - { - __cxxabiv1::__cxa_free_exception(__e); - return current_exception(); - } -# 215 "/usr/include/c++/10/bits/exception_ptr.h" 3 - } - - -} - -} - -#pragma GCC visibility pop -# 148 "/usr/include/c++/10/exception" 2 3 -# 1 "/usr/include/c++/10/bits/nested_exception.h" 1 3 -# 33 "/usr/include/c++/10/bits/nested_exception.h" 3 -#pragma GCC visibility push(default) -# 42 "/usr/include/c++/10/bits/nested_exception.h" 3 -extern "C++" { - -namespace std -{ - - - - - - - class nested_exception - { - exception_ptr _M_ptr; - - public: - nested_exception() noexcept : _M_ptr(current_exception()) { } - - nested_exception(const nested_exception&) noexcept = default; - - nested_exception& operator=(const nested_exception&) noexcept = default; - - virtual ~nested_exception() noexcept; - - [[noreturn]] - void - rethrow_nested() const - { - if (_M_ptr) - rethrow_exception(_M_ptr); - std::terminate(); - } - - exception_ptr - nested_ptr() const noexcept - { return _M_ptr; } - }; - - - - template - struct _Nested_exception : public _Except, public nested_exception - { - explicit _Nested_exception(const _Except& __ex) - : _Except(__ex) - { } - - explicit _Nested_exception(_Except&& __ex) - : _Except(static_cast<_Except&&>(__ex)) - { } - }; - - - - - template - [[noreturn]] - inline void - __throw_with_nested_impl(_Tp&& __t, true_type) - { - using _Up = typename remove_reference<_Tp>::type; - throw _Nested_exception<_Up>{std::forward<_Tp>(__t)}; - } - - template - [[noreturn]] - inline void - __throw_with_nested_impl(_Tp&& __t, false_type) - { throw std::forward<_Tp>(__t); } - - - - - - template - [[noreturn]] - inline void - throw_with_nested(_Tp&& __t) - { - using _Up = typename decay<_Tp>::type; - using _CopyConstructible - = __and_, is_move_constructible<_Up>>; - static_assert(_CopyConstructible::value, - "throw_with_nested argument must be CopyConstructible"); - using __nest = __and_, __bool_constant, - __not_>>; - std::__throw_with_nested_impl(std::forward<_Tp>(__t), __nest{}); - } - - - - - template - using __rethrow_if_nested_cond = typename enable_if< - __and_, - __or_<__not_>, - is_convertible<_Tp*, nested_exception*>>>::value - >::type; - - - template - inline __rethrow_if_nested_cond<_Ex> - __rethrow_if_nested_impl(const _Ex* __ptr) - { - if (auto __ne_ptr = dynamic_cast(__ptr)) - __ne_ptr->rethrow_nested(); - } - - - inline void - __rethrow_if_nested_impl(const void*) - { } - - - - - template - inline void - rethrow_if_nested(const _Ex& __ex) - { std::__rethrow_if_nested_impl(std::__addressof(__ex)); } - - -} - -} - - - -#pragma GCC visibility pop -# 149 "/usr/include/c++/10/exception" 2 3 -# 42 "/usr/include/c++/10/new" 2 3 - -#pragma GCC visibility push(default) - -extern "C++" { - -namespace std -{ - - - - - - - class bad_alloc : public exception - { - public: - bad_alloc() throw() { } - - - bad_alloc(const bad_alloc&) = default; - bad_alloc& operator=(const bad_alloc&) = default; - - - - - virtual ~bad_alloc() throw(); - - - virtual const char* what() const throw(); - }; - - - class bad_array_new_length : public bad_alloc - { - public: - bad_array_new_length() throw() { } - - - - virtual ~bad_array_new_length() throw(); - - - virtual const char* what() const throw(); - }; - - - - - - - struct nothrow_t - { - - explicit nothrow_t() = default; - - }; - - extern const nothrow_t nothrow; - - - - typedef void (*new_handler)(); - - - - new_handler set_new_handler(new_handler) throw(); - - - - new_handler get_new_handler() noexcept; - -} -# 126 "/usr/include/c++/10/new" 3 - void* operator new(std::size_t) - __attribute__((__externally_visible__)); - void* operator new[](std::size_t) - __attribute__((__externally_visible__)); -void operator delete(void*) noexcept - __attribute__((__externally_visible__)); -void operator delete[](void*) noexcept - __attribute__((__externally_visible__)); - -void operator delete(void*, std::size_t) noexcept - __attribute__((__externally_visible__)); -void operator delete[](void*, std::size_t) noexcept - __attribute__((__externally_visible__)); - - void* operator new(std::size_t, const std::nothrow_t&) noexcept - __attribute__((__externally_visible__, __malloc__)); - void* operator new[](std::size_t, const std::nothrow_t&) noexcept - __attribute__((__externally_visible__, __malloc__)); -void operator delete(void*, const std::nothrow_t&) noexcept - __attribute__((__externally_visible__)); -void operator delete[](void*, const std::nothrow_t&) noexcept - __attribute__((__externally_visible__)); -# 174 "/usr/include/c++/10/new" 3 - inline void* operator new(std::size_t, void* __p) noexcept -{ return __p; } - inline void* operator new[](std::size_t, void* __p) noexcept -{ return __p; } - - -inline void operator delete (void*, void*) noexcept { } -inline void operator delete[](void*, void*) noexcept { } - -} -# 230 "/usr/include/c++/10/new" 3 -#pragma GCC visibility pop -# 34 "/usr/include/c++/10/ext/new_allocator.h" 2 3 - - - - - - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - -# 54 "/usr/include/c++/10/ext/new_allocator.h" 3 - template - class new_allocator - { - public: - typedef _Tp value_type; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - - template - struct rebind - { typedef new_allocator<_Tp1> other; }; - - - - - - typedef std::true_type propagate_on_container_move_assignment; - - - - new_allocator() noexcept { } - - - new_allocator(const new_allocator&) noexcept { } - - template - - new_allocator(const new_allocator<_Tp1>&) noexcept { } - - - ~new_allocator() noexcept { } - - pointer - address(reference __x) const noexcept - { return std::__addressof(__x); } - - const_pointer - address(const_reference __x) const noexcept - { return std::__addressof(__x); } - - - - - _Tp* - allocate(size_type __n, const void* = static_cast(0)) - { - if (__n > this->_M_max_size()) - std::__throw_bad_alloc(); -# 115 "/usr/include/c++/10/ext/new_allocator.h" 3 - return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp))); - } - - - void - deallocate(_Tp* __p, size_type __t) - { -# 133 "/usr/include/c++/10/ext/new_allocator.h" 3 - ::operator delete(__p - - , __t * sizeof(_Tp) - - ); - } - - - size_type - max_size() const noexcept - { return _M_max_size(); } - - - template - void - construct(_Up* __p, _Args&&... __args) - noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) - { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } - - template - void - destroy(_Up* __p) - noexcept(std::is_nothrow_destructible<_Up>::value) - { __p->~_Up(); } -# 169 "/usr/include/c++/10/ext/new_allocator.h" 3 - template - friend bool - operator==(const new_allocator&, const new_allocator<_Up>&) - noexcept - { return true; } - - - template - friend bool - operator!=(const new_allocator&, const new_allocator<_Up>&) - noexcept - { return false; } - - - private: - constexpr size_type - _M_max_size() const noexcept - { - - return std::size_t(0x7fffffffffffffffL) / sizeof(_Tp); - - - - } - }; - - -} -# 34 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++allocator.h" 2 3 - - -namespace std -{ -# 47 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++allocator.h" 3 - template - using __allocator_base = __gnu_cxx::new_allocator<_Tp>; -} -# 47 "/usr/include/c++/10/bits/allocator.h" 2 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - - template<> - class allocator - { - public: - typedef void value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - - typedef void* pointer; - typedef const void* const_pointer; - - template - struct rebind - { typedef allocator<_Tp1> other; }; -# 89 "/usr/include/c++/10/bits/allocator.h" 3 - typedef true_type propagate_on_container_move_assignment; - - typedef true_type is_always_equal; - - template - void - construct(_Up* __p, _Args&&... __args) - noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) - { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } - - template - void - destroy(_Up* __p) - noexcept(std::is_nothrow_destructible<_Up>::value) - { __p->~_Up(); } - - }; -# 115 "/usr/include/c++/10/bits/allocator.h" 3 - template - class allocator : public __allocator_base<_Tp> - { - public: - typedef _Tp value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - - typedef _Tp* pointer; - typedef const _Tp* const_pointer; - typedef _Tp& reference; - typedef const _Tp& const_reference; - - template - struct rebind - { typedef allocator<_Tp1> other; }; - - - - - - typedef true_type propagate_on_container_move_assignment; - - typedef true_type is_always_equal; - - - - - - allocator() noexcept { } - - - allocator(const allocator& __a) noexcept - : __allocator_base<_Tp>(__a) { } - - - - allocator& operator=(const allocator&) = default; - - - template - - allocator(const allocator<_Tp1>&) noexcept { } - - - - - ~allocator() noexcept { } -# 191 "/usr/include/c++/10/bits/allocator.h" 3 - friend bool - operator==(const allocator&, const allocator&) noexcept - { return true; } - - - friend bool - operator!=(const allocator&, const allocator&) noexcept - { return false; } - - - - }; - - template - inline bool - operator==(const allocator<_T1>&, const allocator<_T2>&) - noexcept - { return true; } - - - template - inline bool - operator!=(const allocator<_T1>&, const allocator<_T2>&) - noexcept - { return false; } - - - - - template - class allocator - { - public: - typedef _Tp value_type; - template allocator(const allocator<_Up>&) { } - }; - - template - class allocator - { - public: - typedef _Tp value_type; - template allocator(const allocator<_Up>&) { } - }; - - template - class allocator - { - public: - typedef _Tp value_type; - template allocator(const allocator<_Up>&) { } - }; - - - - - - - extern template class allocator; - extern template class allocator; - - - - - - - template - struct __alloc_swap - { static void _S_do_it(_Alloc&, _Alloc&) noexcept { } }; - - template - struct __alloc_swap<_Alloc, false> - { - static void - _S_do_it(_Alloc& __one, _Alloc& __two) noexcept - { - - if (__one != __two) - swap(__one, __two); - } - }; - - - template - struct __alloc_neq - { - static bool - _S_do_it(const _Alloc&, const _Alloc&) - { return false; } - }; - - template - struct __alloc_neq<_Alloc, false> - { - static bool - _S_do_it(const _Alloc& __one, const _Alloc& __two) - { return __one != __two; } - }; - - - template, - is_nothrow_move_constructible>::value> - struct __shrink_to_fit_aux - { static bool _S_do_it(_Tp&) noexcept { return false; } }; - - template - struct __shrink_to_fit_aux<_Tp, true> - { - static bool - _S_do_it(_Tp& __c) noexcept - { - - try - { - _Tp(__make_move_if_noexcept_iterator(__c.begin()), - __make_move_if_noexcept_iterator(__c.end()), - __c.get_allocator()).swap(__c); - return true; - } - catch(...) - { return false; } - - - - } - }; - - - -} -# 42 "/usr/include/c++/10/string" 2 3 - -# 1 "/usr/include/c++/10/bits/localefwd.h" 1 3 -# 37 "/usr/include/c++/10/bits/localefwd.h" 3 - -# 38 "/usr/include/c++/10/bits/localefwd.h" 3 - - -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++locale.h" 1 3 -# 39 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++locale.h" 3 - -# 40 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++locale.h" 3 - -# 1 "/usr/include/c++/10/clocale" 1 3 -# 39 "/usr/include/c++/10/clocale" 3 - -# 40 "/usr/include/c++/10/clocale" 3 - - -# 1 "/usr/include/locale.h" 1 3 4 -# 28 "/usr/include/locale.h" 3 4 -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 29 "/usr/include/locale.h" 2 3 4 -# 1 "/usr/include/bits/locale.h" 1 3 4 -# 30 "/usr/include/locale.h" 2 3 4 - -extern "C" { -# 51 "/usr/include/locale.h" 3 4 -struct lconv -{ - - - char *decimal_point; - char *thousands_sep; - - - - - - char *grouping; - - - - - - char *int_curr_symbol; - char *currency_symbol; - char *mon_decimal_point; - char *mon_thousands_sep; - char *mon_grouping; - char *positive_sign; - char *negative_sign; - char int_frac_digits; - char frac_digits; - - char p_cs_precedes; - - char p_sep_by_space; - - char n_cs_precedes; - - char n_sep_by_space; - - - - - - - char p_sign_posn; - char n_sign_posn; - - - char int_p_cs_precedes; - - char int_p_sep_by_space; - - char int_n_cs_precedes; - - char int_n_sep_by_space; - - - - - - - char int_p_sign_posn; - char int_n_sign_posn; -# 118 "/usr/include/locale.h" 3 4 -}; - - - -extern char *setlocale (int __category, const char *__locale) throw (); - - -extern struct lconv *localeconv (void) throw (); -# 141 "/usr/include/locale.h" 3 4 -extern locale_t newlocale (int __category_mask, const char *__locale, - locale_t __base) throw (); -# 176 "/usr/include/locale.h" 3 4 -extern locale_t duplocale (locale_t __dataset) throw (); - - - -extern void freelocale (locale_t __dataset) throw (); - - - - - - -extern locale_t uselocale (locale_t __dataset) throw (); - - - - - - - -} -# 43 "/usr/include/c++/10/clocale" 2 3 -# 51 "/usr/include/c++/10/clocale" 3 -namespace std -{ - using ::lconv; - using ::setlocale; - using ::localeconv; -} -# 42 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++locale.h" 2 3 - - - - - - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - extern "C" __typeof(uselocale) __uselocale; - - -} - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - typedef __locale_t __c_locale; - - - - - - inline int - __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)), - char* __out, - const int __size __attribute__ ((__unused__)), - const char* __fmt, ...) - { - - __c_locale __old = __gnu_cxx::__uselocale(__cloc); -# 88 "/usr/include/c++/10/x86_64-redhat-linux/bits/c++locale.h" 3 - __builtin_va_list __args; - __builtin_va_start(__args, __fmt); - - - const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args); - - - - - __builtin_va_end(__args); - - - __gnu_cxx::__uselocale(__old); - - - - - - - - return __ret; - } - - -} -# 41 "/usr/include/c++/10/bits/localefwd.h" 2 3 -# 1 "/usr/include/c++/10/iosfwd" 1 3 -# 36 "/usr/include/c++/10/iosfwd" 3 - -# 37 "/usr/include/c++/10/iosfwd" 3 - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 74 "/usr/include/c++/10/iosfwd" 3 - class ios_base; - - template > - class basic_ios; - - template > - class basic_streambuf; - - template > - class basic_istream; - - template > - class basic_ostream; - - template > - class basic_iostream; - - -namespace __cxx11 { - - template, - typename _Alloc = allocator<_CharT> > - class basic_stringbuf; - - template, - typename _Alloc = allocator<_CharT> > - class basic_istringstream; - - template, - typename _Alloc = allocator<_CharT> > - class basic_ostringstream; - - template, - typename _Alloc = allocator<_CharT> > - class basic_stringstream; - -} - - template > - class basic_filebuf; - - template > - class basic_ifstream; - - template > - class basic_ofstream; - - template > - class basic_fstream; - - template > - class istreambuf_iterator; - - template > - class ostreambuf_iterator; - - - - typedef basic_ios ios; - - - typedef basic_streambuf streambuf; - - - typedef basic_istream istream; - - - typedef basic_ostream ostream; - - - typedef basic_iostream iostream; - - - typedef basic_stringbuf stringbuf; - - - typedef basic_istringstream istringstream; - - - typedef basic_ostringstream ostringstream; - - - typedef basic_stringstream stringstream; - - - typedef basic_filebuf filebuf; - - - typedef basic_ifstream ifstream; - - - typedef basic_ofstream ofstream; - - - typedef basic_fstream fstream; - - - - typedef basic_ios wios; - - - typedef basic_streambuf wstreambuf; - - - typedef basic_istream wistream; - - - typedef basic_ostream wostream; - - - typedef basic_iostream wiostream; - - - typedef basic_stringbuf wstringbuf; - - - typedef basic_istringstream wistringstream; - - - typedef basic_ostringstream wostringstream; - - - typedef basic_stringstream wstringstream; - - - typedef basic_filebuf wfilebuf; - - - typedef basic_ifstream wifstream; - - - typedef basic_ofstream wofstream; - - - typedef basic_fstream wfstream; - - - - -} -# 42 "/usr/include/c++/10/bits/localefwd.h" 2 3 -# 1 "/usr/include/c++/10/cctype" 1 3 -# 39 "/usr/include/c++/10/cctype" 3 - -# 40 "/usr/include/c++/10/cctype" 3 - - -# 1 "/usr/include/ctype.h" 1 3 4 -# 28 "/usr/include/ctype.h" 3 4 -extern "C" { -# 39 "/usr/include/ctype.h" 3 4 -# 1 "/usr/include/bits/endian.h" 1 3 4 -# 35 "/usr/include/bits/endian.h" 3 4 -# 1 "/usr/include/bits/endianness.h" 1 3 4 -# 36 "/usr/include/bits/endian.h" 2 3 4 -# 40 "/usr/include/ctype.h" 2 3 4 - - - - - - -enum -{ - _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), - _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), - _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), - _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), - _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), - _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), - _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), - _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), - _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), - _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), - _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), - _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) -}; -# 79 "/usr/include/ctype.h" 3 4 -extern const unsigned short int **__ctype_b_loc (void) - throw () __attribute__ ((__const__)); -extern const __int32_t **__ctype_tolower_loc (void) - throw () __attribute__ ((__const__)); -extern const __int32_t **__ctype_toupper_loc (void) - throw () __attribute__ ((__const__)); -# 108 "/usr/include/ctype.h" 3 4 -extern int isalnum (int) throw (); -extern int isalpha (int) throw (); -extern int iscntrl (int) throw (); -extern int isdigit (int) throw (); -extern int islower (int) throw (); -extern int isgraph (int) throw (); -extern int isprint (int) throw (); -extern int ispunct (int) throw (); -extern int isspace (int) throw (); -extern int isupper (int) throw (); -extern int isxdigit (int) throw (); - - - -extern int tolower (int __c) throw (); - - -extern int toupper (int __c) throw (); - - - - -extern int isblank (int) throw (); - - - - -extern int isctype (int __c, int __mask) throw (); - - - - - - -extern int isascii (int __c) throw (); - - - -extern int toascii (int __c) throw (); - - - -extern int _toupper (int) throw (); -extern int _tolower (int) throw (); -# 251 "/usr/include/ctype.h" 3 4 -extern int isalnum_l (int, locale_t) throw (); -extern int isalpha_l (int, locale_t) throw (); -extern int iscntrl_l (int, locale_t) throw (); -extern int isdigit_l (int, locale_t) throw (); -extern int islower_l (int, locale_t) throw (); -extern int isgraph_l (int, locale_t) throw (); -extern int isprint_l (int, locale_t) throw (); -extern int ispunct_l (int, locale_t) throw (); -extern int isspace_l (int, locale_t) throw (); -extern int isupper_l (int, locale_t) throw (); -extern int isxdigit_l (int, locale_t) throw (); - -extern int isblank_l (int, locale_t) throw (); - - - -extern int __tolower_l (int __c, locale_t __l) throw (); -extern int tolower_l (int __c, locale_t __l) throw (); - - -extern int __toupper_l (int __c, locale_t __l) throw (); -extern int toupper_l (int __c, locale_t __l) throw (); -# 327 "/usr/include/ctype.h" 3 4 -} -# 43 "/usr/include/c++/10/cctype" 2 3 -# 62 "/usr/include/c++/10/cctype" 3 -namespace std -{ - using ::isalnum; - using ::isalpha; - using ::iscntrl; - using ::isdigit; - using ::isgraph; - using ::islower; - using ::isprint; - using ::ispunct; - using ::isspace; - using ::isupper; - using ::isxdigit; - using ::tolower; - using ::toupper; -} - - - - - - - -namespace std -{ - using ::isblank; -} -# 43 "/usr/include/c++/10/bits/localefwd.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 55 "/usr/include/c++/10/bits/localefwd.h" 3 - class locale; - - template - bool - has_facet(const locale&) throw(); - - template - const _Facet& - use_facet(const locale&); - - - template - bool - isspace(_CharT, const locale&); - - template - bool - isprint(_CharT, const locale&); - - template - bool - iscntrl(_CharT, const locale&); - - template - bool - isupper(_CharT, const locale&); - - template - bool - islower(_CharT, const locale&); - - template - bool - isalpha(_CharT, const locale&); - - template - bool - isdigit(_CharT, const locale&); - - template - bool - ispunct(_CharT, const locale&); - - template - bool - isxdigit(_CharT, const locale&); - - template - bool - isalnum(_CharT, const locale&); - - template - bool - isgraph(_CharT, const locale&); - - - template - bool - isblank(_CharT, const locale&); - - - template - _CharT - toupper(_CharT, const locale&); - - template - _CharT - tolower(_CharT, const locale&); - - - class ctype_base; - template - class ctype; - template<> class ctype; - - template<> class ctype; - - template - class ctype_byname; - - - class codecvt_base; - template - class codecvt; - template<> class codecvt; - - template<> class codecvt; - - - template<> class codecvt; - template<> class codecvt; - - - - - - template - class codecvt_byname; - - - - template > - class num_get; - template > - class num_put; - -namespace __cxx11 { - template class numpunct; - template class numpunct_byname; -} - -namespace __cxx11 { - - template - class collate; - template - class collate_byname; -} - - - class time_base; -namespace __cxx11 { - template > - class time_get; - template > - class time_get_byname; -} - template > - class time_put; - template > - class time_put_byname; - - - class money_base; -namespace __cxx11 { - template > - class money_get; - template > - class money_put; -} -namespace __cxx11 { - template - class moneypunct; - template - class moneypunct_byname; -} - - - class messages_base; -namespace __cxx11 { - template - class messages; - template - class messages_byname; -} - - -} -# 44 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/ostream_insert.h" 1 3 -# 33 "/usr/include/c++/10/bits/ostream_insert.h" 3 - -# 34 "/usr/include/c++/10/bits/ostream_insert.h" 3 - - -# 1 "/usr/include/c++/10/bits/cxxabi_forced.h" 1 3 -# 34 "/usr/include/c++/10/bits/cxxabi_forced.h" 3 - -# 35 "/usr/include/c++/10/bits/cxxabi_forced.h" 3 - -#pragma GCC visibility push(default) - - -namespace __cxxabiv1 -{ - - - - - - - - class __forced_unwind - { - virtual ~__forced_unwind() throw(); - - - virtual void __pure_dummy() = 0; - }; -} - - -#pragma GCC visibility pop -# 37 "/usr/include/c++/10/bits/ostream_insert.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - template - inline void - __ostream_write(basic_ostream<_CharT, _Traits>& __out, - const _CharT* __s, streamsize __n) - { - typedef basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const streamsize __put = __out.rdbuf()->sputn(__s, __n); - if (__put != __n) - __out.setstate(__ios_base::badbit); - } - - template - inline void - __ostream_fill(basic_ostream<_CharT, _Traits>& __out, streamsize __n) - { - typedef basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - const _CharT __c = __out.fill(); - for (; __n > 0; --__n) - { - const typename _Traits::int_type __put = __out.rdbuf()->sputc(__c); - if (_Traits::eq_int_type(__put, _Traits::eof())) - { - __out.setstate(__ios_base::badbit); - break; - } - } - } - - template - basic_ostream<_CharT, _Traits>& - __ostream_insert(basic_ostream<_CharT, _Traits>& __out, - const _CharT* __s, streamsize __n) - { - typedef basic_ostream<_CharT, _Traits> __ostream_type; - typedef typename __ostream_type::ios_base __ios_base; - - typename __ostream_type::sentry __cerb(__out); - if (__cerb) - { - try - { - const streamsize __w = __out.width(); - if (__w > __n) - { - const bool __left = ((__out.flags() - & __ios_base::adjustfield) - == __ios_base::left); - if (!__left) - __ostream_fill(__out, __w - __n); - if (__out.good()) - __ostream_write(__out, __s, __n); - if (__left && __out.good()) - __ostream_fill(__out, __w - __n); - } - else - __ostream_write(__out, __s, __n); - __out.width(0); - } - catch(__cxxabiv1::__forced_unwind&) - { - __out._M_setstate(__ios_base::badbit); - throw; - } - catch(...) - { __out._M_setstate(__ios_base::badbit); } - } - return __out; - } - - - - - extern template ostream& __ostream_insert(ostream&, const char*, streamsize); - - - extern template wostream& __ostream_insert(wostream&, const wchar_t*, - streamsize); - - - - -} -# 45 "/usr/include/c++/10/string" 2 3 - - - -# 1 "/usr/include/c++/10/bits/stl_function.h" 1 3 -# 63 "/usr/include/c++/10/bits/stl_function.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 104 "/usr/include/c++/10/bits/stl_function.h" 3 - template - struct unary_function - { - - typedef _Arg argument_type; - - - typedef _Result result_type; - }; - - - - - template - struct binary_function - { - - typedef _Arg1 first_argument_type; - - - typedef _Arg2 second_argument_type; - - - typedef _Result result_type; - }; -# 144 "/usr/include/c++/10/bits/stl_function.h" 3 - struct __is_transparent; - - template - struct plus; - - template - struct minus; - - template - struct multiplies; - - template - struct divides; - - template - struct modulus; - - template - struct negate; - - - - template - struct plus : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x + __y; } - }; - - - template - struct minus : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x - __y; } - }; - - - template - struct multiplies : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x * __y; } - }; - - - template - struct divides : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x / __y; } - }; - - - template - struct modulus : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x % __y; } - }; - - - template - struct negate : public unary_function<_Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x) const - { return -__x; } - }; - - - - - - template<> - struct plus - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) + std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) + std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) + std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct minus - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) - std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) - std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) - std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct multiplies - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) * std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) * std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) * std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct divides - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) / std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) / std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) / std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct modulus - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) % std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) % std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) % std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct negate - { - template - constexpr - auto - operator()(_Tp&& __t) const - noexcept(noexcept(-std::forward<_Tp>(__t))) - -> decltype(-std::forward<_Tp>(__t)) - { return -std::forward<_Tp>(__t); } - - typedef __is_transparent is_transparent; - }; -# 330 "/usr/include/c++/10/bits/stl_function.h" 3 - template - struct equal_to; - - template - struct not_equal_to; - - template - struct greater; - - template - struct less; - - template - struct greater_equal; - - template - struct less_equal; - - - - template - struct equal_to : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x == __y; } - }; - - - template - struct not_equal_to : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x != __y; } - }; - - - template - struct greater : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x > __y; } - }; - - - template - struct less : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x < __y; } - }; - - - template - struct greater_equal : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x >= __y; } - }; - - - template - struct less_equal : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x <= __y; } - }; - - - template - struct greater<_Tp*> : public binary_function<_Tp*, _Tp*, bool> - { - constexpr bool - operator()(_Tp* __x, _Tp* __y) const noexcept - { - - - if (__builtin_is_constant_evaluated()) - - - - return __x > __y; - - return (long unsigned int)__x > (long unsigned int)__y; - } - }; - - - template - struct less<_Tp*> : public binary_function<_Tp*, _Tp*, bool> - { - constexpr bool - operator()(_Tp* __x, _Tp* __y) const noexcept - { - - - if (__builtin_is_constant_evaluated()) - - - - return __x < __y; - - return (long unsigned int)__x < (long unsigned int)__y; - } - }; - - - template - struct greater_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> - { - constexpr bool - operator()(_Tp* __x, _Tp* __y) const noexcept - { - - - if (__builtin_is_constant_evaluated()) - - - - return __x >= __y; - - return (long unsigned int)__x >= (long unsigned int)__y; - } - }; - - - template - struct less_equal<_Tp*> : public binary_function<_Tp*, _Tp*, bool> - { - constexpr bool - operator()(_Tp* __x, _Tp* __y) const noexcept - { - - - if (__builtin_is_constant_evaluated()) - - - - return __x <= __y; - - return (long unsigned int)__x <= (long unsigned int)__y; - } - }; - - - - template<> - struct equal_to - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) == std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) == std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) == std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct not_equal_to - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) != std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) != std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) != std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct greater - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) > std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) > std::forward<_Up>(__u)) - { - return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), - __ptr_cmp<_Tp, _Up>{}); - } - - template - constexpr bool - operator()(_Tp* __t, _Up* __u) const noexcept - { return greater>{}(__t, __u); } - - typedef __is_transparent is_transparent; - - private: - template - static constexpr decltype(auto) - _S_cmp(_Tp&& __t, _Up&& __u, false_type) - { return std::forward<_Tp>(__t) > std::forward<_Up>(__u); } - - template - static constexpr bool - _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept - { - return greater{}( - static_cast(std::forward<_Tp>(__t)), - static_cast(std::forward<_Up>(__u))); - } - - - template - struct __not_overloaded2 : true_type { }; - - - template - struct __not_overloaded2<_Tp, _Up, __void_t< - decltype(std::declval<_Tp>().operator>(std::declval<_Up>()))>> - : false_type { }; - - - template - struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; - - - template - struct __not_overloaded<_Tp, _Up, __void_t< - decltype(operator>(std::declval<_Tp>(), std::declval<_Up>()))>> - : false_type { }; - - template - using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, - is_convertible<_Tp, const volatile void*>, - is_convertible<_Up, const volatile void*>>; - }; - - - template<> - struct less - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) < std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) < std::forward<_Up>(__u)) - { - return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), - __ptr_cmp<_Tp, _Up>{}); - } - - template - constexpr bool - operator()(_Tp* __t, _Up* __u) const noexcept - { return less>{}(__t, __u); } - - typedef __is_transparent is_transparent; - - private: - template - static constexpr decltype(auto) - _S_cmp(_Tp&& __t, _Up&& __u, false_type) - { return std::forward<_Tp>(__t) < std::forward<_Up>(__u); } - - template - static constexpr bool - _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept - { - return less{}( - static_cast(std::forward<_Tp>(__t)), - static_cast(std::forward<_Up>(__u))); - } - - - template - struct __not_overloaded2 : true_type { }; - - - template - struct __not_overloaded2<_Tp, _Up, __void_t< - decltype(std::declval<_Tp>().operator<(std::declval<_Up>()))>> - : false_type { }; - - - template - struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; - - - template - struct __not_overloaded<_Tp, _Up, __void_t< - decltype(operator<(std::declval<_Tp>(), std::declval<_Up>()))>> - : false_type { }; - - template - using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, - is_convertible<_Tp, const volatile void*>, - is_convertible<_Up, const volatile void*>>; - }; - - - template<> - struct greater_equal - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) >= std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) >= std::forward<_Up>(__u)) - { - return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), - __ptr_cmp<_Tp, _Up>{}); - } - - template - constexpr bool - operator()(_Tp* __t, _Up* __u) const noexcept - { return greater_equal>{}(__t, __u); } - - typedef __is_transparent is_transparent; - - private: - template - static constexpr decltype(auto) - _S_cmp(_Tp&& __t, _Up&& __u, false_type) - { return std::forward<_Tp>(__t) >= std::forward<_Up>(__u); } - - template - static constexpr bool - _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept - { - return greater_equal{}( - static_cast(std::forward<_Tp>(__t)), - static_cast(std::forward<_Up>(__u))); - } - - - template - struct __not_overloaded2 : true_type { }; - - - template - struct __not_overloaded2<_Tp, _Up, __void_t< - decltype(std::declval<_Tp>().operator>=(std::declval<_Up>()))>> - : false_type { }; - - - template - struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; - - - template - struct __not_overloaded<_Tp, _Up, __void_t< - decltype(operator>=(std::declval<_Tp>(), std::declval<_Up>()))>> - : false_type { }; - - template - using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, - is_convertible<_Tp, const volatile void*>, - is_convertible<_Up, const volatile void*>>; - }; - - - template<> - struct less_equal - { - template - constexpr auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) <= std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) <= std::forward<_Up>(__u)) - { - return _S_cmp(std::forward<_Tp>(__t), std::forward<_Up>(__u), - __ptr_cmp<_Tp, _Up>{}); - } - - template - constexpr bool - operator()(_Tp* __t, _Up* __u) const noexcept - { return less_equal>{}(__t, __u); } - - typedef __is_transparent is_transparent; - - private: - template - static constexpr decltype(auto) - _S_cmp(_Tp&& __t, _Up&& __u, false_type) - { return std::forward<_Tp>(__t) <= std::forward<_Up>(__u); } - - template - static constexpr bool - _S_cmp(_Tp&& __t, _Up&& __u, true_type) noexcept - { - return less_equal{}( - static_cast(std::forward<_Tp>(__t)), - static_cast(std::forward<_Up>(__u))); - } - - - template - struct __not_overloaded2 : true_type { }; - - - template - struct __not_overloaded2<_Tp, _Up, __void_t< - decltype(std::declval<_Tp>().operator<=(std::declval<_Up>()))>> - : false_type { }; - - - template - struct __not_overloaded : __not_overloaded2<_Tp, _Up> { }; - - - template - struct __not_overloaded<_Tp, _Up, __void_t< - decltype(operator<=(std::declval<_Tp>(), std::declval<_Up>()))>> - : false_type { }; - - template - using __ptr_cmp = __and_<__not_overloaded<_Tp, _Up>, - is_convertible<_Tp, const volatile void*>, - is_convertible<_Up, const volatile void*>>; - }; -# 774 "/usr/include/c++/10/bits/stl_function.h" 3 - template - struct logical_and; - - template - struct logical_or; - - template - struct logical_not; - - - - template - struct logical_and : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x && __y; } - }; - - - template - struct logical_or : public binary_function<_Tp, _Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x, const _Tp& __y) const - { return __x || __y; } - }; - - - template - struct logical_not : public unary_function<_Tp, bool> - { - constexpr - bool - operator()(const _Tp& __x) const - { return !__x; } - }; - - - - template<> - struct logical_and - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) && std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) && std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) && std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct logical_or - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) || std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) || std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) || std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - - template<> - struct logical_not - { - template - constexpr - auto - operator()(_Tp&& __t) const - noexcept(noexcept(!std::forward<_Tp>(__t))) - -> decltype(!std::forward<_Tp>(__t)) - { return !std::forward<_Tp>(__t); } - - typedef __is_transparent is_transparent; - }; - - - - - template - struct bit_and; - - template - struct bit_or; - - template - struct bit_xor; - - template - struct bit_not; - - - - - template - struct bit_and : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x & __y; } - }; - - template - struct bit_or : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x | __y; } - }; - - template - struct bit_xor : public binary_function<_Tp, _Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x, const _Tp& __y) const - { return __x ^ __y; } - }; - - template - struct bit_not : public unary_function<_Tp, _Tp> - { - constexpr - _Tp - operator()(const _Tp& __x) const - { return ~__x; } - }; - - - template <> - struct bit_and - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) & std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) & std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) & std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - template <> - struct bit_or - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) | std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) | std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) | std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - template <> - struct bit_xor - { - template - constexpr - auto - operator()(_Tp&& __t, _Up&& __u) const - noexcept(noexcept(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u))) - -> decltype(std::forward<_Tp>(__t) ^ std::forward<_Up>(__u)) - { return std::forward<_Tp>(__t) ^ std::forward<_Up>(__u); } - - typedef __is_transparent is_transparent; - }; - - template <> - struct bit_not - { - template - constexpr - auto - operator()(_Tp&& __t) const - noexcept(noexcept(~std::forward<_Tp>(__t))) - -> decltype(~std::forward<_Tp>(__t)) - { return ~std::forward<_Tp>(__t); } - - typedef __is_transparent is_transparent; - }; -# 1002 "/usr/include/c++/10/bits/stl_function.h" 3 - template - class unary_negate - : public unary_function - { - protected: - _Predicate _M_pred; - - public: - constexpr - explicit - unary_negate(const _Predicate& __x) : _M_pred(__x) { } - - constexpr - bool - operator()(const typename _Predicate::argument_type& __x) const - { return !_M_pred(__x); } - }; - - - template - constexpr - inline unary_negate<_Predicate> - not1(const _Predicate& __pred) - { return unary_negate<_Predicate>(__pred); } - - - template - class binary_negate - : public binary_function - { - protected: - _Predicate _M_pred; - - public: - constexpr - explicit - binary_negate(const _Predicate& __x) : _M_pred(__x) { } - - constexpr - bool - operator()(const typename _Predicate::first_argument_type& __x, - const typename _Predicate::second_argument_type& __y) const - { return !_M_pred(__x, __y); } - }; - - - template - constexpr - inline binary_negate<_Predicate> - not2(const _Predicate& __pred) - { return binary_negate<_Predicate>(__pred); } -# 1079 "/usr/include/c++/10/bits/stl_function.h" 3 - template - class pointer_to_unary_function : public unary_function<_Arg, _Result> - { - protected: - _Result (*_M_ptr)(_Arg); - - public: - pointer_to_unary_function() { } - - explicit - pointer_to_unary_function(_Result (*__x)(_Arg)) - : _M_ptr(__x) { } - - _Result - operator()(_Arg __x) const - { return _M_ptr(__x); } - }; - - - template - inline pointer_to_unary_function<_Arg, _Result> - ptr_fun(_Result (*__x)(_Arg)) - { return pointer_to_unary_function<_Arg, _Result>(__x); } - - - template - class pointer_to_binary_function - : public binary_function<_Arg1, _Arg2, _Result> - { - protected: - _Result (*_M_ptr)(_Arg1, _Arg2); - - public: - pointer_to_binary_function() { } - - explicit - pointer_to_binary_function(_Result (*__x)(_Arg1, _Arg2)) - : _M_ptr(__x) { } - - _Result - operator()(_Arg1 __x, _Arg2 __y) const - { return _M_ptr(__x, __y); } - }; - - - template - inline pointer_to_binary_function<_Arg1, _Arg2, _Result> - ptr_fun(_Result (*__x)(_Arg1, _Arg2)) - { return pointer_to_binary_function<_Arg1, _Arg2, _Result>(__x); } - - - template - struct _Identity - : public unary_function<_Tp, _Tp> - { - _Tp& - operator()(_Tp& __x) const - { return __x; } - - const _Tp& - operator()(const _Tp& __x) const - { return __x; } - }; - - - template struct _Identity : _Identity<_Tp> { }; - - template - struct _Select1st - : public unary_function<_Pair, typename _Pair::first_type> - { - typename _Pair::first_type& - operator()(_Pair& __x) const - { return __x.first; } - - const typename _Pair::first_type& - operator()(const _Pair& __x) const - { return __x.first; } - - - template - typename _Pair2::first_type& - operator()(_Pair2& __x) const - { return __x.first; } - - template - const typename _Pair2::first_type& - operator()(const _Pair2& __x) const - { return __x.first; } - - }; - - template - struct _Select2nd - : public unary_function<_Pair, typename _Pair::second_type> - { - typename _Pair::second_type& - operator()(_Pair& __x) const - { return __x.second; } - - const typename _Pair::second_type& - operator()(const _Pair& __x) const - { return __x.second; } - }; -# 1202 "/usr/include/c++/10/bits/stl_function.h" 3 - template - class mem_fun_t : public unary_function<_Tp*, _Ret> - { - public: - explicit - mem_fun_t(_Ret (_Tp::*__pf)()) - : _M_f(__pf) { } - - _Ret - operator()(_Tp* __p) const - { return (__p->*_M_f)(); } - - private: - _Ret (_Tp::*_M_f)(); - }; - - - - template - class const_mem_fun_t : public unary_function - { - public: - explicit - const_mem_fun_t(_Ret (_Tp::*__pf)() const) - : _M_f(__pf) { } - - _Ret - operator()(const _Tp* __p) const - { return (__p->*_M_f)(); } - - private: - _Ret (_Tp::*_M_f)() const; - }; - - - - template - class mem_fun_ref_t : public unary_function<_Tp, _Ret> - { - public: - explicit - mem_fun_ref_t(_Ret (_Tp::*__pf)()) - : _M_f(__pf) { } - - _Ret - operator()(_Tp& __r) const - { return (__r.*_M_f)(); } - - private: - _Ret (_Tp::*_M_f)(); - }; - - - - template - class const_mem_fun_ref_t : public unary_function<_Tp, _Ret> - { - public: - explicit - const_mem_fun_ref_t(_Ret (_Tp::*__pf)() const) - : _M_f(__pf) { } - - _Ret - operator()(const _Tp& __r) const - { return (__r.*_M_f)(); } - - private: - _Ret (_Tp::*_M_f)() const; - }; - - - - template - class mem_fun1_t : public binary_function<_Tp*, _Arg, _Ret> - { - public: - explicit - mem_fun1_t(_Ret (_Tp::*__pf)(_Arg)) - : _M_f(__pf) { } - - _Ret - operator()(_Tp* __p, _Arg __x) const - { return (__p->*_M_f)(__x); } - - private: - _Ret (_Tp::*_M_f)(_Arg); - }; - - - - template - class const_mem_fun1_t : public binary_function - { - public: - explicit - const_mem_fun1_t(_Ret (_Tp::*__pf)(_Arg) const) - : _M_f(__pf) { } - - _Ret - operator()(const _Tp* __p, _Arg __x) const - { return (__p->*_M_f)(__x); } - - private: - _Ret (_Tp::*_M_f)(_Arg) const; - }; - - - - template - class mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> - { - public: - explicit - mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg)) - : _M_f(__pf) { } - - _Ret - operator()(_Tp& __r, _Arg __x) const - { return (__r.*_M_f)(__x); } - - private: - _Ret (_Tp::*_M_f)(_Arg); - }; - - - - template - class const_mem_fun1_ref_t : public binary_function<_Tp, _Arg, _Ret> - { - public: - explicit - const_mem_fun1_ref_t(_Ret (_Tp::*__pf)(_Arg) const) - : _M_f(__pf) { } - - _Ret - operator()(const _Tp& __r, _Arg __x) const - { return (__r.*_M_f)(__x); } - - private: - _Ret (_Tp::*_M_f)(_Arg) const; - }; - - - - template - inline mem_fun_t<_Ret, _Tp> - mem_fun(_Ret (_Tp::*__f)()) - { return mem_fun_t<_Ret, _Tp>(__f); } - - template - inline const_mem_fun_t<_Ret, _Tp> - mem_fun(_Ret (_Tp::*__f)() const) - { return const_mem_fun_t<_Ret, _Tp>(__f); } - - template - inline mem_fun_ref_t<_Ret, _Tp> - mem_fun_ref(_Ret (_Tp::*__f)()) - { return mem_fun_ref_t<_Ret, _Tp>(__f); } - - template - inline const_mem_fun_ref_t<_Ret, _Tp> - mem_fun_ref(_Ret (_Tp::*__f)() const) - { return const_mem_fun_ref_t<_Ret, _Tp>(__f); } - - template - inline mem_fun1_t<_Ret, _Tp, _Arg> - mem_fun(_Ret (_Tp::*__f)(_Arg)) - { return mem_fun1_t<_Ret, _Tp, _Arg>(__f); } - - template - inline const_mem_fun1_t<_Ret, _Tp, _Arg> - mem_fun(_Ret (_Tp::*__f)(_Arg) const) - { return const_mem_fun1_t<_Ret, _Tp, _Arg>(__f); } - - template - inline mem_fun1_ref_t<_Ret, _Tp, _Arg> - mem_fun_ref(_Ret (_Tp::*__f)(_Arg)) - { return mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } - - template - inline const_mem_fun1_ref_t<_Ret, _Tp, _Arg> - mem_fun_ref(_Ret (_Tp::*__f)(_Arg) const) - { return const_mem_fun1_ref_t<_Ret, _Tp, _Arg>(__f); } - - - - -} - - -# 1 "/usr/include/c++/10/backward/binders.h" 1 3 -# 60 "/usr/include/c++/10/backward/binders.h" 3 -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 107 "/usr/include/c++/10/backward/binders.h" 3 - template - class binder1st - : public unary_function - { - protected: - _Operation op; - typename _Operation::first_argument_type value; - - public: - binder1st(const _Operation& __x, - const typename _Operation::first_argument_type& __y) - : op(__x), value(__y) { } - - typename _Operation::result_type - operator()(const typename _Operation::second_argument_type& __x) const - { return op(value, __x); } - - - - typename _Operation::result_type - operator()(typename _Operation::second_argument_type& __x) const - { return op(value, __x); } - } __attribute__ ((__deprecated__)); - - - template - inline binder1st<_Operation> - bind1st(const _Operation& __fn, const _Tp& __x) - { - typedef typename _Operation::first_argument_type _Arg1_type; - return binder1st<_Operation>(__fn, _Arg1_type(__x)); - } - - - template - class binder2nd - : public unary_function - { - protected: - _Operation op; - typename _Operation::second_argument_type value; - - public: - binder2nd(const _Operation& __x, - const typename _Operation::second_argument_type& __y) - : op(__x), value(__y) { } - - typename _Operation::result_type - operator()(const typename _Operation::first_argument_type& __x) const - { return op(__x, value); } - - - - typename _Operation::result_type - operator()(typename _Operation::first_argument_type& __x) const - { return op(__x, value); } - } __attribute__ ((__deprecated__)); - - - template - inline binder2nd<_Operation> - bind2nd(const _Operation& __fn, const _Tp& __x) - { - typedef typename _Operation::second_argument_type _Arg2_type; - return binder2nd<_Operation>(__fn, _Arg2_type(__x)); - } - - - -} - -#pragma GCC diagnostic pop -# 1393 "/usr/include/c++/10/bits/stl_function.h" 2 3 -# 49 "/usr/include/c++/10/string" 2 3 - - - - - -# 1 "/usr/include/c++/10/bits/range_access.h" 1 3 -# 33 "/usr/include/c++/10/bits/range_access.h" 3 - -# 34 "/usr/include/c++/10/bits/range_access.h" 3 - - -# 1 "/usr/include/c++/10/initializer_list" 1 3 -# 33 "/usr/include/c++/10/initializer_list" 3 - -# 34 "/usr/include/c++/10/initializer_list" 3 - - - - - -#pragma GCC visibility push(default) - - - -namespace std -{ - - template - class initializer_list - { - public: - typedef _E value_type; - typedef const _E& reference; - typedef const _E& const_reference; - typedef size_t size_type; - typedef const _E* iterator; - typedef const _E* const_iterator; - - private: - iterator _M_array; - size_type _M_len; - - - constexpr initializer_list(const_iterator __a, size_type __l) - : _M_array(__a), _M_len(__l) { } - - public: - constexpr initializer_list() noexcept - : _M_array(0), _M_len(0) { } - - - constexpr size_type - size() const noexcept { return _M_len; } - - - constexpr const_iterator - begin() const noexcept { return _M_array; } - - - constexpr const_iterator - end() const noexcept { return begin() + size(); } - }; - - - - - - - - template - constexpr const _Tp* - begin(initializer_list<_Tp> __ils) noexcept - { return __ils.begin(); } - - - - - - - - template - constexpr const _Tp* - end(initializer_list<_Tp> __ils) noexcept - { return __ils.end(); } -} - -#pragma GCC visibility pop -# 37 "/usr/include/c++/10/bits/range_access.h" 2 3 -# 1 "/usr/include/c++/10/bits/iterator_concepts.h" 1 3 -# 33 "/usr/include/c++/10/bits/iterator_concepts.h" 3 - -# 34 "/usr/include/c++/10/bits/iterator_concepts.h" 3 - -# 1 "/usr/include/c++/10/concepts" 1 3 -# 36 "/usr/include/c++/10/bits/iterator_concepts.h" 2 3 - -# 1 "/usr/include/c++/10/bits/range_cmp.h" 1 3 -# 38 "/usr/include/c++/10/bits/iterator_concepts.h" 2 3 -# 38 "/usr/include/c++/10/bits/range_access.h" 2 3 - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - template - inline auto - begin(_Container& __cont) -> decltype(__cont.begin()) - { return __cont.begin(); } - - - - - - - template - inline auto - begin(const _Container& __cont) -> decltype(__cont.begin()) - { return __cont.begin(); } - - - - - - - template - inline auto - end(_Container& __cont) -> decltype(__cont.end()) - { return __cont.end(); } - - - - - - - template - inline auto - end(const _Container& __cont) -> decltype(__cont.end()) - { return __cont.end(); } - - - - - - template - inline constexpr _Tp* - begin(_Tp (&__arr)[_Nm]) noexcept - { return __arr; } - - - - - - - template - inline constexpr _Tp* - end(_Tp (&__arr)[_Nm]) noexcept - { return __arr + _Nm; } - - - - template class valarray; - - template _Tp* begin(valarray<_Tp>&); - template const _Tp* begin(const valarray<_Tp>&); - template _Tp* end(valarray<_Tp>&); - template const _Tp* end(const valarray<_Tp>&); - - - - - - - template - inline constexpr auto - cbegin(const _Container& __cont) noexcept(noexcept(std::begin(__cont))) - -> decltype(std::begin(__cont)) - { return std::begin(__cont); } - - - - - - - template - inline constexpr auto - cend(const _Container& __cont) noexcept(noexcept(std::end(__cont))) - -> decltype(std::end(__cont)) - { return std::end(__cont); } - - - - - - - template - inline auto - rbegin(_Container& __cont) -> decltype(__cont.rbegin()) - { return __cont.rbegin(); } - - - - - - - template - inline auto - rbegin(const _Container& __cont) -> decltype(__cont.rbegin()) - { return __cont.rbegin(); } - - - - - - - template - inline auto - rend(_Container& __cont) -> decltype(__cont.rend()) - { return __cont.rend(); } - - - - - - - template - inline auto - rend(const _Container& __cont) -> decltype(__cont.rend()) - { return __cont.rend(); } - - - - - - - template - inline reverse_iterator<_Tp*> - rbegin(_Tp (&__arr)[_Nm]) noexcept - { return reverse_iterator<_Tp*>(__arr + _Nm); } - - - - - - - template - inline reverse_iterator<_Tp*> - rend(_Tp (&__arr)[_Nm]) noexcept - { return reverse_iterator<_Tp*>(__arr); } - - - - - - - template - inline reverse_iterator - rbegin(initializer_list<_Tp> __il) noexcept - { return reverse_iterator(__il.end()); } - - - - - - - template - inline reverse_iterator - rend(initializer_list<_Tp> __il) noexcept - { return reverse_iterator(__il.begin()); } - - - - - - - template - inline auto - crbegin(const _Container& __cont) -> decltype(std::rbegin(__cont)) - { return std::rbegin(__cont); } - - - - - - - template - inline auto - crend(const _Container& __cont) -> decltype(std::rend(__cont)) - { return std::rend(__cont); } -# 1153 "/usr/include/c++/10/bits/range_access.h" 3 - -} -# 55 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/basic_string.h" 1 3 -# 37 "/usr/include/c++/10/bits/basic_string.h" 3 - -# 38 "/usr/include/c++/10/bits/basic_string.h" 3 - -# 1 "/usr/include/c++/10/ext/atomicity.h" 1 3 -# 32 "/usr/include/c++/10/ext/atomicity.h" 3 - -# 33 "/usr/include/c++/10/ext/atomicity.h" 3 - - -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr.h" 1 3 -# 30 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr.h" 3 -#pragma GCC visibility push(default) -# 148 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr.h" 3 -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 1 3 -# 35 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -# 1 "/usr/include/pthread.h" 1 3 4 -# 22 "/usr/include/pthread.h" 3 4 -# 1 "/usr/include/sched.h" 1 3 4 -# 29 "/usr/include/sched.h" 3 4 -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 30 "/usr/include/sched.h" 2 3 4 - -# 1 "/usr/include/bits/types/time_t.h" 1 3 4 - - - - - - -typedef __time_t time_t; -# 32 "/usr/include/sched.h" 2 3 4 -# 1 "/usr/include/bits/types/struct_timespec.h" 1 3 4 -# 10 "/usr/include/bits/types/struct_timespec.h" 3 4 -struct timespec -{ - __time_t tv_sec; - - - - __syscall_slong_t tv_nsec; -# 26 "/usr/include/bits/types/struct_timespec.h" 3 4 -}; -# 33 "/usr/include/sched.h" 2 3 4 - - - - - -typedef __pid_t pid_t; - - - - -# 1 "/usr/include/bits/sched.h" 1 3 4 -# 76 "/usr/include/bits/sched.h" 3 4 -# 1 "/usr/include/bits/types/struct_sched_param.h" 1 3 4 -# 23 "/usr/include/bits/types/struct_sched_param.h" 3 4 -struct sched_param -{ - int sched_priority; -}; -# 77 "/usr/include/bits/sched.h" 2 3 4 - -extern "C" { - - - -extern int clone (int (*__fn) (void *__arg), void *__child_stack, - int __flags, void *__arg, ...) throw (); - - -extern int unshare (int __flags) throw (); - - -extern int sched_getcpu (void) throw (); - - -extern int getcpu (unsigned int *, unsigned int *) throw (); - - -extern int setns (int __fd, int __nstype) throw (); - - -} -# 44 "/usr/include/sched.h" 2 3 4 -# 1 "/usr/include/bits/cpu-set.h" 1 3 4 -# 32 "/usr/include/bits/cpu-set.h" 3 4 -typedef unsigned long int __cpu_mask; - - - - - - -typedef struct -{ - __cpu_mask __bits[1024 / (8 * sizeof (__cpu_mask))]; -} cpu_set_t; -# 115 "/usr/include/bits/cpu-set.h" 3 4 -extern "C" { - -extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) - throw (); -extern cpu_set_t *__sched_cpualloc (size_t __count) throw () ; -extern void __sched_cpufree (cpu_set_t *__set) throw (); - -} -# 45 "/usr/include/sched.h" 2 3 4 - - - - - - -extern "C" { - - -extern int sched_setparam (__pid_t __pid, const struct sched_param *__param) - throw (); - - -extern int sched_getparam (__pid_t __pid, struct sched_param *__param) throw (); - - -extern int sched_setscheduler (__pid_t __pid, int __policy, - const struct sched_param *__param) throw (); - - -extern int sched_getscheduler (__pid_t __pid) throw (); - - -extern int sched_yield (void) throw (); - - -extern int sched_get_priority_max (int __algorithm) throw (); - - -extern int sched_get_priority_min (int __algorithm) throw (); - - -extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) throw (); -# 121 "/usr/include/sched.h" 3 4 -extern int sched_setaffinity (__pid_t __pid, size_t __cpusetsize, - const cpu_set_t *__cpuset) throw (); - - -extern int sched_getaffinity (__pid_t __pid, size_t __cpusetsize, - cpu_set_t *__cpuset) throw (); - - -} -# 23 "/usr/include/pthread.h" 2 3 4 -# 1 "/usr/include/time.h" 1 3 4 -# 29 "/usr/include/time.h" 3 4 -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 30 "/usr/include/time.h" 2 3 4 - - - -# 1 "/usr/include/bits/time.h" 1 3 4 -# 73 "/usr/include/bits/time.h" 3 4 -# 1 "/usr/include/bits/timex.h" 1 3 4 -# 22 "/usr/include/bits/timex.h" 3 4 -# 1 "/usr/include/bits/types/struct_timeval.h" 1 3 4 - - - - - - - -struct timeval -{ - __time_t tv_sec; - __suseconds_t tv_usec; -}; -# 23 "/usr/include/bits/timex.h" 2 3 4 - - - -struct timex -{ - unsigned int modes; - __syscall_slong_t offset; - __syscall_slong_t freq; - __syscall_slong_t maxerror; - __syscall_slong_t esterror; - int status; - __syscall_slong_t constant; - __syscall_slong_t precision; - __syscall_slong_t tolerance; - struct timeval time; - __syscall_slong_t tick; - __syscall_slong_t ppsfreq; - __syscall_slong_t jitter; - int shift; - __syscall_slong_t stabil; - __syscall_slong_t jitcnt; - __syscall_slong_t calcnt; - __syscall_slong_t errcnt; - __syscall_slong_t stbcnt; - - int tai; - - - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; - int :32; int :32; int :32; -}; -# 74 "/usr/include/bits/time.h" 2 3 4 - -extern "C" { - - -extern int clock_adjtime (__clockid_t __clock_id, struct timex *__utx) throw (); - -} -# 34 "/usr/include/time.h" 2 3 4 - - - -# 1 "/usr/include/bits/types/clock_t.h" 1 3 4 - - - - - - -typedef __clock_t clock_t; -# 38 "/usr/include/time.h" 2 3 4 - -# 1 "/usr/include/bits/types/struct_tm.h" 1 3 4 - - - - - - -struct tm -{ - int tm_sec; - int tm_min; - int tm_hour; - int tm_mday; - int tm_mon; - int tm_year; - int tm_wday; - int tm_yday; - int tm_isdst; - - - long int tm_gmtoff; - const char *tm_zone; - - - - -}; -# 40 "/usr/include/time.h" 2 3 4 - - - - - - -# 1 "/usr/include/bits/types/clockid_t.h" 1 3 4 - - - - - - -typedef __clockid_t clockid_t; -# 47 "/usr/include/time.h" 2 3 4 -# 1 "/usr/include/bits/types/timer_t.h" 1 3 4 - - - - - - -typedef __timer_t timer_t; -# 48 "/usr/include/time.h" 2 3 4 -# 1 "/usr/include/bits/types/struct_itimerspec.h" 1 3 4 - - - - - - - -struct itimerspec - { - struct timespec it_interval; - struct timespec it_value; - }; -# 49 "/usr/include/time.h" 2 3 4 -struct sigevent; -# 68 "/usr/include/time.h" 3 4 -extern "C" { - - - -extern clock_t clock (void) throw (); - - -extern time_t time (time_t *__timer) throw (); - - -extern double difftime (time_t __time1, time_t __time0) - throw () __attribute__ ((__const__)); - - -extern time_t mktime (struct tm *__tp) throw (); - - - - - -extern size_t strftime (char *__restrict __s, size_t __maxsize, - const char *__restrict __format, - const struct tm *__restrict __tp) throw (); - - - - -extern char *strptime (const char *__restrict __s, - const char *__restrict __fmt, struct tm *__tp) - throw (); - - - - - - -extern size_t strftime_l (char *__restrict __s, size_t __maxsize, - const char *__restrict __format, - const struct tm *__restrict __tp, - locale_t __loc) throw (); - - - -extern char *strptime_l (const char *__restrict __s, - const char *__restrict __fmt, struct tm *__tp, - locale_t __loc) throw (); - - - - - -extern struct tm *gmtime (const time_t *__timer) throw (); - - - -extern struct tm *localtime (const time_t *__timer) throw (); - - - - -extern struct tm *gmtime_r (const time_t *__restrict __timer, - struct tm *__restrict __tp) throw (); - - - -extern struct tm *localtime_r (const time_t *__restrict __timer, - struct tm *__restrict __tp) throw (); - - - - -extern char *asctime (const struct tm *__tp) throw (); - - -extern char *ctime (const time_t *__timer) throw (); - - - - - - -extern char *asctime_r (const struct tm *__restrict __tp, - char *__restrict __buf) throw (); - - -extern char *ctime_r (const time_t *__restrict __timer, - char *__restrict __buf) throw (); - - - - -extern char *__tzname[2]; -extern int __daylight; -extern long int __timezone; - - - - -extern char *tzname[2]; - - - -extern void tzset (void) throw (); - - - -extern int daylight; -extern long int timezone; -# 190 "/usr/include/time.h" 3 4 -extern time_t timegm (struct tm *__tp) throw (); - - -extern time_t timelocal (struct tm *__tp) throw (); - - -extern int dysize (int __year) throw () __attribute__ ((__const__)); -# 205 "/usr/include/time.h" 3 4 -extern int nanosleep (const struct timespec *__requested_time, - struct timespec *__remaining); - - - -extern int clock_getres (clockid_t __clock_id, struct timespec *__res) throw (); - - -extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) throw (); - - -extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) - throw (); - - - - - - -extern int clock_nanosleep (clockid_t __clock_id, int __flags, - const struct timespec *__req, - struct timespec *__rem); - - -extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) throw (); - - - - -extern int timer_create (clockid_t __clock_id, - struct sigevent *__restrict __evp, - timer_t *__restrict __timerid) throw (); - - -extern int timer_delete (timer_t __timerid) throw (); - - -extern int timer_settime (timer_t __timerid, int __flags, - const struct itimerspec *__restrict __value, - struct itimerspec *__restrict __ovalue) throw (); - - -extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) - throw (); - - -extern int timer_getoverrun (timer_t __timerid) throw (); - - - - - -extern int timespec_get (struct timespec *__ts, int __base) - throw () __attribute__ ((__nonnull__ (1))); -# 274 "/usr/include/time.h" 3 4 -extern int getdate_err; -# 283 "/usr/include/time.h" 3 4 -extern struct tm *getdate (const char *__string); -# 297 "/usr/include/time.h" 3 4 -extern int getdate_r (const char *__restrict __string, - struct tm *__restrict __resbufp); - - -} -# 24 "/usr/include/pthread.h" 2 3 4 - - -# 1 "/usr/include/bits/pthreadtypes.h" 1 3 4 -# 23 "/usr/include/bits/pthreadtypes.h" 3 4 -# 1 "/usr/include/bits/thread-shared-types.h" 1 3 4 -# 44 "/usr/include/bits/thread-shared-types.h" 3 4 -# 1 "/usr/include/bits/pthreadtypes-arch.h" 1 3 4 -# 21 "/usr/include/bits/pthreadtypes-arch.h" 3 4 -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 22 "/usr/include/bits/pthreadtypes-arch.h" 2 3 4 -# 45 "/usr/include/bits/thread-shared-types.h" 2 3 4 - - - - -typedef struct __pthread_internal_list -{ - struct __pthread_internal_list *__prev; - struct __pthread_internal_list *__next; -} __pthread_list_t; - -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; -# 74 "/usr/include/bits/thread-shared-types.h" 3 4 -# 1 "/usr/include/bits/struct_mutex.h" 1 3 4 -# 22 "/usr/include/bits/struct_mutex.h" 3 4 -struct __pthread_mutex_s -{ - int __lock; - unsigned int __count; - int __owner; - - unsigned int __nusers; - - - - int __kind; - - short __spins; - short __elision; - __pthread_list_t __list; -# 53 "/usr/include/bits/struct_mutex.h" 3 4 -}; -# 75 "/usr/include/bits/thread-shared-types.h" 2 3 4 -# 87 "/usr/include/bits/thread-shared-types.h" 3 4 -# 1 "/usr/include/bits/struct_rwlock.h" 1 3 4 -# 23 "/usr/include/bits/struct_rwlock.h" 3 4 -struct __pthread_rwlock_arch_t -{ - unsigned int __readers; - unsigned int __writers; - unsigned int __wrphase_futex; - unsigned int __writers_futex; - unsigned int __pad3; - unsigned int __pad4; - - int __cur_writer; - int __shared; - signed char __rwelision; - - - - - unsigned char __pad1[7]; - - - unsigned long int __pad2; - - - unsigned int __flags; -# 55 "/usr/include/bits/struct_rwlock.h" 3 4 -}; -# 88 "/usr/include/bits/thread-shared-types.h" 2 3 4 - - - - -struct __pthread_cond_s -{ - __extension__ union - { - __extension__ unsigned long long int __wseq; - struct - { - unsigned int __low; - unsigned int __high; - } __wseq32; - }; - __extension__ union - { - __extension__ unsigned long long int __g1_start; - struct - { - unsigned int __low; - unsigned int __high; - } __g1_start32; - }; - unsigned int __g_refs[2] ; - unsigned int __g_size[2]; - unsigned int __g1_orig_size; - unsigned int __wrefs; - unsigned int __g_signals[2]; -}; - -typedef unsigned int __tss_t; -typedef unsigned long int __thrd_t; - -typedef struct -{ - int __data ; -} __once_flag; -# 24 "/usr/include/bits/pthreadtypes.h" 2 3 4 - - - -typedef unsigned long int pthread_t; - - - - -typedef union -{ - char __size[4]; - int __align; -} pthread_mutexattr_t; - - - - -typedef union -{ - char __size[4]; - int __align; -} pthread_condattr_t; - - - -typedef unsigned int pthread_key_t; - - - -typedef int pthread_once_t; - - -union pthread_attr_t -{ - char __size[56]; - long int __align; -}; - -typedef union pthread_attr_t pthread_attr_t; - - - - -typedef union -{ - struct __pthread_mutex_s __data; - char __size[40]; - long int __align; -} pthread_mutex_t; - - -typedef union -{ - struct __pthread_cond_s __data; - char __size[48]; - __extension__ long long int __align; -} pthread_cond_t; - - - - - -typedef union -{ - struct __pthread_rwlock_arch_t __data; - char __size[56]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[8]; - long int __align; -} pthread_rwlockattr_t; - - - - - -typedef volatile int pthread_spinlock_t; - - - - -typedef union -{ - char __size[32]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[4]; - int __align; -} pthread_barrierattr_t; -# 27 "/usr/include/pthread.h" 2 3 4 -# 1 "/usr/include/bits/setjmp.h" 1 3 4 -# 26 "/usr/include/bits/setjmp.h" 3 4 -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 27 "/usr/include/bits/setjmp.h" 2 3 4 - - - - -typedef long int __jmp_buf[8]; -# 28 "/usr/include/pthread.h" 2 3 4 -# 1 "/usr/include/bits/wordsize.h" 1 3 4 -# 29 "/usr/include/pthread.h" 2 3 4 - -# 1 "/usr/include/bits/types/__sigset_t.h" 1 3 4 - - - - -typedef struct -{ - unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; -} __sigset_t; -# 31 "/usr/include/pthread.h" 2 3 4 - - - -enum -{ - PTHREAD_CREATE_JOINABLE, - - PTHREAD_CREATE_DETACHED - -}; - - - -enum -{ - PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_ADAPTIVE_NP - - , - PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL - - - - , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP - -}; - - - - -enum -{ - PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_ROBUST, - PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST -}; - - - - - -enum -{ - PTHREAD_PRIO_NONE, - PTHREAD_PRIO_INHERIT, - PTHREAD_PRIO_PROTECT -}; -# 101 "/usr/include/pthread.h" 3 4 -enum -{ - PTHREAD_RWLOCK_PREFER_READER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, - PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP -}; -# 121 "/usr/include/pthread.h" 3 4 -enum -{ - PTHREAD_INHERIT_SCHED, - - PTHREAD_EXPLICIT_SCHED - -}; - - - -enum -{ - PTHREAD_SCOPE_SYSTEM, - - PTHREAD_SCOPE_PROCESS - -}; - - - -enum -{ - PTHREAD_PROCESS_PRIVATE, - - PTHREAD_PROCESS_SHARED - -}; -# 156 "/usr/include/pthread.h" 3 4 -struct _pthread_cleanup_buffer -{ - void (*__routine) (void *); - void *__arg; - int __canceltype; - struct _pthread_cleanup_buffer *__prev; -}; - - -enum -{ - PTHREAD_CANCEL_ENABLE, - - PTHREAD_CANCEL_DISABLE - -}; -enum -{ - PTHREAD_CANCEL_DEFERRED, - - PTHREAD_CANCEL_ASYNCHRONOUS - -}; -# 194 "/usr/include/pthread.h" 3 4 -extern "C" { - - - - -extern int pthread_create (pthread_t *__restrict __newthread, - const pthread_attr_t *__restrict __attr, - void *(*__start_routine) (void *), - void *__restrict __arg) throw () __attribute__ ((__nonnull__ (1, 3))); - - - - - -extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); - - - - - - - -extern int pthread_join (pthread_t __th, void **__thread_return); - - - - -extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) throw (); - - - - - - - -extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, - const struct timespec *__abstime); -# 239 "/usr/include/pthread.h" 3 4 -extern int pthread_clockjoin_np (pthread_t __th, void **__thread_return, - clockid_t __clockid, - const struct timespec *__abstime); - - - - - - -extern int pthread_detach (pthread_t __th) throw (); - - - -extern pthread_t pthread_self (void) throw () __attribute__ ((__const__)); - - -extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) - throw () __attribute__ ((__const__)); - - - - - - - -extern int pthread_attr_init (pthread_attr_t *__attr) throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_attr_destroy (pthread_attr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, - int *__detachstate) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, - int __detachstate) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, - size_t *__guardsize) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setguardsize (pthread_attr_t *__attr, - size_t __guardsize) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, - struct sched_param *__restrict __param) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, - const struct sched_param *__restrict - __param) throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict - __attr, int *__restrict __policy) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict - __attr, int *__restrict __inherit) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, - int __inherit) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, - int *__restrict __scope) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict - __attr, void **__restrict __stackaddr) - throw () __attribute__ ((__nonnull__ (1, 2))) __attribute__ ((__deprecated__)); - - - - - -extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, - void *__stackaddr) - throw () __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)); - - -extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict - __attr, size_t *__restrict __stacksize) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - - -extern int pthread_attr_setstacksize (pthread_attr_t *__attr, - size_t __stacksize) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, - void **__restrict __stackaddr, - size_t *__restrict __stacksize) - throw () __attribute__ ((__nonnull__ (1, 2, 3))); - - - - -extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, - size_t __stacksize) throw () __attribute__ ((__nonnull__ (1))); - - - - - -extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, - size_t __cpusetsize, - const cpu_set_t *__cpuset) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, - size_t __cpusetsize, - cpu_set_t *__cpuset) - throw () __attribute__ ((__nonnull__ (1, 3))); - - -extern int pthread_getattr_default_np (pthread_attr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_attr_setsigmask_np (pthread_attr_t *__attr, - const __sigset_t *sigmask); - - - - -extern int pthread_attr_getsigmask_np (const pthread_attr_t *__attr, - __sigset_t *sigmask); - - - - - - - -extern int pthread_setattr_default_np (const pthread_attr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - - - -extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) - throw () __attribute__ ((__nonnull__ (2))); - - - - - - - -extern int pthread_setschedparam (pthread_t __target_thread, int __policy, - const struct sched_param *__param) - throw () __attribute__ ((__nonnull__ (3))); - - -extern int pthread_getschedparam (pthread_t __target_thread, - int *__restrict __policy, - struct sched_param *__restrict __param) - throw () __attribute__ ((__nonnull__ (2, 3))); - - -extern int pthread_setschedprio (pthread_t __target_thread, int __prio) - throw (); - - - - -extern int pthread_getname_np (pthread_t __target_thread, char *__buf, - size_t __buflen) - throw () __attribute__ ((__nonnull__ (2))); - - -extern int pthread_setname_np (pthread_t __target_thread, const char *__name) - throw () __attribute__ ((__nonnull__ (2))); - - - - - -extern int pthread_getconcurrency (void) throw (); - - -extern int pthread_setconcurrency (int __level) throw (); - - - - - - - -extern int pthread_yield (void) throw (); - - - - -extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, - const cpu_set_t *__cpuset) - throw () __attribute__ ((__nonnull__ (3))); - - -extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, - cpu_set_t *__cpuset) - throw () __attribute__ ((__nonnull__ (3))); -# 485 "/usr/include/pthread.h" 3 4 -extern int pthread_once (pthread_once_t *__once_control, - void (*__init_routine) (void)) __attribute__ ((__nonnull__ (1, 2))); -# 497 "/usr/include/pthread.h" 3 4 -extern int pthread_setcancelstate (int __state, int *__oldstate); - - - -extern int pthread_setcanceltype (int __type, int *__oldtype); - - -extern int pthread_cancel (pthread_t __th); - - - - -extern void pthread_testcancel (void); - - - - -typedef struct -{ - struct - { - __jmp_buf __cancel_jmp_buf; - int __mask_was_saved; - } __cancel_jmp_buf[1]; - void *__pad[4]; -} __pthread_unwind_buf_t __attribute__ ((__aligned__)); -# 531 "/usr/include/pthread.h" 3 4 -struct __pthread_cleanup_frame -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; -}; - - - - -class __pthread_cleanup_class -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; - - public: - __pthread_cleanup_class (void (*__fct) (void *), void *__arg) - : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } - ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } - void __setdoit (int __newval) { __do_it = __newval; } - void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, - &__cancel_type); } - void __restore () const { pthread_setcanceltype (__cancel_type, 0); } -}; -# 733 "/usr/include/pthread.h" 3 4 -struct __jmp_buf_tag; -extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) throw (); - - - - - -extern int pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__mutexattr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutex_lock (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_mutex_clocklock (pthread_mutex_t *__restrict __mutex, - clockid_t __clockid, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_mutex_getprioceiling (const pthread_mutex_t * - __restrict __mutex, - int *__restrict __prioceiling) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, - int __prioceiling, - int *__restrict __old_ceiling) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - - -extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); - -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) - throw () __attribute__ ((__nonnull__ (1))); -# 804 "/usr/include/pthread.h" 3 4 -extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __pshared) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, - int __pshared) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict - __attr, int *__restrict __kind) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - - -extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __protocol) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, - int __protocol) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __prioceiling) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, - int __prioceiling) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, - int *__robustness) - throw () __attribute__ ((__nonnull__ (1, 2))); - -extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, - int *__robustness) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, - int __robustness) - throw () __attribute__ ((__nonnull__ (1))); - -extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, - int __robustness) - throw () __attribute__ ((__nonnull__ (1))); -# 886 "/usr/include/pthread.h" 3 4 -extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, - const pthread_rwlockattr_t *__restrict - __attr) throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_rwlock_clockrdlock (pthread_rwlock_t *__restrict __rwlock, - clockid_t __clockid, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 2))); - - - -extern int pthread_rwlock_clockwrlock (pthread_rwlock_t *__restrict __rwlock, - clockid_t __clockid, - const struct timespec *__restrict - __abstime) throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) - throw () __attribute__ ((__nonnull__ (1))); - - - - - -extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pshared) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, - int __pshared) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pref) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, - int __pref) throw () __attribute__ ((__nonnull__ (1))); - - - - - - - -extern int pthread_cond_init (pthread_cond_t *__restrict __cond, - const pthread_condattr_t *__restrict __cond_attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_cond_destroy (pthread_cond_t *__cond) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_cond_signal (pthread_cond_t *__cond) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_cond_broadcast (pthread_cond_t *__cond) - throw () __attribute__ ((__nonnull__ (1))); - - - - - - -extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex) - __attribute__ ((__nonnull__ (1, 2))); -# 1012 "/usr/include/pthread.h" 3 4 -extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict __abstime) - __attribute__ ((__nonnull__ (1, 2, 3))); -# 1025 "/usr/include/pthread.h" 3 4 -extern int pthread_cond_clockwait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex, - __clockid_t __clock_id, - const struct timespec *__restrict __abstime) - __attribute__ ((__nonnull__ (1, 2, 4))); - - - - - -extern int pthread_condattr_init (pthread_condattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_condattr_destroy (pthread_condattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_condattr_getpshared (const pthread_condattr_t * - __restrict __attr, - int *__restrict __pshared) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, - int __pshared) throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_condattr_getclock (const pthread_condattr_t * - __restrict __attr, - __clockid_t *__restrict __clock_id) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_condattr_setclock (pthread_condattr_t *__attr, - __clockid_t __clock_id) - throw () __attribute__ ((__nonnull__ (1))); -# 1071 "/usr/include/pthread.h" 3 4 -extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_spin_destroy (pthread_spinlock_t *__lock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_spin_lock (pthread_spinlock_t *__lock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_spin_trylock (pthread_spinlock_t *__lock) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_spin_unlock (pthread_spinlock_t *__lock) - throw () __attribute__ ((__nonnull__ (1))); - - - - - - -extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, - const pthread_barrierattr_t *__restrict - __attr, unsigned int __count) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_barrier_wait (pthread_barrier_t *__barrier) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * - __restrict __attr, - int *__restrict __pshared) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, - int __pshared) - throw () __attribute__ ((__nonnull__ (1))); -# 1138 "/usr/include/pthread.h" 3 4 -extern int pthread_key_create (pthread_key_t *__key, - void (*__destr_function) (void *)) - throw () __attribute__ ((__nonnull__ (1))); - - -extern int pthread_key_delete (pthread_key_t __key) throw (); - - -extern void *pthread_getspecific (pthread_key_t __key) throw (); - - -extern int pthread_setspecific (pthread_key_t __key, - const void *__pointer) throw () ; - - - - -extern int pthread_getcpuclockid (pthread_t __thread_id, - __clockid_t *__clock_id) - throw () __attribute__ ((__nonnull__ (2))); -# 1172 "/usr/include/pthread.h" 3 4 -extern int pthread_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void)) throw (); -# 1186 "/usr/include/pthread.h" 3 4 -} -# 36 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 2 3 -# 47 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -typedef pthread_t __gthread_t; -typedef pthread_key_t __gthread_key_t; -typedef pthread_once_t __gthread_once_t; -typedef pthread_mutex_t __gthread_mutex_t; -typedef pthread_mutex_t __gthread_recursive_mutex_t; -typedef pthread_cond_t __gthread_cond_t; -typedef struct timespec __gthread_time_t; -# 102 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static __typeof(pthread_once) __gthrw_pthread_once __attribute__ ((__weakref__("pthread_once"), __copy__ (pthread_once))); -static __typeof(pthread_getspecific) __gthrw_pthread_getspecific __attribute__ ((__weakref__("pthread_getspecific"), __copy__ (pthread_getspecific))); -static __typeof(pthread_setspecific) __gthrw_pthread_setspecific __attribute__ ((__weakref__("pthread_setspecific"), __copy__ (pthread_setspecific))); - -static __typeof(pthread_create) __gthrw_pthread_create __attribute__ ((__weakref__("pthread_create"), __copy__ (pthread_create))); -static __typeof(pthread_join) __gthrw_pthread_join __attribute__ ((__weakref__("pthread_join"), __copy__ (pthread_join))); -static __typeof(pthread_equal) __gthrw_pthread_equal __attribute__ ((__weakref__("pthread_equal"), __copy__ (pthread_equal))); -static __typeof(pthread_self) __gthrw_pthread_self __attribute__ ((__weakref__("pthread_self"), __copy__ (pthread_self))); -static __typeof(pthread_detach) __gthrw_pthread_detach __attribute__ ((__weakref__("pthread_detach"), __copy__ (pthread_detach))); - -static __typeof(pthread_cancel) __gthrw_pthread_cancel __attribute__ ((__weakref__("pthread_cancel"), __copy__ (pthread_cancel))); - -static __typeof(sched_yield) __gthrw_sched_yield __attribute__ ((__weakref__("sched_yield"), __copy__ (sched_yield))); - -static __typeof(pthread_mutex_lock) __gthrw_pthread_mutex_lock __attribute__ ((__weakref__("pthread_mutex_lock"), __copy__ (pthread_mutex_lock))); -static __typeof(pthread_mutex_trylock) __gthrw_pthread_mutex_trylock __attribute__ ((__weakref__("pthread_mutex_trylock"), __copy__ (pthread_mutex_trylock))); - -static __typeof(pthread_mutex_timedlock) __gthrw_pthread_mutex_timedlock __attribute__ ((__weakref__("pthread_mutex_timedlock"), __copy__ (pthread_mutex_timedlock))); - -static __typeof(pthread_mutex_unlock) __gthrw_pthread_mutex_unlock __attribute__ ((__weakref__("pthread_mutex_unlock"), __copy__ (pthread_mutex_unlock))); -static __typeof(pthread_mutex_init) __gthrw_pthread_mutex_init __attribute__ ((__weakref__("pthread_mutex_init"), __copy__ (pthread_mutex_init))); -static __typeof(pthread_mutex_destroy) __gthrw_pthread_mutex_destroy __attribute__ ((__weakref__("pthread_mutex_destroy"), __copy__ (pthread_mutex_destroy))); - -static __typeof(pthread_cond_init) __gthrw_pthread_cond_init __attribute__ ((__weakref__("pthread_cond_init"), __copy__ (pthread_cond_init))); -static __typeof(pthread_cond_broadcast) __gthrw_pthread_cond_broadcast __attribute__ ((__weakref__("pthread_cond_broadcast"), __copy__ (pthread_cond_broadcast))); -static __typeof(pthread_cond_signal) __gthrw_pthread_cond_signal __attribute__ ((__weakref__("pthread_cond_signal"), __copy__ (pthread_cond_signal))); -static __typeof(pthread_cond_wait) __gthrw_pthread_cond_wait __attribute__ ((__weakref__("pthread_cond_wait"), __copy__ (pthread_cond_wait))); -static __typeof(pthread_cond_timedwait) __gthrw_pthread_cond_timedwait __attribute__ ((__weakref__("pthread_cond_timedwait"), __copy__ (pthread_cond_timedwait))); -static __typeof(pthread_cond_destroy) __gthrw_pthread_cond_destroy __attribute__ ((__weakref__("pthread_cond_destroy"), __copy__ (pthread_cond_destroy))); - -static __typeof(pthread_key_create) __gthrw_pthread_key_create __attribute__ ((__weakref__("pthread_key_create"), __copy__ (pthread_key_create))); -static __typeof(pthread_key_delete) __gthrw_pthread_key_delete __attribute__ ((__weakref__("pthread_key_delete"), __copy__ (pthread_key_delete))); -static __typeof(pthread_mutexattr_init) __gthrw_pthread_mutexattr_init __attribute__ ((__weakref__("pthread_mutexattr_init"), __copy__ (pthread_mutexattr_init))); -static __typeof(pthread_mutexattr_settype) __gthrw_pthread_mutexattr_settype __attribute__ ((__weakref__("pthread_mutexattr_settype"), __copy__ (pthread_mutexattr_settype))); -static __typeof(pthread_mutexattr_destroy) __gthrw_pthread_mutexattr_destroy __attribute__ ((__weakref__("pthread_mutexattr_destroy"), __copy__ (pthread_mutexattr_destroy))); -# 237 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static __typeof(pthread_key_create) __gthrw___pthread_key_create __attribute__ ((__weakref__("__pthread_key_create"), __copy__ (pthread_key_create))); -# 247 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static inline int -__gthread_active_p (void) -{ - static void *const __gthread_active_ptr - = __extension__ (void *) &__gthrw___pthread_key_create; - return __gthread_active_ptr != 0; -} -# 659 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static inline int -__gthread_create (__gthread_t *__threadid, void *(*__func) (void*), - void *__args) -{ - return __gthrw_pthread_create (__threadid, __null, __func, __args); -} - -static inline int -__gthread_join (__gthread_t __threadid, void **__value_ptr) -{ - return __gthrw_pthread_join (__threadid, __value_ptr); -} - -static inline int -__gthread_detach (__gthread_t __threadid) -{ - return __gthrw_pthread_detach (__threadid); -} - -static inline int -__gthread_equal (__gthread_t __t1, __gthread_t __t2) -{ - return __gthrw_pthread_equal (__t1, __t2); -} - -static inline __gthread_t -__gthread_self (void) -{ - return __gthrw_pthread_self (); -} - -static inline int -__gthread_yield (void) -{ - return __gthrw_sched_yield (); -} - -static inline int -__gthread_once (__gthread_once_t *__once, void (*__func) (void)) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_once (__once, __func); - else - return -1; -} - -static inline int -__gthread_key_create (__gthread_key_t *__key, void (*__dtor) (void *)) -{ - return __gthrw_pthread_key_create (__key, __dtor); -} - -static inline int -__gthread_key_delete (__gthread_key_t __key) -{ - return __gthrw_pthread_key_delete (__key); -} - -static inline void * -__gthread_getspecific (__gthread_key_t __key) -{ - return __gthrw_pthread_getspecific (__key); -} - -static inline int -__gthread_setspecific (__gthread_key_t __key, const void *__ptr) -{ - return __gthrw_pthread_setspecific (__key, __ptr); -} - -static inline void -__gthread_mutex_init_function (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - __gthrw_pthread_mutex_init (__mutex, __null); -} - -static inline int -__gthread_mutex_destroy (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_mutex_destroy (__mutex); - else - return 0; -} - -static inline int -__gthread_mutex_lock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_mutex_lock (__mutex); - else - return 0; -} - -static inline int -__gthread_mutex_trylock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_mutex_trylock (__mutex); - else - return 0; -} - - -static inline int -__gthread_mutex_timedlock (__gthread_mutex_t *__mutex, - const __gthread_time_t *__abs_timeout) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_mutex_timedlock (__mutex, __abs_timeout); - else - return 0; -} - - -static inline int -__gthread_mutex_unlock (__gthread_mutex_t *__mutex) -{ - if (__gthread_active_p ()) - return __gthrw_pthread_mutex_unlock (__mutex); - else - return 0; -} -# 808 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static inline int -__gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *__mutex) -{ - return __gthread_mutex_lock (__mutex); -} - -static inline int -__gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *__mutex) -{ - return __gthread_mutex_trylock (__mutex); -} - - -static inline int -__gthread_recursive_mutex_timedlock (__gthread_recursive_mutex_t *__mutex, - const __gthread_time_t *__abs_timeout) -{ - return __gthread_mutex_timedlock (__mutex, __abs_timeout); -} - - -static inline int -__gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *__mutex) -{ - return __gthread_mutex_unlock (__mutex); -} - -static inline int -__gthread_recursive_mutex_destroy (__gthread_recursive_mutex_t *__mutex) -{ - return __gthread_mutex_destroy (__mutex); -} -# 850 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr-default.h" 3 -static inline int -__gthread_cond_broadcast (__gthread_cond_t *__cond) -{ - return __gthrw_pthread_cond_broadcast (__cond); -} - -static inline int -__gthread_cond_signal (__gthread_cond_t *__cond) -{ - return __gthrw_pthread_cond_signal (__cond); -} - -static inline int -__gthread_cond_wait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex) -{ - return __gthrw_pthread_cond_wait (__cond, __mutex); -} - -static inline int -__gthread_cond_timedwait (__gthread_cond_t *__cond, __gthread_mutex_t *__mutex, - const __gthread_time_t *__abs_timeout) -{ - return __gthrw_pthread_cond_timedwait (__cond, __mutex, __abs_timeout); -} - -static inline int -__gthread_cond_wait_recursive (__gthread_cond_t *__cond, - __gthread_recursive_mutex_t *__mutex) -{ - return __gthread_cond_wait (__cond, __mutex); -} - -static inline int -__gthread_cond_destroy (__gthread_cond_t* __cond) -{ - return __gthrw_pthread_cond_destroy (__cond); -} -# 149 "/usr/include/c++/10/x86_64-redhat-linux/bits/gthr.h" 2 3 - - -#pragma GCC visibility pop -# 36 "/usr/include/c++/10/ext/atomicity.h" 2 3 -# 1 "/usr/include/c++/10/x86_64-redhat-linux/bits/atomic_word.h" 1 3 -# 32 "/usr/include/c++/10/x86_64-redhat-linux/bits/atomic_word.h" 3 -typedef int _Atomic_word; -# 37 "/usr/include/c++/10/ext/atomicity.h" 2 3 - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - inline _Atomic_word - __attribute__((__always_inline__)) - __exchange_and_add(volatile _Atomic_word* __mem, int __val) - { return __atomic_fetch_add(__mem, __val, 4); } - - inline void - __attribute__((__always_inline__)) - __atomic_add(volatile _Atomic_word* __mem, int __val) - { __atomic_fetch_add(__mem, __val, 4); } -# 64 "/usr/include/c++/10/ext/atomicity.h" 3 - inline _Atomic_word - __attribute__((__always_inline__)) - __exchange_and_add_single(_Atomic_word* __mem, int __val) - { - _Atomic_word __result = *__mem; - *__mem += __val; - return __result; - } - - inline void - __attribute__((__always_inline__)) - __atomic_add_single(_Atomic_word* __mem, int __val) - { *__mem += __val; } - - inline _Atomic_word - __attribute__ ((__always_inline__)) - __exchange_and_add_dispatch(_Atomic_word* __mem, int __val) - { - - if (__gthread_active_p()) - return __exchange_and_add(__mem, __val); - - return __exchange_and_add_single(__mem, __val); - } - - inline void - __attribute__ ((__always_inline__)) - __atomic_add_dispatch(_Atomic_word* __mem, int __val) - { - - if (__gthread_active_p()) - { - __atomic_add(__mem, __val); - return; - } - - __atomic_add_single(__mem, __val); - } - - -} -# 40 "/usr/include/c++/10/bits/basic_string.h" 2 3 -# 1 "/usr/include/c++/10/ext/alloc_traits.h" 1 3 -# 32 "/usr/include/c++/10/ext/alloc_traits.h" 3 - -# 33 "/usr/include/c++/10/ext/alloc_traits.h" 3 - -# 1 "/usr/include/c++/10/bits/alloc_traits.h" 1 3 -# 33 "/usr/include/c++/10/bits/alloc_traits.h" 3 -# 1 "/usr/include/c++/10/bits/stl_construct.h" 1 3 -# 73 "/usr/include/c++/10/bits/stl_construct.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 106 "/usr/include/c++/10/bits/stl_construct.h" 3 - template - inline void - _Construct(_Tp* __p, _Args&&... __args) - { ::new(static_cast(__p)) _Tp(std::forward<_Args>(__args)...); } -# 121 "/usr/include/c++/10/bits/stl_construct.h" 3 - template - inline void - _Construct_novalue(_T1* __p) - { ::new(static_cast(__p)) _T1; } - - template - void - _Destroy(_ForwardIterator __first, _ForwardIterator __last); - - - - - template - constexpr inline void - _Destroy(_Tp* __pointer) - { - - - - __pointer->~_Tp(); - - } - - template - struct _Destroy_aux - { - template - static void - __destroy(_ForwardIterator __first, _ForwardIterator __last) - { - for (; __first != __last; ++__first) - std::_Destroy(std::__addressof(*__first)); - } - }; - - template<> - struct _Destroy_aux - { - template - static void - __destroy(_ForwardIterator, _ForwardIterator) { } - }; - - - - - - - template - inline void - _Destroy(_ForwardIterator __first, _ForwardIterator __last) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _Value_type; - - - static_assert(is_destructible<_Value_type>::value, - "value type is destructible"); - - - - - - std::_Destroy_aux<__has_trivial_destructor(_Value_type)>:: - __destroy(__first, __last); - } - - template - struct _Destroy_n_aux - { - template - static _ForwardIterator - __destroy_n(_ForwardIterator __first, _Size __count) - { - for (; __count > 0; (void)++__first, --__count) - std::_Destroy(std::__addressof(*__first)); - return __first; - } - }; - - template<> - struct _Destroy_n_aux - { - template - static _ForwardIterator - __destroy_n(_ForwardIterator __first, _Size __count) - { - std::advance(__first, __count); - return __first; - } - }; - - - - - - - template - inline _ForwardIterator - _Destroy_n(_ForwardIterator __first, _Size __count) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _Value_type; - - - static_assert(is_destructible<_Value_type>::value, - "value type is destructible"); - - - - - - return std::_Destroy_n_aux<__has_trivial_destructor(_Value_type)>:: - __destroy_n(__first, __count); - } -# 253 "/usr/include/c++/10/bits/stl_construct.h" 3 - -} -# 34 "/usr/include/c++/10/bits/alloc_traits.h" 2 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - struct __allocator_traits_base - { - template - struct __rebind : __replace_first_arg<_Tp, _Up> { }; - - template - struct __rebind<_Tp, _Up, - __void_t::other>> - { using type = typename _Tp::template rebind<_Up>::other; }; - - protected: - template - using __pointer = typename _Tp::pointer; - template - using __c_pointer = typename _Tp::const_pointer; - template - using __v_pointer = typename _Tp::void_pointer; - template - using __cv_pointer = typename _Tp::const_void_pointer; - template - using __pocca = typename _Tp::propagate_on_container_copy_assignment; - template - using __pocma = typename _Tp::propagate_on_container_move_assignment; - template - using __pocs = typename _Tp::propagate_on_container_swap; - template - using __equal = typename _Tp::is_always_equal; - }; - - template - using __alloc_rebind - = typename __allocator_traits_base::template __rebind<_Alloc, _Up>::type; - - - - - - template - struct allocator_traits : __allocator_traits_base - { - - typedef _Alloc allocator_type; - - typedef typename _Alloc::value_type value_type; - - - - - - - using pointer = __detected_or_t; - - private: - - template class _Func, typename _Tp, typename = void> - struct _Ptr - { - using type = typename pointer_traits::template rebind<_Tp>; - }; - - template class _Func, typename _Tp> - struct _Ptr<_Func, _Tp, __void_t<_Func<_Alloc>>> - { - using type = _Func<_Alloc>; - }; - - - template - struct _Diff - { using type = typename pointer_traits<_PtrT>::difference_type; }; - - template - struct _Diff<_A2, _PtrT, __void_t> - { using type = typename _A2::difference_type; }; - - - template - struct _Size : make_unsigned<_DiffT> { }; - - template - struct _Size<_A2, _DiffT, __void_t> - { using type = typename _A2::size_type; }; - - public: - - - - - - - using const_pointer = typename _Ptr<__c_pointer, const value_type>::type; - - - - - - - - using void_pointer = typename _Ptr<__v_pointer, void>::type; - - - - - - - - using const_void_pointer = typename _Ptr<__cv_pointer, const void>::type; - - - - - - - - using difference_type = typename _Diff<_Alloc, pointer>::type; - - - - - - - - using size_type = typename _Size<_Alloc, difference_type>::type; - - - - - - - - using propagate_on_container_copy_assignment - = __detected_or_t; - - - - - - - - using propagate_on_container_move_assignment - = __detected_or_t; - - - - - - - - using propagate_on_container_swap - = __detected_or_t; - - - - - - - - using is_always_equal - = __detected_or_t::type, __equal, _Alloc>; - - template - using rebind_alloc = __alloc_rebind<_Alloc, _Tp>; - template - using rebind_traits = allocator_traits>; - - private: - template - static constexpr auto - _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer __hint, int) - -> decltype(__a.allocate(__n, __hint)) - { return __a.allocate(__n, __hint); } - - template - static constexpr pointer - _S_allocate(_Alloc2& __a, size_type __n, const_void_pointer, ...) - { return __a.allocate(__n); } - - template - struct __construct_helper - { - template()->construct( - std::declval<_Tp*>(), std::declval<_Args>()...))> - static true_type __test(int); - - template - static false_type __test(...); - - using type = decltype(__test<_Alloc>(0)); - }; - - template - using __has_construct - = typename __construct_helper<_Tp, _Args...>::type; - - template - static constexpr _Require<__has_construct<_Tp, _Args...>> - _S_construct(_Alloc& __a, _Tp* __p, _Args&&... __args) - noexcept(noexcept(__a.construct(__p, std::forward<_Args>(__args)...))) - { __a.construct(__p, std::forward<_Args>(__args)...); } - - template - static constexpr - _Require<__and_<__not_<__has_construct<_Tp, _Args...>>, - is_constructible<_Tp, _Args...>>> - _S_construct(_Alloc&, _Tp* __p, _Args&&... __args) - noexcept(std::is_nothrow_constructible<_Tp, _Args...>::value) - { - - ::new((void*)__p) _Tp(std::forward<_Args>(__args)...); - - - - } - - template - static constexpr auto - _S_destroy(_Alloc2& __a, _Tp* __p, int) - noexcept(noexcept(__a.destroy(__p))) - -> decltype(__a.destroy(__p)) - { __a.destroy(__p); } - - template - static constexpr void - _S_destroy(_Alloc2&, _Tp* __p, ...) - noexcept(std::is_nothrow_destructible<_Tp>::value) - { std::_Destroy(__p); } - - template - static constexpr auto - _S_max_size(_Alloc2& __a, int) - -> decltype(__a.max_size()) - { return __a.max_size(); } - - template - static constexpr size_type - _S_max_size(_Alloc2&, ...) - { - - - return __gnu_cxx::__numeric_traits::__max - / sizeof(value_type); - } - - template - static constexpr auto - _S_select(_Alloc2& __a, int) - -> decltype(__a.select_on_container_copy_construction()) - { return __a.select_on_container_copy_construction(); } - - template - static constexpr _Alloc2 - _S_select(_Alloc2& __a, ...) - { return __a; } - - public: -# 312 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static pointer - allocate(_Alloc& __a, size_type __n) - { return __a.allocate(__n); } -# 327 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static pointer - allocate(_Alloc& __a, size_type __n, const_void_pointer __hint) - { return _S_allocate(__a, __n, __hint, 0); } -# 339 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static void - deallocate(_Alloc& __a, pointer __p, size_type __n) - { __a.deallocate(__p, __n); } -# 354 "/usr/include/c++/10/bits/alloc_traits.h" 3 - template - static auto - construct(_Alloc& __a, _Tp* __p, _Args&&... __args) - noexcept(noexcept(_S_construct(__a, __p, - std::forward<_Args>(__args)...))) - -> decltype(_S_construct(__a, __p, std::forward<_Args>(__args)...)) - { _S_construct(__a, __p, std::forward<_Args>(__args)...); } -# 370 "/usr/include/c++/10/bits/alloc_traits.h" 3 - template - static void - destroy(_Alloc& __a, _Tp* __p) - noexcept(noexcept(_S_destroy(__a, __p, 0))) - { _S_destroy(__a, __p, 0); } -# 384 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static size_type - max_size(const _Alloc& __a) noexcept - { return _S_max_size(__a, 0); } -# 396 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static _Alloc - select_on_container_copy_construction(const _Alloc& __rhs) - { return _S_select(__rhs, 0); } - }; - - - - - - - template - struct allocator_traits> - { - - using allocator_type = allocator<_Tp>; - - - using value_type = _Tp; - - - using pointer = _Tp*; - - - using const_pointer = const _Tp*; - - - using void_pointer = void*; - - - using const_void_pointer = const void*; - - - using difference_type = std::ptrdiff_t; - - - using size_type = std::size_t; - - - using propagate_on_container_copy_assignment = false_type; - - - using propagate_on_container_move_assignment = true_type; - - - using propagate_on_container_swap = false_type; - - - using is_always_equal = true_type; - - template - using rebind_alloc = allocator<_Up>; - - template - using rebind_traits = allocator_traits>; -# 458 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static pointer - allocate(allocator_type& __a, size_type __n) - { return __a.allocate(__n); } -# 472 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static pointer - allocate(allocator_type& __a, size_type __n, const_void_pointer __hint) - { - - return __a.allocate(__n, __hint); - - - - } -# 490 "/usr/include/c++/10/bits/alloc_traits.h" 3 - static void - deallocate(allocator_type& __a, pointer __p, size_type __n) - { __a.deallocate(__p, __n); } -# 505 "/usr/include/c++/10/bits/alloc_traits.h" 3 - template - static void - construct(allocator_type& __a __attribute__((__unused__)), _Up* __p, - _Args&&... __args) - noexcept(std::is_nothrow_constructible<_Up, _Args...>::value) - { - - __a.construct(__p, std::forward<_Args>(__args)...); - - - - } -# 525 "/usr/include/c++/10/bits/alloc_traits.h" 3 - template - static void - destroy(allocator_type& __a __attribute__((__unused__)), _Up* __p) - noexcept(is_nothrow_destructible<_Up>::value) - { - - __a.destroy(__p); - - - - } - - - - - - - static size_type - max_size(const allocator_type& __a __attribute__((__unused__))) noexcept - { - - return __a.max_size(); - - - - } - - - - - - - static allocator_type - select_on_container_copy_construction(const allocator_type& __rhs) - { return __rhs; } - }; - - - template - inline void - __do_alloc_on_copy(_Alloc& __one, const _Alloc& __two, true_type) - { __one = __two; } - - template - inline void - __do_alloc_on_copy(_Alloc&, const _Alloc&, false_type) - { } - - - template - constexpr inline void - __alloc_on_copy(_Alloc& __one, const _Alloc& __two) - { - typedef allocator_traits<_Alloc> __traits; - typedef typename __traits::propagate_on_container_copy_assignment __pocca; - - - - - __do_alloc_on_copy(__one, __two, __pocca()); - - } - - template - constexpr _Alloc - __alloc_on_copy(const _Alloc& __a) - { - typedef allocator_traits<_Alloc> __traits; - return __traits::select_on_container_copy_construction(__a); - } - - - template - inline void __do_alloc_on_move(_Alloc& __one, _Alloc& __two, true_type) - { __one = std::move(__two); } - - template - inline void __do_alloc_on_move(_Alloc&, _Alloc&, false_type) - { } - - - template - constexpr inline void - __alloc_on_move(_Alloc& __one, _Alloc& __two) - { - typedef allocator_traits<_Alloc> __traits; - typedef typename __traits::propagate_on_container_move_assignment __pocma; - - - - - __do_alloc_on_move(__one, __two, __pocma()); - - } - - - template - inline void __do_alloc_on_swap(_Alloc& __one, _Alloc& __two, true_type) - { - using std::swap; - swap(__one, __two); - } - - template - inline void __do_alloc_on_swap(_Alloc&, _Alloc&, false_type) - { } - - - template - constexpr inline void - __alloc_on_swap(_Alloc& __one, _Alloc& __two) - { - typedef allocator_traits<_Alloc> __traits; - typedef typename __traits::propagate_on_container_swap __pocs; - - - - - - - - __do_alloc_on_swap(__one, __two, __pocs()); - - } - - template, - typename = void> - struct __is_alloc_insertable_impl - : false_type - { }; - - template - struct __is_alloc_insertable_impl<_Alloc, _Tp, _ValueT, - __void_t::construct( - std::declval<_Alloc&>(), std::declval<_ValueT*>(), - std::declval<_Tp>()))>> - : true_type - { }; - - - - - template - struct __is_copy_insertable - : __is_alloc_insertable_impl<_Alloc, - typename _Alloc::value_type const&>::type - { }; - - - template - struct __is_copy_insertable> - : is_copy_constructible<_Tp> - { }; - - - - - template - struct __is_move_insertable - : __is_alloc_insertable_impl<_Alloc, typename _Alloc::value_type>::type - { }; - - - template - struct __is_move_insertable> - : is_move_constructible<_Tp> - { }; - - - template - struct __is_allocator : false_type { }; - - template - struct __is_allocator<_Alloc, - __void_t().allocate(size_t{}))>> - : true_type { }; - - template - using _RequireAllocator - = typename enable_if<__is_allocator<_Alloc>::value, _Alloc>::type; - - template - using _RequireNotAllocator - = typename enable_if::value, _Alloc>::type; -# 719 "/usr/include/c++/10/bits/alloc_traits.h" 3 - template - void - _Destroy(_ForwardIterator __first, _ForwardIterator __last, - _Allocator& __alloc) - { - for (; __first != __last; ++__first) - - - - allocator_traits<_Allocator>::destroy(__alloc, - std::__addressof(*__first)); - - } - - template - inline void - _Destroy(_ForwardIterator __first, _ForwardIterator __last, - allocator<_Tp>&) - { - _Destroy(__first, __last); - } - - -} -# 35 "/usr/include/c++/10/ext/alloc_traits.h" 2 3 - - - - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - - - -template - struct __alloc_traits - - : std::allocator_traits<_Alloc> - - { - typedef _Alloc allocator_type; - - typedef std::allocator_traits<_Alloc> _Base_type; - typedef typename _Base_type::value_type value_type; - typedef typename _Base_type::pointer pointer; - typedef typename _Base_type::const_pointer const_pointer; - typedef typename _Base_type::size_type size_type; - typedef typename _Base_type::difference_type difference_type; - - typedef value_type& reference; - typedef const value_type& const_reference; - using _Base_type::allocate; - using _Base_type::deallocate; - using _Base_type::construct; - using _Base_type::destroy; - using _Base_type::max_size; - - private: - template - using __is_custom_pointer - = std::__and_, - std::__not_>>; - - public: - - template - static constexpr - std::__enable_if_t<__is_custom_pointer<_Ptr>::value> - construct(_Alloc& __a, _Ptr __p, _Args&&... __args) - noexcept(noexcept(_Base_type::construct(__a, std::__to_address(__p), - std::forward<_Args>(__args)...))) - { - _Base_type::construct(__a, std::__to_address(__p), - std::forward<_Args>(__args)...); - } - - - template - static constexpr - std::__enable_if_t<__is_custom_pointer<_Ptr>::value> - destroy(_Alloc& __a, _Ptr __p) - noexcept(noexcept(_Base_type::destroy(__a, std::__to_address(__p)))) - { _Base_type::destroy(__a, std::__to_address(__p)); } - - static constexpr _Alloc _S_select_on_copy(const _Alloc& __a) - { return _Base_type::select_on_container_copy_construction(__a); } - - static constexpr void _S_on_swap(_Alloc& __a, _Alloc& __b) - { std::__alloc_on_swap(__a, __b); } - - static constexpr bool _S_propagate_on_copy_assign() - { return _Base_type::propagate_on_container_copy_assignment::value; } - - static constexpr bool _S_propagate_on_move_assign() - { return _Base_type::propagate_on_container_move_assignment::value; } - - static constexpr bool _S_propagate_on_swap() - { return _Base_type::propagate_on_container_swap::value; } - - static constexpr bool _S_always_equal() - { return _Base_type::is_always_equal::value; } - - static constexpr bool _S_nothrow_move() - { return _S_propagate_on_move_assign() || _S_always_equal(); } - - template - struct rebind - { typedef typename _Base_type::template rebind_alloc<_Tp> other; }; -# 166 "/usr/include/c++/10/ext/alloc_traits.h" 3 - }; - - -} -# 41 "/usr/include/c++/10/bits/basic_string.h" 2 3 -# 52 "/usr/include/c++/10/bits/basic_string.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - -namespace __cxx11 { -# 76 "/usr/include/c++/10/bits/basic_string.h" 3 - template - class basic_string - { - typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template - rebind<_CharT>::other _Char_alloc_type; - typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; - - - public: - typedef _Traits traits_type; - typedef typename _Traits::char_type value_type; - typedef _Char_alloc_type allocator_type; - typedef typename _Alloc_traits::size_type size_type; - typedef typename _Alloc_traits::difference_type difference_type; - typedef typename _Alloc_traits::reference reference; - typedef typename _Alloc_traits::const_reference const_reference; - typedef typename _Alloc_traits::pointer pointer; - typedef typename _Alloc_traits::const_pointer const_pointer; - typedef __gnu_cxx::__normal_iterator iterator; - typedef __gnu_cxx::__normal_iterator - const_iterator; - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; - - - static const size_type npos = static_cast(-1); - - protected: - - - - - typedef const_iterator __const_iterator; - - - private: -# 150 "/usr/include/c++/10/bits/basic_string.h" 3 - struct _Alloc_hider : allocator_type - { - - - - - _Alloc_hider(pointer __dat, const _Alloc& __a) - : allocator_type(__a), _M_p(__dat) { } - - _Alloc_hider(pointer __dat, _Alloc&& __a = _Alloc()) - : allocator_type(std::move(__a)), _M_p(__dat) { } - - - pointer _M_p; - }; - - _Alloc_hider _M_dataplus; - size_type _M_string_length; - - enum { _S_local_capacity = 15 / sizeof(_CharT) }; - - union - { - _CharT _M_local_buf[_S_local_capacity + 1]; - size_type _M_allocated_capacity; - }; - - void - _M_data(pointer __p) - { _M_dataplus._M_p = __p; } - - void - _M_length(size_type __length) - { _M_string_length = __length; } - - pointer - _M_data() const - { return _M_dataplus._M_p; } - - pointer - _M_local_data() - { - - return std::pointer_traits::pointer_to(*_M_local_buf); - - - - } - - const_pointer - _M_local_data() const - { - - return std::pointer_traits::pointer_to(*_M_local_buf); - - - - } - - void - _M_capacity(size_type __capacity) - { _M_allocated_capacity = __capacity; } - - void - _M_set_length(size_type __n) - { - _M_length(__n); - traits_type::assign(_M_data()[__n], _CharT()); - } - - bool - _M_is_local() const - { return _M_data() == _M_local_data(); } - - - pointer - _M_create(size_type&, size_type); - - void - _M_dispose() - { - if (!_M_is_local()) - _M_destroy(_M_allocated_capacity); - } - - void - _M_destroy(size_type __size) throw() - { _Alloc_traits::deallocate(_M_get_allocator(), _M_data(), __size + 1); } - - - - template - void - _M_construct_aux(_InIterator __beg, _InIterator __end, - std::__false_type) - { - typedef typename iterator_traits<_InIterator>::iterator_category _Tag; - _M_construct(__beg, __end, _Tag()); - } - - - - template - void - _M_construct_aux(_Integer __beg, _Integer __end, std::__true_type) - { _M_construct_aux_2(static_cast(__beg), __end); } - - void - _M_construct_aux_2(size_type __req, _CharT __c) - { _M_construct(__req, __c); } - - template - void - _M_construct(_InIterator __beg, _InIterator __end) - { - typedef typename std::__is_integer<_InIterator>::__type _Integral; - _M_construct_aux(__beg, __end, _Integral()); - } - - - template - void - _M_construct(_InIterator __beg, _InIterator __end, - std::input_iterator_tag); - - - - template - void - _M_construct(_FwdIterator __beg, _FwdIterator __end, - std::forward_iterator_tag); - - void - _M_construct(size_type __req, _CharT __c); - - allocator_type& - _M_get_allocator() - { return _M_dataplus; } - - const allocator_type& - _M_get_allocator() const - { return _M_dataplus; } - - private: -# 309 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - _M_check(size_type __pos, const char* __s) const - { - if (__pos > this->size()) - __throw_out_of_range_fmt(("%s: __pos (which is %zu) > " "this->size() (which is %zu)") - , - __s, __pos, this->size()); - return __pos; - } - - void - _M_check_length(size_type __n1, size_type __n2, const char* __s) const - { - if (this->max_size() - (this->size() - __n1) < __n2) - __throw_length_error((__s)); - } - - - - size_type - _M_limit(size_type __pos, size_type __off) const noexcept - { - const bool __testoff = __off < this->size() - __pos; - return __testoff ? __off : this->size() - __pos; - } - - - bool - _M_disjunct(const _CharT* __s) const noexcept - { - return (less()(__s, _M_data()) - || less()(_M_data() + this->size(), __s)); - } - - - - static void - _S_copy(_CharT* __d, const _CharT* __s, size_type __n) - { - if (__n == 1) - traits_type::assign(*__d, *__s); - else - traits_type::copy(__d, __s, __n); - } - - static void - _S_move(_CharT* __d, const _CharT* __s, size_type __n) - { - if (__n == 1) - traits_type::assign(*__d, *__s); - else - traits_type::move(__d, __s, __n); - } - - static void - _S_assign(_CharT* __d, size_type __n, _CharT __c) - { - if (__n == 1) - traits_type::assign(*__d, __c); - else - traits_type::assign(__d, __n, __c); - } - - - - template - static void - _S_copy_chars(_CharT* __p, _Iterator __k1, _Iterator __k2) - { - for (; __k1 != __k2; ++__k1, (void)++__p) - traits_type::assign(*__p, *__k1); - } - - static void - _S_copy_chars(_CharT* __p, iterator __k1, iterator __k2) noexcept - { _S_copy_chars(__p, __k1.base(), __k2.base()); } - - static void - _S_copy_chars(_CharT* __p, const_iterator __k1, const_iterator __k2) - noexcept - { _S_copy_chars(__p, __k1.base(), __k2.base()); } - - static void - _S_copy_chars(_CharT* __p, _CharT* __k1, _CharT* __k2) noexcept - { _S_copy(__p, __k1, __k2 - __k1); } - - static void - _S_copy_chars(_CharT* __p, const _CharT* __k1, const _CharT* __k2) - noexcept - { _S_copy(__p, __k1, __k2 - __k1); } - - static int - _S_compare(size_type __n1, size_type __n2) noexcept - { - const difference_type __d = difference_type(__n1 - __n2); - - if (__d > __gnu_cxx::__numeric_traits::__max) - return __gnu_cxx::__numeric_traits::__max; - else if (__d < __gnu_cxx::__numeric_traits::__min) - return __gnu_cxx::__numeric_traits::__min; - else - return int(__d); - } - - void - _M_assign(const basic_string&); - - void - _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, - size_type __len2); - - void - _M_erase(size_type __pos, size_type __n); - - public: - - - - - - - - basic_string() - noexcept(is_nothrow_default_constructible<_Alloc>::value) - : _M_dataplus(_M_local_data()) - { _M_set_length(0); } - - - - - explicit - basic_string(const _Alloc& __a) noexcept - : _M_dataplus(_M_local_data(), __a) - { _M_set_length(0); } - - - - - - basic_string(const basic_string& __str) - : _M_dataplus(_M_local_data(), - _Alloc_traits::_S_select_on_copy(__str._M_get_allocator())) - { _M_construct(__str._M_data(), __str._M_data() + __str.length()); } -# 461 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(const basic_string& __str, size_type __pos, - const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { - const _CharT* __start = __str._M_data() - + __str._M_check(__pos, "basic_string::basic_string"); - _M_construct(__start, __start + __str._M_limit(__pos, npos)); - } - - - - - - - - basic_string(const basic_string& __str, size_type __pos, - size_type __n) - : _M_dataplus(_M_local_data()) - { - const _CharT* __start = __str._M_data() - + __str._M_check(__pos, "basic_string::basic_string"); - _M_construct(__start, __start + __str._M_limit(__pos, __n)); - } -# 492 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(const basic_string& __str, size_type __pos, - size_type __n, const _Alloc& __a) - : _M_dataplus(_M_local_data(), __a) - { - const _CharT* __start - = __str._M_data() + __str._M_check(__pos, "string::string"); - _M_construct(__start, __start + __str._M_limit(__pos, __n)); - } -# 510 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(const _CharT* __s, size_type __n, - const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__s, __s + __n); } -# 525 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(const _CharT* __s, const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__s, __s ? __s + traits_type::length(__s) : __s+npos); } -# 540 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(size_type __n, _CharT __c, const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__n, __c); } -# 552 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string(basic_string&& __str) noexcept - : _M_dataplus(_M_local_data(), std::move(__str._M_get_allocator())) - { - if (__str._M_is_local()) - { - traits_type::copy(_M_local_buf, __str._M_local_buf, - _S_local_capacity + 1); - } - else - { - _M_data(__str._M_data()); - _M_capacity(__str._M_allocated_capacity); - } - - - - - _M_length(__str.length()); - __str._M_data(__str._M_local_data()); - __str._M_set_length(0); - } - - - - - - - basic_string(initializer_list<_CharT> __l, const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__l.begin(), __l.end()); } - - basic_string(const basic_string& __str, const _Alloc& __a) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__str.begin(), __str.end()); } - - basic_string(basic_string&& __str, const _Alloc& __a) - noexcept(_Alloc_traits::_S_always_equal()) - : _M_dataplus(_M_local_data(), __a) - { - if (__str._M_is_local()) - { - traits_type::copy(_M_local_buf, __str._M_local_buf, - _S_local_capacity + 1); - _M_length(__str.length()); - __str._M_set_length(0); - } - else if (_Alloc_traits::_S_always_equal() - || __str.get_allocator() == __a) - { - _M_data(__str._M_data()); - _M_length(__str.length()); - _M_capacity(__str._M_allocated_capacity); - __str._M_data(__str._M_local_buf); - __str._M_set_length(0); - } - else - _M_construct(__str.begin(), __str.end()); - } -# 620 "/usr/include/c++/10/bits/basic_string.h" 3 - template> - - - - basic_string(_InputIterator __beg, _InputIterator __end, - const _Alloc& __a = _Alloc()) - : _M_dataplus(_M_local_data(), __a) - { _M_construct(__beg, __end); } -# 657 "/usr/include/c++/10/bits/basic_string.h" 3 - ~basic_string() - { _M_dispose(); } - - - - - - basic_string& - operator=(const basic_string& __str) - { - return this->assign(__str); - } - - - - - - basic_string& - operator=(const _CharT* __s) - { return this->assign(__s); } -# 685 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - operator=(_CharT __c) - { - this->assign(1, __c); - return *this; - } -# 702 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - operator=(basic_string&& __str) - noexcept(_Alloc_traits::_S_nothrow_move()) - { - if (!_M_is_local() && _Alloc_traits::_S_propagate_on_move_assign() - && !_Alloc_traits::_S_always_equal() - && _M_get_allocator() != __str._M_get_allocator()) - { - - _M_destroy(_M_allocated_capacity); - _M_data(_M_local_data()); - _M_set_length(0); - } - - std::__alloc_on_move(_M_get_allocator(), __str._M_get_allocator()); - - if (__str._M_is_local()) - { - - if (__str.size()) - this->_S_copy(_M_data(), __str._M_data(), __str.size()); - _M_set_length(__str.size()); - } - else if (_Alloc_traits::_S_propagate_on_move_assign() - || _Alloc_traits::_S_always_equal() - || _M_get_allocator() == __str._M_get_allocator()) - { - - pointer __data = nullptr; - size_type __capacity; - if (!_M_is_local()) - { - if (_Alloc_traits::_S_always_equal()) - { - - __data = _M_data(); - __capacity = _M_allocated_capacity; - } - else - _M_destroy(_M_allocated_capacity); - } - - _M_data(__str._M_data()); - _M_length(__str.length()); - _M_capacity(__str._M_allocated_capacity); - if (__data) - { - __str._M_data(__data); - __str._M_capacity(__capacity); - } - else - __str._M_data(__str._M_local_buf); - } - else - assign(__str); - __str.clear(); - return *this; - } - - - - - - basic_string& - operator=(initializer_list<_CharT> __l) - { - this->assign(__l.begin(), __l.size()); - return *this; - } -# 796 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - begin() noexcept - { return iterator(_M_data()); } - - - - - - const_iterator - begin() const noexcept - { return const_iterator(_M_data()); } - - - - - - iterator - end() noexcept - { return iterator(_M_data() + this->size()); } - - - - - - const_iterator - end() const noexcept - { return const_iterator(_M_data() + this->size()); } - - - - - - - reverse_iterator - rbegin() noexcept - { return reverse_iterator(this->end()); } - - - - - - - const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(this->end()); } - - - - - - - reverse_iterator - rend() noexcept - { return reverse_iterator(this->begin()); } - - - - - - - const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(this->begin()); } - - - - - - - const_iterator - cbegin() const noexcept - { return const_iterator(this->_M_data()); } - - - - - - const_iterator - cend() const noexcept - { return const_iterator(this->_M_data() + this->size()); } - - - - - - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(this->end()); } - - - - - - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(this->begin()); } - - - public: - - - - size_type - size() const noexcept - { return _M_string_length; } - - - - size_type - length() const noexcept - { return _M_string_length; } - - - size_type - max_size() const noexcept - { return (_Alloc_traits::max_size(_M_get_allocator()) - 1) / 2; } -# 925 "/usr/include/c++/10/bits/basic_string.h" 3 - void - resize(size_type __n, _CharT __c); -# 938 "/usr/include/c++/10/bits/basic_string.h" 3 - void - resize(size_type __n) - { this->resize(__n, _CharT()); } - - - - void - shrink_to_fit() noexcept - { - - if (capacity() > size()) - { - try - { reserve(0); } - catch(...) - { } - } - - } - - - - - - - size_type - capacity() const noexcept - { - return _M_is_local() ? size_type(_S_local_capacity) - : _M_allocated_capacity; - } -# 987 "/usr/include/c++/10/bits/basic_string.h" 3 - void - reserve(size_type __res_arg = 0); - - - - - void - clear() noexcept - { _M_set_length(0); } - - - - - - bool - empty() const noexcept - { return this->size() == 0; } -# 1016 "/usr/include/c++/10/bits/basic_string.h" 3 - const_reference - operator[] (size_type __pos) const noexcept - { - ; - return _M_data()[__pos]; - } -# 1033 "/usr/include/c++/10/bits/basic_string.h" 3 - reference - operator[](size_type __pos) - { - - - ; - - ; - return _M_data()[__pos]; - } -# 1054 "/usr/include/c++/10/bits/basic_string.h" 3 - const_reference - at(size_type __n) const - { - if (__n >= this->size()) - __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") - - , - __n, this->size()); - return _M_data()[__n]; - } -# 1075 "/usr/include/c++/10/bits/basic_string.h" 3 - reference - at(size_type __n) - { - if (__n >= size()) - __throw_out_of_range_fmt(("basic_string::at: __n " "(which is %zu) >= this->size() " "(which is %zu)") - - , - __n, this->size()); - return _M_data()[__n]; - } - - - - - - - reference - front() noexcept - { - ; - return operator[](0); - } - - - - - - const_reference - front() const noexcept - { - ; - return operator[](0); - } - - - - - - reference - back() noexcept - { - ; - return operator[](this->size() - 1); - } - - - - - - const_reference - back() const noexcept - { - ; - return operator[](this->size() - 1); - } -# 1138 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - operator+=(const basic_string& __str) - { return this->append(__str); } - - - - - - - basic_string& - operator+=(const _CharT* __s) - { return this->append(__s); } - - - - - - - basic_string& - operator+=(_CharT __c) - { - this->push_back(__c); - return *this; - } - - - - - - - - basic_string& - operator+=(initializer_list<_CharT> __l) - { return this->append(__l.begin(), __l.size()); } -# 1191 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - append(const basic_string& __str) - { return _M_append(__str._M_data(), __str.size()); } -# 1208 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - append(const basic_string& __str, size_type __pos, size_type __n = npos) - { return _M_append(__str._M_data() - + __str._M_check(__pos, "basic_string::append"), - __str._M_limit(__pos, __n)); } - - - - - - - - basic_string& - append(const _CharT* __s, size_type __n) - { - ; - _M_check_length(size_type(0), __n, "basic_string::append"); - return _M_append(__s, __n); - } - - - - - - - basic_string& - append(const _CharT* __s) - { - ; - const size_type __n = traits_type::length(__s); - _M_check_length(size_type(0), __n, "basic_string::append"); - return _M_append(__s, __n); - } -# 1250 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - append(size_type __n, _CharT __c) - { return _M_replace_aux(this->size(), size_type(0), __n, __c); } - - - - - - - - basic_string& - append(initializer_list<_CharT> __l) - { return this->append(__l.begin(), __l.size()); } -# 1274 "/usr/include/c++/10/bits/basic_string.h" 3 - template> - - - - basic_string& - append(_InputIterator __first, _InputIterator __last) - { return this->replace(end(), end(), __first, __last); } -# 1319 "/usr/include/c++/10/bits/basic_string.h" 3 - void - push_back(_CharT __c) - { - const size_type __size = this->size(); - if (__size + 1 > this->capacity()) - this->_M_mutate(__size, size_type(0), 0, size_type(1)); - traits_type::assign(this->_M_data()[__size], __c); - this->_M_set_length(__size + 1); - } - - - - - - - basic_string& - assign(const basic_string& __str) - { - - if (_Alloc_traits::_S_propagate_on_copy_assign()) - { - if (!_Alloc_traits::_S_always_equal() && !_M_is_local() - && _M_get_allocator() != __str._M_get_allocator()) - { - - - if (__str.size() <= _S_local_capacity) - { - _M_destroy(_M_allocated_capacity); - _M_data(_M_local_data()); - _M_set_length(0); - } - else - { - const auto __len = __str.size(); - auto __alloc = __str._M_get_allocator(); - - auto __ptr = _Alloc_traits::allocate(__alloc, __len + 1); - _M_destroy(_M_allocated_capacity); - _M_data(__ptr); - _M_capacity(__len); - _M_set_length(__len); - } - } - std::__alloc_on_copy(_M_get_allocator(), __str._M_get_allocator()); - } - - this->_M_assign(__str); - return *this; - } -# 1379 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - assign(basic_string&& __str) - noexcept(_Alloc_traits::_S_nothrow_move()) - { - - - return *this = std::move(__str); - } -# 1402 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - assign(const basic_string& __str, size_type __pos, size_type __n = npos) - { return _M_replace(size_type(0), this->size(), __str._M_data() - + __str._M_check(__pos, "basic_string::assign"), - __str._M_limit(__pos, __n)); } -# 1418 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - assign(const _CharT* __s, size_type __n) - { - ; - return _M_replace(size_type(0), this->size(), __s, __n); - } -# 1434 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - assign(const _CharT* __s) - { - ; - return _M_replace(size_type(0), this->size(), __s, - traits_type::length(__s)); - } -# 1451 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - assign(size_type __n, _CharT __c) - { return _M_replace_aux(size_type(0), this->size(), __n, __c); } -# 1464 "/usr/include/c++/10/bits/basic_string.h" 3 - template> - - - - basic_string& - assign(_InputIterator __first, _InputIterator __last) - { return this->replace(begin(), end(), __first, __last); } - - - - - - - - basic_string& - assign(initializer_list<_CharT> __l) - { return this->assign(__l.begin(), __l.size()); } -# 1533 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - insert(const_iterator __p, size_type __n, _CharT __c) - { - ; - const size_type __pos = __p - begin(); - this->replace(__p, __p, __n, __c); - return iterator(this->_M_data() + __pos); - } -# 1575 "/usr/include/c++/10/bits/basic_string.h" 3 - template> - iterator - insert(const_iterator __p, _InputIterator __beg, _InputIterator __end) - { - ; - const size_type __pos = __p - begin(); - this->replace(__p, __p, __beg, __end); - return iterator(this->_M_data() + __pos); - } -# 1611 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - insert(const_iterator __p, initializer_list<_CharT> __l) - { return this->insert(__p, __l.begin(), __l.end()); } -# 1638 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - insert(size_type __pos1, const basic_string& __str) - { return this->replace(__pos1, size_type(0), - __str._M_data(), __str.size()); } -# 1661 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - insert(size_type __pos1, const basic_string& __str, - size_type __pos2, size_type __n = npos) - { return this->replace(__pos1, size_type(0), __str._M_data() - + __str._M_check(__pos2, "basic_string::insert"), - __str._M_limit(__pos2, __n)); } -# 1684 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - insert(size_type __pos, const _CharT* __s, size_type __n) - { return this->replace(__pos, size_type(0), __s, __n); } -# 1703 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - insert(size_type __pos, const _CharT* __s) - { - ; - return this->replace(__pos, size_type(0), __s, - traits_type::length(__s)); - } -# 1727 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - insert(size_type __pos, size_type __n, _CharT __c) - { return _M_replace_aux(_M_check(__pos, "basic_string::insert"), - size_type(0), __n, __c); } -# 1745 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - insert(__const_iterator __p, _CharT __c) - { - ; - const size_type __pos = __p - begin(); - _M_replace_aux(__pos, size_type(0), size_type(1), __c); - return iterator(_M_data() + __pos); - } -# 1805 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - erase(size_type __pos = 0, size_type __n = npos) - { - _M_check(__pos, "basic_string::erase"); - if (__n == npos) - this->_M_set_length(__pos); - else if (__n != 0) - this->_M_erase(__pos, _M_limit(__pos, __n)); - return *this; - } -# 1824 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - erase(__const_iterator __position) - { - - ; - const size_type __pos = __position - begin(); - this->_M_erase(__pos, size_type(1)); - return iterator(_M_data() + __pos); - } -# 1843 "/usr/include/c++/10/bits/basic_string.h" 3 - iterator - erase(__const_iterator __first, __const_iterator __last) - { - - ; - const size_type __pos = __first - begin(); - if (__last == end()) - this->_M_set_length(__pos); - else - this->_M_erase(__pos, __last - __first); - return iterator(this->_M_data() + __pos); - } - - - - - - - - void - pop_back() noexcept - { - ; - _M_erase(size() - 1, 1); - } -# 1887 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(size_type __pos, size_type __n, const basic_string& __str) - { return this->replace(__pos, __n, __str._M_data(), __str.size()); } -# 1909 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(size_type __pos1, size_type __n1, const basic_string& __str, - size_type __pos2, size_type __n2 = npos) - { return this->replace(__pos1, __n1, __str._M_data() - + __str._M_check(__pos2, "basic_string::replace"), - __str._M_limit(__pos2, __n2)); } -# 1934 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(size_type __pos, size_type __n1, const _CharT* __s, - size_type __n2) - { - ; - return _M_replace(_M_check(__pos, "basic_string::replace"), - _M_limit(__pos, __n1), __s, __n2); - } -# 1959 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(size_type __pos, size_type __n1, const _CharT* __s) - { - ; - return this->replace(__pos, __n1, __s, traits_type::length(__s)); - } -# 1983 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) - { return _M_replace_aux(_M_check(__pos, "basic_string::replace"), - _M_limit(__pos, __n1), __n2, __c); } -# 2001 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - const basic_string& __str) - { return this->replace(__i1, __i2, __str._M_data(), __str.size()); } -# 2021 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - const _CharT* __s, size_type __n) - { - - ; - return this->replace(__i1 - begin(), __i2 - __i1, __s, __n); - } -# 2043 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, const _CharT* __s) - { - ; - return this->replace(__i1, __i2, __s, traits_type::length(__s)); - } -# 2064 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, size_type __n, - _CharT __c) - { - - ; - return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __c); - } -# 2089 "/usr/include/c++/10/bits/basic_string.h" 3 - template> - basic_string& - replace(const_iterator __i1, const_iterator __i2, - _InputIterator __k1, _InputIterator __k2) - { - - ; - ; - return this->_M_replace_dispatch(__i1, __i2, __k1, __k2, - std::__false_type()); - } -# 2121 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - _CharT* __k1, _CharT* __k2) - { - - ; - ; - return this->replace(__i1 - begin(), __i2 - __i1, - __k1, __k2 - __k1); - } - - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - const _CharT* __k1, const _CharT* __k2) - { - - ; - ; - return this->replace(__i1 - begin(), __i2 - __i1, - __k1, __k2 - __k1); - } - - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - iterator __k1, iterator __k2) - { - - ; - ; - return this->replace(__i1 - begin(), __i2 - __i1, - __k1.base(), __k2 - __k1); - } - - basic_string& - replace(__const_iterator __i1, __const_iterator __i2, - const_iterator __k1, const_iterator __k2) - { - - ; - ; - return this->replace(__i1 - begin(), __i2 - __i1, - __k1.base(), __k2 - __k1); - } -# 2180 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string& replace(const_iterator __i1, const_iterator __i2, - initializer_list<_CharT> __l) - { return this->replace(__i1, __i2, __l.begin(), __l.size()); } -# 2240 "/usr/include/c++/10/bits/basic_string.h" 3 - private: - template - basic_string& - _M_replace_dispatch(const_iterator __i1, const_iterator __i2, - _Integer __n, _Integer __val, __true_type) - { return _M_replace_aux(__i1 - begin(), __i2 - __i1, __n, __val); } - - template - basic_string& - _M_replace_dispatch(const_iterator __i1, const_iterator __i2, - _InputIterator __k1, _InputIterator __k2, - __false_type); - - basic_string& - _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, - _CharT __c); - - basic_string& - _M_replace(size_type __pos, size_type __len1, const _CharT* __s, - const size_type __len2); - - basic_string& - _M_append(const _CharT* __s, size_type __n); - - public: -# 2278 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - copy(_CharT* __s, size_type __n, size_type __pos = 0) const; -# 2288 "/usr/include/c++/10/bits/basic_string.h" 3 - void - swap(basic_string& __s) noexcept; -# 2298 "/usr/include/c++/10/bits/basic_string.h" 3 - const _CharT* - c_str() const noexcept - { return _M_data(); } -# 2310 "/usr/include/c++/10/bits/basic_string.h" 3 - const _CharT* - data() const noexcept - { return _M_data(); } -# 2329 "/usr/include/c++/10/bits/basic_string.h" 3 - allocator_type - get_allocator() const noexcept - { return _M_get_allocator(); } -# 2345 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find(const _CharT* __s, size_type __pos, size_type __n) const - noexcept; -# 2359 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find(const basic_string& __str, size_type __pos = 0) const - noexcept - { return this->find(__str.data(), __pos, __str.size()); } -# 2391 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find(const _CharT* __s, size_type __pos = 0) const noexcept - { - ; - return this->find(__s, __pos, traits_type::length(__s)); - } -# 2408 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find(_CharT __c, size_type __pos = 0) const noexcept; -# 2421 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - rfind(const basic_string& __str, size_type __pos = npos) const - noexcept - { return this->rfind(__str.data(), __pos, __str.size()); } -# 2455 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - rfind(const _CharT* __s, size_type __pos, size_type __n) const - noexcept; -# 2469 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - rfind(const _CharT* __s, size_type __pos = npos) const - { - ; - return this->rfind(__s, __pos, traits_type::length(__s)); - } -# 2486 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - rfind(_CharT __c, size_type __pos = npos) const noexcept; -# 2500 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_of(const basic_string& __str, size_type __pos = 0) const - noexcept - { return this->find_first_of(__str.data(), __pos, __str.size()); } -# 2535 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept; -# 2549 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_of(const _CharT* __s, size_type __pos = 0) const - noexcept - { - ; - return this->find_first_of(__s, __pos, traits_type::length(__s)); - } -# 2569 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_of(_CharT __c, size_type __pos = 0) const noexcept - { return this->find(__c, __pos); } -# 2584 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_of(const basic_string& __str, size_type __pos = npos) const - noexcept - { return this->find_last_of(__str.data(), __pos, __str.size()); } -# 2619 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept; -# 2633 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_of(const _CharT* __s, size_type __pos = npos) const - noexcept - { - ; - return this->find_last_of(__s, __pos, traits_type::length(__s)); - } -# 2653 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_of(_CharT __c, size_type __pos = npos) const noexcept - { return this->rfind(__c, __pos); } -# 2667 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_not_of(const basic_string& __str, size_type __pos = 0) const - noexcept - { return this->find_first_not_of(__str.data(), __pos, __str.size()); } -# 2702 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_not_of(const _CharT* __s, size_type __pos, - size_type __n) const noexcept; -# 2716 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_not_of(const _CharT* __s, size_type __pos = 0) const - noexcept - { - ; - return this->find_first_not_of(__s, __pos, traits_type::length(__s)); - } -# 2734 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_first_not_of(_CharT __c, size_type __pos = 0) const - noexcept; -# 2749 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_not_of(const basic_string& __str, size_type __pos = npos) const - noexcept - { return this->find_last_not_of(__str.data(), __pos, __str.size()); } -# 2784 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_not_of(const _CharT* __s, size_type __pos, - size_type __n) const noexcept; -# 2798 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_not_of(const _CharT* __s, size_type __pos = npos) const - noexcept - { - ; - return this->find_last_not_of(__s, __pos, traits_type::length(__s)); - } -# 2816 "/usr/include/c++/10/bits/basic_string.h" 3 - size_type - find_last_not_of(_CharT __c, size_type __pos = npos) const - noexcept; -# 2832 "/usr/include/c++/10/bits/basic_string.h" 3 - basic_string - substr(size_type __pos = 0, size_type __n = npos) const - { return basic_string(*this, - _M_check(__pos, "basic_string::substr"), __n); } -# 2851 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(const basic_string& __str) const - { - const size_type __size = this->size(); - const size_type __osize = __str.size(); - const size_type __len = std::min(__size, __osize); - - int __r = traits_type::compare(_M_data(), __str.data(), __len); - if (!__r) - __r = _S_compare(__size, __osize); - return __r; - } -# 2944 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(size_type __pos, size_type __n, const basic_string& __str) const; -# 2970 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(size_type __pos1, size_type __n1, const basic_string& __str, - size_type __pos2, size_type __n2 = npos) const; -# 2988 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(const _CharT* __s) const noexcept; -# 3012 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(size_type __pos, size_type __n1, const _CharT* __s) const; -# 3039 "/usr/include/c++/10/bits/basic_string.h" 3 - int - compare(size_type __pos, size_type __n1, const _CharT* __s, - size_type __n2) const; -# 3070 "/usr/include/c++/10/bits/basic_string.h" 3 - template friend class basic_stringbuf; - }; -} -# 6029 "/usr/include/c++/10/bits/basic_string.h" 3 - template - basic_string<_CharT, _Traits, _Alloc> - operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { - basic_string<_CharT, _Traits, _Alloc> __str(__lhs); - __str.append(__rhs); - return __str; - } - - - - - - - - template - basic_string<_CharT,_Traits,_Alloc> - operator+(const _CharT* __lhs, - const basic_string<_CharT,_Traits,_Alloc>& __rhs); - - - - - - - - template - basic_string<_CharT,_Traits,_Alloc> - operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Alloc>& __rhs); - - - - - - - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { - basic_string<_CharT, _Traits, _Alloc> __str(__lhs); - __str.append(__rhs); - return __str; - } - - - - - - - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, _CharT __rhs) - { - typedef basic_string<_CharT, _Traits, _Alloc> __string_type; - typedef typename __string_type::size_type __size_type; - __string_type __str(__lhs); - __str.append(__size_type(1), __rhs); - return __str; - } - - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return std::move(__lhs.append(__rhs)); } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - basic_string<_CharT, _Traits, _Alloc>&& __rhs) - { return std::move(__rhs.insert(0, __lhs)); } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, - basic_string<_CharT, _Traits, _Alloc>&& __rhs) - { - - using _Alloc_traits = allocator_traits<_Alloc>; - bool __use_rhs = false; - if (typename _Alloc_traits::is_always_equal{}) - __use_rhs = true; - else if (__lhs.get_allocator() == __rhs.get_allocator()) - __use_rhs = true; - if (__use_rhs) - - { - const auto __size = __lhs.size() + __rhs.size(); - if (__size > __lhs.capacity() && __size <= __rhs.capacity()) - return std::move(__rhs.insert(0, __lhs)); - } - return std::move(__lhs.append(__rhs)); - } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(const _CharT* __lhs, - basic_string<_CharT, _Traits, _Alloc>&& __rhs) - { return std::move(__rhs.insert(0, __lhs)); } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(_CharT __lhs, - basic_string<_CharT, _Traits, _Alloc>&& __rhs) - { return std::move(__rhs.insert(0, 1, __lhs)); } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, - const _CharT* __rhs) - { return std::move(__lhs.append(__rhs)); } - - template - inline basic_string<_CharT, _Traits, _Alloc> - operator+(basic_string<_CharT, _Traits, _Alloc>&& __lhs, - _CharT __rhs) - { return std::move(__lhs.append(1, __rhs)); } -# 6160 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return __lhs.compare(__rhs) == 0; } - - template - inline - typename __gnu_cxx::__enable_if<__is_char<_CharT>::__value, bool>::__type - operator==(const basic_string<_CharT>& __lhs, - const basic_string<_CharT>& __rhs) noexcept - { return (__lhs.size() == __rhs.size() - && !std::char_traits<_CharT>::compare(__lhs.data(), __rhs.data(), - __lhs.size())); } - - - - - - - - template - inline bool - operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return __lhs.compare(__rhs) == 0; } -# 6223 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator==(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return __rhs.compare(__lhs) == 0; } -# 6236 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return !(__lhs == __rhs); } - - - - - - - - template - inline bool - operator!=(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return !(__lhs == __rhs); } - - - - - - - - template - inline bool - operator!=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return !(__lhs == __rhs); } -# 6274 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return __lhs.compare(__rhs) < 0; } - - - - - - - - template - inline bool - operator<(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return __lhs.compare(__rhs) < 0; } - - - - - - - - template - inline bool - operator<(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return __rhs.compare(__lhs) > 0; } -# 6312 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return __lhs.compare(__rhs) > 0; } - - - - - - - - template - inline bool - operator>(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return __lhs.compare(__rhs) > 0; } - - - - - - - - template - inline bool - operator>(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return __rhs.compare(__lhs) < 0; } -# 6350 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return __lhs.compare(__rhs) <= 0; } - - - - - - - - template - inline bool - operator<=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return __lhs.compare(__rhs) <= 0; } - - - - - - - - template - inline bool - operator<=(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return __rhs.compare(__lhs) >= 0; } -# 6388 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline bool - operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept - { return __lhs.compare(__rhs) >= 0; } - - - - - - - - template - inline bool - operator>=(const basic_string<_CharT, _Traits, _Alloc>& __lhs, - const _CharT* __rhs) - { return __lhs.compare(__rhs) >= 0; } - - - - - - - - template - inline bool - operator>=(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { return __rhs.compare(__lhs) <= 0; } -# 6427 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline void - swap(basic_string<_CharT, _Traits, _Alloc>& __lhs, - basic_string<_CharT, _Traits, _Alloc>& __rhs) - noexcept(noexcept(__lhs.swap(__rhs))) - { __lhs.swap(__rhs); } -# 6447 "/usr/include/c++/10/bits/basic_string.h" 3 - template - basic_istream<_CharT, _Traits>& - operator>>(basic_istream<_CharT, _Traits>& __is, - basic_string<_CharT, _Traits, _Alloc>& __str); - - template<> - basic_istream& - operator>>(basic_istream& __is, basic_string& __str); -# 6465 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline basic_ostream<_CharT, _Traits>& - operator<<(basic_ostream<_CharT, _Traits>& __os, - const basic_string<_CharT, _Traits, _Alloc>& __str) - { - - - return __ostream_insert(__os, __str.data(), __str.size()); - } -# 6488 "/usr/include/c++/10/bits/basic_string.h" 3 - template - basic_istream<_CharT, _Traits>& - getline(basic_istream<_CharT, _Traits>& __is, - basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim); -# 6505 "/usr/include/c++/10/bits/basic_string.h" 3 - template - inline basic_istream<_CharT, _Traits>& - getline(basic_istream<_CharT, _Traits>& __is, - basic_string<_CharT, _Traits, _Alloc>& __str) - { return std::getline(__is, __str, __is.widen('\n')); } - - - - template - inline basic_istream<_CharT, _Traits>& - getline(basic_istream<_CharT, _Traits>&& __is, - basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) - { return std::getline(__is, __str, __delim); } - - - template - inline basic_istream<_CharT, _Traits>& - getline(basic_istream<_CharT, _Traits>&& __is, - basic_string<_CharT, _Traits, _Alloc>& __str) - { return std::getline(__is, __str); } - - - template<> - basic_istream& - getline(basic_istream& __in, basic_string& __str, - char __delim); - - - template<> - basic_istream& - getline(basic_istream& __in, basic_string& __str, - wchar_t __delim); - - - -} - - - -# 1 "/usr/include/c++/10/ext/string_conversions.h" 1 3 -# 32 "/usr/include/c++/10/ext/string_conversions.h" 3 - -# 33 "/usr/include/c++/10/ext/string_conversions.h" 3 -# 41 "/usr/include/c++/10/ext/string_conversions.h" 3 -# 1 "/usr/include/c++/10/cstdlib" 1 3 -# 39 "/usr/include/c++/10/cstdlib" 3 - -# 40 "/usr/include/c++/10/cstdlib" 3 -# 75 "/usr/include/c++/10/cstdlib" 3 -# 1 "/usr/include/stdlib.h" 1 3 4 -# 25 "/usr/include/stdlib.h" 3 4 -# 1 "/usr/include/bits/libc-header-start.h" 1 3 4 -# 26 "/usr/include/stdlib.h" 2 3 4 - - - - - -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 32 "/usr/include/stdlib.h" 2 3 4 - -extern "C" { - - - - - -# 1 "/usr/include/bits/waitflags.h" 1 3 4 -# 40 "/usr/include/stdlib.h" 2 3 4 -# 1 "/usr/include/bits/waitstatus.h" 1 3 4 -# 41 "/usr/include/stdlib.h" 2 3 4 -# 58 "/usr/include/stdlib.h" 3 4 -typedef struct - { - int quot; - int rem; - } div_t; - - - -typedef struct - { - long int quot; - long int rem; - } ldiv_t; - - - - - -__extension__ typedef struct - { - long long int quot; - long long int rem; - } lldiv_t; -# 97 "/usr/include/stdlib.h" 3 4 -extern size_t __ctype_get_mb_cur_max (void) throw () ; - - - -extern double atof (const char *__nptr) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; - -extern int atoi (const char *__nptr) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; - -extern long int atol (const char *__nptr) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; - - - -__extension__ extern long long int atoll (const char *__nptr) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; - - - -extern double strtod (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern float strtof (const char *__restrict __nptr, - char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1))); - -extern long double strtold (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); -# 140 "/usr/include/stdlib.h" 3 4 -extern _Float32 strtof32 (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern _Float64 strtof64 (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern _Float128 strtof128 (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern _Float32x strtof32x (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); - - - -extern _Float64x strtof64x (const char *__restrict __nptr, - char **__restrict __endptr) - throw () __attribute__ ((__nonnull__ (1))); -# 176 "/usr/include/stdlib.h" 3 4 -extern long int strtol (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - -extern unsigned long int strtoul (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - - - -__extension__ -extern long long int strtoq (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - -__extension__ -extern unsigned long long int strtouq (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - - - - -__extension__ -extern long long int strtoll (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - -__extension__ -extern unsigned long long int strtoull (const char *__restrict __nptr, - char **__restrict __endptr, int __base) - throw () __attribute__ ((__nonnull__ (1))); - - - - -extern int strfromd (char *__dest, size_t __size, const char *__format, - double __f) - throw () __attribute__ ((__nonnull__ (3))); - -extern int strfromf (char *__dest, size_t __size, const char *__format, - float __f) - throw () __attribute__ ((__nonnull__ (3))); - -extern int strfroml (char *__dest, size_t __size, const char *__format, - long double __f) - throw () __attribute__ ((__nonnull__ (3))); -# 232 "/usr/include/stdlib.h" 3 4 -extern int strfromf32 (char *__dest, size_t __size, const char * __format, - _Float32 __f) - throw () __attribute__ ((__nonnull__ (3))); - - - -extern int strfromf64 (char *__dest, size_t __size, const char * __format, - _Float64 __f) - throw () __attribute__ ((__nonnull__ (3))); - - - -extern int strfromf128 (char *__dest, size_t __size, const char * __format, - _Float128 __f) - throw () __attribute__ ((__nonnull__ (3))); - - - -extern int strfromf32x (char *__dest, size_t __size, const char * __format, - _Float32x __f) - throw () __attribute__ ((__nonnull__ (3))); - - - -extern int strfromf64x (char *__dest, size_t __size, const char * __format, - _Float64x __f) - throw () __attribute__ ((__nonnull__ (3))); -# 274 "/usr/include/stdlib.h" 3 4 -extern long int strtol_l (const char *__restrict __nptr, - char **__restrict __endptr, int __base, - locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4))); - -extern unsigned long int strtoul_l (const char *__restrict __nptr, - char **__restrict __endptr, - int __base, locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 4))); - -__extension__ -extern long long int strtoll_l (const char *__restrict __nptr, - char **__restrict __endptr, int __base, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 4))); - -__extension__ -extern unsigned long long int strtoull_l (const char *__restrict __nptr, - char **__restrict __endptr, - int __base, locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 4))); - -extern double strtod_l (const char *__restrict __nptr, - char **__restrict __endptr, locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - -extern float strtof_l (const char *__restrict __nptr, - char **__restrict __endptr, locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - -extern long double strtold_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); -# 316 "/usr/include/stdlib.h" 3 4 -extern _Float32 strtof32_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern _Float64 strtof64_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern _Float128 strtof128_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern _Float32x strtof32x_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); - - - -extern _Float64x strtof64x_l (const char *__restrict __nptr, - char **__restrict __endptr, - locale_t __loc) - throw () __attribute__ ((__nonnull__ (1, 3))); -# 385 "/usr/include/stdlib.h" 3 4 -extern char *l64a (long int __n) throw () ; - - -extern long int a64l (const char *__s) - throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; - - - - -# 1 "/usr/include/sys/types.h" 1 3 4 -# 27 "/usr/include/sys/types.h" 3 4 -extern "C" { - - - - - -typedef __u_char u_char; -typedef __u_short u_short; -typedef __u_int u_int; -typedef __u_long u_long; -typedef __quad_t quad_t; -typedef __u_quad_t u_quad_t; -typedef __fsid_t fsid_t; - - -typedef __loff_t loff_t; - - - - -typedef __ino_t ino_t; - - - - - - -typedef __ino64_t ino64_t; - - - - -typedef __dev_t dev_t; - - - - -typedef __gid_t gid_t; - - - - -typedef __mode_t mode_t; - - - - -typedef __nlink_t nlink_t; - - - - -typedef __uid_t uid_t; - - - - - -typedef __off_t off_t; - - - - - - -typedef __off64_t off64_t; -# 103 "/usr/include/sys/types.h" 3 4 -typedef __id_t id_t; - - - - -typedef __ssize_t ssize_t; - - - - - -typedef __daddr_t daddr_t; -typedef __caddr_t caddr_t; - - - - - -typedef __key_t key_t; -# 134 "/usr/include/sys/types.h" 3 4 -typedef __useconds_t useconds_t; - - - -typedef __suseconds_t suseconds_t; - - - - - -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 145 "/usr/include/sys/types.h" 2 3 4 - - - -typedef unsigned long int ulong; -typedef unsigned short int ushort; -typedef unsigned int uint; - - - - - - - -typedef __uint8_t u_int8_t; -typedef __uint16_t u_int16_t; -typedef __uint32_t u_int32_t; -typedef __uint64_t u_int64_t; - - -typedef int register_t __attribute__ ((__mode__ (__word__))); -# 176 "/usr/include/sys/types.h" 3 4 -# 1 "/usr/include/endian.h" 1 3 4 -# 35 "/usr/include/endian.h" 3 4 -# 1 "/usr/include/bits/byteswap.h" 1 3 4 -# 33 "/usr/include/bits/byteswap.h" 3 4 -static __inline __uint16_t -__bswap_16 (__uint16_t __bsx) -{ - - return __builtin_bswap16 (__bsx); - - - -} - - - - - - -static __inline __uint32_t -__bswap_32 (__uint32_t __bsx) -{ - - return __builtin_bswap32 (__bsx); - - - -} -# 69 "/usr/include/bits/byteswap.h" 3 4 -__extension__ static __inline __uint64_t -__bswap_64 (__uint64_t __bsx) -{ - - return __builtin_bswap64 (__bsx); - - - -} -# 36 "/usr/include/endian.h" 2 3 4 -# 1 "/usr/include/bits/uintn-identity.h" 1 3 4 -# 32 "/usr/include/bits/uintn-identity.h" 3 4 -static __inline __uint16_t -__uint16_identity (__uint16_t __x) -{ - return __x; -} - -static __inline __uint32_t -__uint32_identity (__uint32_t __x) -{ - return __x; -} - -static __inline __uint64_t -__uint64_identity (__uint64_t __x) -{ - return __x; -} -# 37 "/usr/include/endian.h" 2 3 4 -# 177 "/usr/include/sys/types.h" 2 3 4 - - -# 1 "/usr/include/sys/select.h" 1 3 4 -# 30 "/usr/include/sys/select.h" 3 4 -# 1 "/usr/include/bits/select.h" 1 3 4 -# 31 "/usr/include/sys/select.h" 2 3 4 - - -# 1 "/usr/include/bits/types/sigset_t.h" 1 3 4 - - - - - - -typedef __sigset_t sigset_t; -# 34 "/usr/include/sys/select.h" 2 3 4 -# 49 "/usr/include/sys/select.h" 3 4 -typedef long int __fd_mask; -# 59 "/usr/include/sys/select.h" 3 4 -typedef struct - { - - - - __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; - - - - - - } fd_set; - - - - - - -typedef __fd_mask fd_mask; -# 91 "/usr/include/sys/select.h" 3 4 -extern "C" { -# 101 "/usr/include/sys/select.h" 3 4 -extern int select (int __nfds, fd_set *__restrict __readfds, - fd_set *__restrict __writefds, - fd_set *__restrict __exceptfds, - struct timeval *__restrict __timeout); -# 113 "/usr/include/sys/select.h" 3 4 -extern int pselect (int __nfds, fd_set *__restrict __readfds, - fd_set *__restrict __writefds, - fd_set *__restrict __exceptfds, - const struct timespec *__restrict __timeout, - const __sigset_t *__restrict __sigmask); -# 126 "/usr/include/sys/select.h" 3 4 -} -# 180 "/usr/include/sys/types.h" 2 3 4 - - - - - -typedef __blksize_t blksize_t; - - - - - - -typedef __blkcnt_t blkcnt_t; - - - -typedef __fsblkcnt_t fsblkcnt_t; - - - -typedef __fsfilcnt_t fsfilcnt_t; -# 219 "/usr/include/sys/types.h" 3 4 -typedef __blkcnt64_t blkcnt64_t; -typedef __fsblkcnt64_t fsblkcnt64_t; -typedef __fsfilcnt64_t fsfilcnt64_t; -# 230 "/usr/include/sys/types.h" 3 4 -} -# 395 "/usr/include/stdlib.h" 2 3 4 - - - - - - -extern long int random (void) throw (); - - -extern void srandom (unsigned int __seed) throw (); - - - - - -extern char *initstate (unsigned int __seed, char *__statebuf, - size_t __statelen) throw () __attribute__ ((__nonnull__ (2))); - - - -extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1))); - - - - - - - -struct random_data - { - int32_t *fptr; - int32_t *rptr; - int32_t *state; - int rand_type; - int rand_deg; - int rand_sep; - int32_t *end_ptr; - }; - -extern int random_r (struct random_data *__restrict __buf, - int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); - -extern int srandom_r (unsigned int __seed, struct random_data *__buf) - throw () __attribute__ ((__nonnull__ (2))); - -extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, - size_t __statelen, - struct random_data *__restrict __buf) - throw () __attribute__ ((__nonnull__ (2, 4))); - -extern int setstate_r (char *__restrict __statebuf, - struct random_data *__restrict __buf) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - - - -extern int rand (void) throw (); - -extern void srand (unsigned int __seed) throw (); - - - -extern int rand_r (unsigned int *__seed) throw (); - - - - - - - -extern double drand48 (void) throw (); -extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1))); - - -extern long int lrand48 (void) throw (); -extern long int nrand48 (unsigned short int __xsubi[3]) - throw () __attribute__ ((__nonnull__ (1))); - - -extern long int mrand48 (void) throw (); -extern long int jrand48 (unsigned short int __xsubi[3]) - throw () __attribute__ ((__nonnull__ (1))); - - -extern void srand48 (long int __seedval) throw (); -extern unsigned short int *seed48 (unsigned short int __seed16v[3]) - throw () __attribute__ ((__nonnull__ (1))); -extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1))); - - - - - -struct drand48_data - { - unsigned short int __x[3]; - unsigned short int __old_x[3]; - unsigned short int __c; - unsigned short int __init; - __extension__ unsigned long long int __a; - - }; - - -extern int drand48_r (struct drand48_data *__restrict __buffer, - double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); -extern int erand48_r (unsigned short int __xsubi[3], - struct drand48_data *__restrict __buffer, - double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int lrand48_r (struct drand48_data *__restrict __buffer, - long int *__restrict __result) - throw () __attribute__ ((__nonnull__ (1, 2))); -extern int nrand48_r (unsigned short int __xsubi[3], - struct drand48_data *__restrict __buffer, - long int *__restrict __result) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int mrand48_r (struct drand48_data *__restrict __buffer, - long int *__restrict __result) - throw () __attribute__ ((__nonnull__ (1, 2))); -extern int jrand48_r (unsigned short int __xsubi[3], - struct drand48_data *__restrict __buffer, - long int *__restrict __result) - throw () __attribute__ ((__nonnull__ (1, 2))); - - -extern int srand48_r (long int __seedval, struct drand48_data *__buffer) - throw () __attribute__ ((__nonnull__ (2))); - -extern int seed48_r (unsigned short int __seed16v[3], - struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2))); - -extern int lcong48_r (unsigned short int __param[7], - struct drand48_data *__buffer) - throw () __attribute__ ((__nonnull__ (1, 2))); - - - - -extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) - __attribute__ ((__alloc_size__ (1))) ; - -extern void *calloc (size_t __nmemb, size_t __size) - throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (1, 2))) ; - - - - - - -extern void *realloc (void *__ptr, size_t __size) - throw () __attribute__ ((__warn_unused_result__)) __attribute__ ((__alloc_size__ (2))); - - - - - - - -extern void *reallocarray (void *__ptr, size_t __nmemb, size_t __size) - throw () __attribute__ ((__warn_unused_result__)) - __attribute__ ((__alloc_size__ (2, 3))); - - - -extern void free (void *__ptr) throw (); - - -# 1 "/usr/include/alloca.h" 1 3 4 -# 24 "/usr/include/alloca.h" 3 4 -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 25 "/usr/include/alloca.h" 2 3 4 - -extern "C" { - - - - - -extern void *alloca (size_t __size) throw (); - - - - - -} -# 569 "/usr/include/stdlib.h" 2 3 4 - - - - - -extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) - __attribute__ ((__alloc_size__ (1))) ; - - - - -extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) - throw () __attribute__ ((__nonnull__ (1))) ; - - - - -extern void *aligned_alloc (size_t __alignment, size_t __size) - throw () __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) ; - - - -extern void abort (void) throw () __attribute__ ((__noreturn__)); - - - -extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1))); - - - - -extern "C++" int at_quick_exit (void (*__func) (void)) - throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1))); -# 610 "/usr/include/stdlib.h" 3 4 -extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) - throw () __attribute__ ((__nonnull__ (1))); - - - - - -extern void exit (int __status) throw () __attribute__ ((__noreturn__)); - - - - - -extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__)); - - - - - -extern void _Exit (int __status) throw () __attribute__ ((__noreturn__)); - - - - -extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ; - - - - -extern char *secure_getenv (const char *__name) - throw () __attribute__ ((__nonnull__ (1))) ; - - - - - - -extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1))); - - - - - -extern int setenv (const char *__name, const char *__value, int __replace) - throw () __attribute__ ((__nonnull__ (2))); - - -extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))); - - - - - - -extern int clearenv (void) throw (); -# 675 "/usr/include/stdlib.h" 3 4 -extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1))); -# 688 "/usr/include/stdlib.h" 3 4 -extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; -# 698 "/usr/include/stdlib.h" 3 4 -extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ; -# 710 "/usr/include/stdlib.h" 3 4 -extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; -# 720 "/usr/include/stdlib.h" 3 4 -extern int mkstemps64 (char *__template, int __suffixlen) - __attribute__ ((__nonnull__ (1))) ; -# 731 "/usr/include/stdlib.h" 3 4 -extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ; -# 742 "/usr/include/stdlib.h" 3 4 -extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; -# 752 "/usr/include/stdlib.h" 3 4 -extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ; -# 762 "/usr/include/stdlib.h" 3 4 -extern int mkostemps (char *__template, int __suffixlen, int __flags) - __attribute__ ((__nonnull__ (1))) ; -# 774 "/usr/include/stdlib.h" 3 4 -extern int mkostemps64 (char *__template, int __suffixlen, int __flags) - __attribute__ ((__nonnull__ (1))) ; -# 784 "/usr/include/stdlib.h" 3 4 -extern int system (const char *__command) ; - - - - - -extern char *canonicalize_file_name (const char *__name) - throw () __attribute__ ((__nonnull__ (1))) ; -# 800 "/usr/include/stdlib.h" 3 4 -extern char *realpath (const char *__restrict __name, - char *__restrict __resolved) throw () ; - - - - - - -typedef int (*__compar_fn_t) (const void *, const void *); - - -typedef __compar_fn_t comparison_fn_t; - - - -typedef int (*__compar_d_fn_t) (const void *, const void *, void *); - - - - -extern void *bsearch (const void *__key, const void *__base, - size_t __nmemb, size_t __size, __compar_fn_t __compar) - __attribute__ ((__nonnull__ (1, 2, 5))) ; - - - - - - - -extern void qsort (void *__base, size_t __nmemb, size_t __size, - __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); - -extern void qsort_r (void *__base, size_t __nmemb, size_t __size, - __compar_d_fn_t __compar, void *__arg) - __attribute__ ((__nonnull__ (1, 4))); - - - - -extern int abs (int __x) throw () __attribute__ ((__const__)) ; -extern long int labs (long int __x) throw () __attribute__ ((__const__)) ; - - -__extension__ extern long long int llabs (long long int __x) - throw () __attribute__ ((__const__)) ; - - - - - - -extern div_t div (int __numer, int __denom) - throw () __attribute__ ((__const__)) ; -extern ldiv_t ldiv (long int __numer, long int __denom) - throw () __attribute__ ((__const__)) ; - - -__extension__ extern lldiv_t lldiv (long long int __numer, - long long int __denom) - throw () __attribute__ ((__const__)) ; -# 872 "/usr/include/stdlib.h" 3 4 -extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, - int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; - - - - -extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, - int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ; - - - - -extern char *gcvt (double __value, int __ndigit, char *__buf) - throw () __attribute__ ((__nonnull__ (3))) ; - - - - -extern char *qecvt (long double __value, int __ndigit, - int *__restrict __decpt, int *__restrict __sign) - throw () __attribute__ ((__nonnull__ (3, 4))) ; -extern char *qfcvt (long double __value, int __ndigit, - int *__restrict __decpt, int *__restrict __sign) - throw () __attribute__ ((__nonnull__ (3, 4))) ; -extern char *qgcvt (long double __value, int __ndigit, char *__buf) - throw () __attribute__ ((__nonnull__ (3))) ; - - - - -extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, - int *__restrict __sign, char *__restrict __buf, - size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); -extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, - int *__restrict __sign, char *__restrict __buf, - size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5))); - -extern int qecvt_r (long double __value, int __ndigit, - int *__restrict __decpt, int *__restrict __sign, - char *__restrict __buf, size_t __len) - throw () __attribute__ ((__nonnull__ (3, 4, 5))); -extern int qfcvt_r (long double __value, int __ndigit, - int *__restrict __decpt, int *__restrict __sign, - char *__restrict __buf, size_t __len) - throw () __attribute__ ((__nonnull__ (3, 4, 5))); - - - - - -extern int mblen (const char *__s, size_t __n) throw (); - - -extern int mbtowc (wchar_t *__restrict __pwc, - const char *__restrict __s, size_t __n) throw (); - - -extern int wctomb (char *__s, wchar_t __wchar) throw (); - - - -extern size_t mbstowcs (wchar_t *__restrict __pwcs, - const char *__restrict __s, size_t __n) throw () - __attribute__ ((__access__ (__read_only__, 2))); - -extern size_t wcstombs (char *__restrict __s, - const wchar_t *__restrict __pwcs, size_t __n) - throw () - __attribute__ ((__access__ (__write_only__, 1, 3))) __attribute__ ((__access__ (__read_only__, 2))); - - - - - - -extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ; -# 958 "/usr/include/stdlib.h" 3 4 -extern int getsubopt (char **__restrict __optionp, - char *const *__restrict __tokens, - char **__restrict __valuep) - throw () __attribute__ ((__nonnull__ (1, 2, 3))) ; - - - - - - - -extern int posix_openpt (int __oflag) ; - - - - - - - -extern int grantpt (int __fd) throw (); - - - -extern int unlockpt (int __fd) throw (); - - - - -extern char *ptsname (int __fd) throw () ; - - - - - - -extern int ptsname_r (int __fd, char *__buf, size_t __buflen) - throw () __attribute__ ((__nonnull__ (2))) __attribute__ ((__access__ (__write_only__, 2, 3))); - - -extern int getpt (void); - - - - - - -extern int getloadavg (double __loadavg[], int __nelem) - throw () __attribute__ ((__nonnull__ (1))); -# 1014 "/usr/include/stdlib.h" 3 4 -# 1 "/usr/include/bits/stdlib-float.h" 1 3 4 -# 1015 "/usr/include/stdlib.h" 2 3 4 -# 1026 "/usr/include/stdlib.h" 3 4 -} -# 76 "/usr/include/c++/10/cstdlib" 2 3 - -# 1 "/usr/include/c++/10/bits/std_abs.h" 1 3 -# 33 "/usr/include/c++/10/bits/std_abs.h" 3 - -# 34 "/usr/include/c++/10/bits/std_abs.h" 3 -# 46 "/usr/include/c++/10/bits/std_abs.h" 3 -extern "C++" -{ -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - using ::abs; - - - inline long - abs(long __i) { return __builtin_labs(__i); } - - - - inline long long - abs(long long __x) { return __builtin_llabs (__x); } -# 70 "/usr/include/c++/10/bits/std_abs.h" 3 - inline constexpr double - abs(double __x) - { return __builtin_fabs(__x); } - - inline constexpr float - abs(float __x) - { return __builtin_fabsf(__x); } - - inline constexpr long double - abs(long double __x) - { return __builtin_fabsl(__x); } - - - - inline constexpr __int128 - abs(__int128 __x) { return __x >= 0 ? __x : -__x; } -# 101 "/usr/include/c++/10/bits/std_abs.h" 3 - inline constexpr - __float128 - abs(__float128 __x) - { return __x < 0 ? -__x : __x; } - - - -} -} -# 78 "/usr/include/c++/10/cstdlib" 2 3 -# 121 "/usr/include/c++/10/cstdlib" 3 -extern "C++" -{ -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - using ::div_t; - using ::ldiv_t; - - using ::abort; - - - - using ::atexit; - - - using ::at_quick_exit; - - - using ::atof; - using ::atoi; - using ::atol; - using ::bsearch; - using ::calloc; - using ::div; - using ::exit; - using ::free; - using ::getenv; - using ::labs; - using ::ldiv; - using ::malloc; - - using ::mblen; - using ::mbstowcs; - using ::mbtowc; - - using ::qsort; - - - using ::quick_exit; - - - using ::rand; - using ::realloc; - using ::srand; - using ::strtod; - using ::strtol; - using ::strtoul; - using ::system; - - using ::wcstombs; - using ::wctomb; - - - - inline ldiv_t - div(long __i, long __j) { return ldiv(__i, __j); } - - - - -} -# 195 "/usr/include/c++/10/cstdlib" 3 -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - using ::lldiv_t; - - - - - - using ::_Exit; - - - - using ::llabs; - - inline lldiv_t - div(long long __n, long long __d) - { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; } - - using ::lldiv; -# 227 "/usr/include/c++/10/cstdlib" 3 - using ::atoll; - using ::strtoll; - using ::strtoull; - - using ::strtof; - using ::strtold; - - -} - -namespace std -{ - - using ::__gnu_cxx::lldiv_t; - - using ::__gnu_cxx::_Exit; - - using ::__gnu_cxx::llabs; - using ::__gnu_cxx::div; - using ::__gnu_cxx::lldiv; - - using ::__gnu_cxx::atoll; - using ::__gnu_cxx::strtof; - using ::__gnu_cxx::strtoll; - using ::__gnu_cxx::strtoull; - using ::__gnu_cxx::strtold; -} - - - -} -# 42 "/usr/include/c++/10/ext/string_conversions.h" 2 3 -# 1 "/usr/include/c++/10/cwchar" 1 3 -# 39 "/usr/include/c++/10/cwchar" 3 - -# 40 "/usr/include/c++/10/cwchar" 3 -# 43 "/usr/include/c++/10/ext/string_conversions.h" 2 3 -# 1 "/usr/include/c++/10/cstdio" 1 3 -# 39 "/usr/include/c++/10/cstdio" 3 - -# 40 "/usr/include/c++/10/cstdio" 3 - - -# 1 "/usr/include/stdio.h" 1 3 4 -# 27 "/usr/include/stdio.h" 3 4 -# 1 "/usr/include/bits/libc-header-start.h" 1 3 4 -# 28 "/usr/include/stdio.h" 2 3 4 - -extern "C" { - - - -# 1 "/usr/lib/gcc/x86_64-redhat-linux/10/include/stddef.h" 1 3 4 -# 34 "/usr/include/stdio.h" 2 3 4 - - - - - -# 1 "/usr/include/bits/types/__fpos_t.h" 1 3 4 -# 10 "/usr/include/bits/types/__fpos_t.h" 3 4 -typedef struct _G_fpos_t -{ - __off_t __pos; - __mbstate_t __state; -} __fpos_t; -# 40 "/usr/include/stdio.h" 2 3 4 -# 1 "/usr/include/bits/types/__fpos64_t.h" 1 3 4 -# 10 "/usr/include/bits/types/__fpos64_t.h" 3 4 -typedef struct _G_fpos64_t -{ - __off64_t __pos; - __mbstate_t __state; -} __fpos64_t; -# 41 "/usr/include/stdio.h" 2 3 4 - - -# 1 "/usr/include/bits/types/struct_FILE.h" 1 3 4 -# 35 "/usr/include/bits/types/struct_FILE.h" 3 4 -struct _IO_FILE; -struct _IO_marker; -struct _IO_codecvt; -struct _IO_wide_data; - - - - -typedef void _IO_lock_t; - - - - - -struct _IO_FILE -{ - int _flags; - - - char *_IO_read_ptr; - char *_IO_read_end; - char *_IO_read_base; - char *_IO_write_base; - char *_IO_write_ptr; - char *_IO_write_end; - char *_IO_buf_base; - char *_IO_buf_end; - - - char *_IO_save_base; - char *_IO_backup_base; - char *_IO_save_end; - - struct _IO_marker *_markers; - - struct _IO_FILE *_chain; - - int _fileno; - int _flags2; - __off_t _old_offset; - - - unsigned short _cur_column; - signed char _vtable_offset; - char _shortbuf[1]; - - _IO_lock_t *_lock; - - - - - - - - __off64_t _offset; - - struct _IO_codecvt *_codecvt; - struct _IO_wide_data *_wide_data; - struct _IO_FILE *_freeres_list; - void *_freeres_buf; - size_t __pad5; - int _mode; - - char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; -}; -# 44 "/usr/include/stdio.h" 2 3 4 - - -# 1 "/usr/include/bits/types/cookie_io_functions_t.h" 1 3 4 -# 27 "/usr/include/bits/types/cookie_io_functions_t.h" 3 4 -typedef __ssize_t cookie_read_function_t (void *__cookie, char *__buf, - size_t __nbytes); - - - - - - - -typedef __ssize_t cookie_write_function_t (void *__cookie, const char *__buf, - size_t __nbytes); - - - - - - - -typedef int cookie_seek_function_t (void *__cookie, __off64_t *__pos, int __w); - - -typedef int cookie_close_function_t (void *__cookie); - - - - - - -typedef struct _IO_cookie_io_functions_t -{ - cookie_read_function_t *read; - cookie_write_function_t *write; - cookie_seek_function_t *seek; - cookie_close_function_t *close; -} cookie_io_functions_t; -# 47 "/usr/include/stdio.h" 2 3 4 -# 84 "/usr/include/stdio.h" 3 4 -typedef __fpos_t fpos_t; - - - - -typedef __fpos64_t fpos64_t; -# 133 "/usr/include/stdio.h" 3 4 -# 1 "/usr/include/bits/stdio_lim.h" 1 3 4 -# 134 "/usr/include/stdio.h" 2 3 4 - - - -extern FILE *stdin; -extern FILE *stdout; -extern FILE *stderr; - - - - - - -extern int remove (const char *__filename) throw (); - -extern int rename (const char *__old, const char *__new) throw (); - - - -extern int renameat (int __oldfd, const char *__old, int __newfd, - const char *__new) throw (); -# 164 "/usr/include/stdio.h" 3 4 -extern int renameat2 (int __oldfd, const char *__old, int __newfd, - const char *__new, unsigned int __flags) throw (); - - - - - - - -extern FILE *tmpfile (void) ; -# 183 "/usr/include/stdio.h" 3 4 -extern FILE *tmpfile64 (void) ; - - - -extern char *tmpnam (char *__s) throw () ; - - - - -extern char *tmpnam_r (char *__s) throw () ; -# 204 "/usr/include/stdio.h" 3 4 -extern char *tempnam (const char *__dir, const char *__pfx) - throw () __attribute__ ((__malloc__)) ; - - - - - - - -extern int fclose (FILE *__stream); - - - - -extern int fflush (FILE *__stream); -# 227 "/usr/include/stdio.h" 3 4 -extern int fflush_unlocked (FILE *__stream); -# 237 "/usr/include/stdio.h" 3 4 -extern int fcloseall (void); -# 246 "/usr/include/stdio.h" 3 4 -extern FILE *fopen (const char *__restrict __filename, - const char *__restrict __modes) ; - - - - -extern FILE *freopen (const char *__restrict __filename, - const char *__restrict __modes, - FILE *__restrict __stream) ; -# 270 "/usr/include/stdio.h" 3 4 -extern FILE *fopen64 (const char *__restrict __filename, - const char *__restrict __modes) ; -extern FILE *freopen64 (const char *__restrict __filename, - const char *__restrict __modes, - FILE *__restrict __stream) ; - - - - -extern FILE *fdopen (int __fd, const char *__modes) throw () ; - - - - - -extern FILE *fopencookie (void *__restrict __magic_cookie, - const char *__restrict __modes, - cookie_io_functions_t __io_funcs) throw () ; - - - - -extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) - throw () ; - - - - -extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ; - - - - - -extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw (); - - - -extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, - int __modes, size_t __n) throw (); - - - - -extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, - size_t __size) throw (); - - -extern void setlinebuf (FILE *__stream) throw (); - - - - - - - -extern int fprintf (FILE *__restrict __stream, - const char *__restrict __format, ...); - - - - -extern int printf (const char *__restrict __format, ...); - -extern int sprintf (char *__restrict __s, - const char *__restrict __format, ...) throw (); - - - - - -extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, - __gnuc_va_list __arg); - - - - -extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); - -extern int vsprintf (char *__restrict __s, const char *__restrict __format, - __gnuc_va_list __arg) throw (); - - - -extern int snprintf (char *__restrict __s, size_t __maxlen, - const char *__restrict __format, ...) - throw () __attribute__ ((__format__ (__printf__, 3, 4))); - -extern int vsnprintf (char *__restrict __s, size_t __maxlen, - const char *__restrict __format, __gnuc_va_list __arg) - throw () __attribute__ ((__format__ (__printf__, 3, 0))); - - - - - -extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, - __gnuc_va_list __arg) - throw () __attribute__ ((__format__ (__printf__, 2, 0))) ; -extern int __asprintf (char **__restrict __ptr, - const char *__restrict __fmt, ...) - throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; -extern int asprintf (char **__restrict __ptr, - const char *__restrict __fmt, ...) - throw () __attribute__ ((__format__ (__printf__, 2, 3))) ; - - - - -extern int vdprintf (int __fd, const char *__restrict __fmt, - __gnuc_va_list __arg) - __attribute__ ((__format__ (__printf__, 2, 0))); -extern int dprintf (int __fd, const char *__restrict __fmt, ...) - __attribute__ ((__format__ (__printf__, 2, 3))); - - - - - - - -extern int fscanf (FILE *__restrict __stream, - const char *__restrict __format, ...) ; - - - - -extern int scanf (const char *__restrict __format, ...) ; - -extern int sscanf (const char *__restrict __s, - const char *__restrict __format, ...) throw (); -# 410 "/usr/include/stdio.h" 3 4 -extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf") - - ; -extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf") - ; -extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) throw () __asm__ ("" "__isoc99_sscanf") - - ; -# 435 "/usr/include/stdio.h" 3 4 -extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, - __gnuc_va_list __arg) - __attribute__ ((__format__ (__scanf__, 2, 0))) ; - - - - - -extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) - __attribute__ ((__format__ (__scanf__, 1, 0))) ; - - -extern int vsscanf (const char *__restrict __s, - const char *__restrict __format, __gnuc_va_list __arg) - throw () __attribute__ ((__format__ (__scanf__, 2, 0))); - - - - - -extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf") - - - - __attribute__ ((__format__ (__scanf__, 2, 0))) ; -extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf") - - __attribute__ ((__format__ (__scanf__, 1, 0))) ; -extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) throw () __asm__ ("" "__isoc99_vsscanf") - - - - __attribute__ ((__format__ (__scanf__, 2, 0))); -# 489 "/usr/include/stdio.h" 3 4 -extern int fgetc (FILE *__stream); -extern int getc (FILE *__stream); - - - - - -extern int getchar (void); - - - - - - -extern int getc_unlocked (FILE *__stream); -extern int getchar_unlocked (void); -# 514 "/usr/include/stdio.h" 3 4 -extern int fgetc_unlocked (FILE *__stream); -# 525 "/usr/include/stdio.h" 3 4 -extern int fputc (int __c, FILE *__stream); -extern int putc (int __c, FILE *__stream); - - - - - -extern int putchar (int __c); -# 541 "/usr/include/stdio.h" 3 4 -extern int fputc_unlocked (int __c, FILE *__stream); - - - - - - - -extern int putc_unlocked (int __c, FILE *__stream); -extern int putchar_unlocked (int __c); - - - - - - -extern int getw (FILE *__stream); - - -extern int putw (int __w, FILE *__stream); - - - - - - - -extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) - __attribute__ ((__access__ (__write_only__, 1, 2))); -# 591 "/usr/include/stdio.h" 3 4 -extern char *fgets_unlocked (char *__restrict __s, int __n, - FILE *__restrict __stream) - __attribute__ ((__access__ (__write_only__, 1, 2))); -# 608 "/usr/include/stdio.h" 3 4 -extern __ssize_t __getdelim (char **__restrict __lineptr, - size_t *__restrict __n, int __delimiter, - FILE *__restrict __stream) ; -extern __ssize_t getdelim (char **__restrict __lineptr, - size_t *__restrict __n, int __delimiter, - FILE *__restrict __stream) ; - - - - - - - -extern __ssize_t getline (char **__restrict __lineptr, - size_t *__restrict __n, - FILE *__restrict __stream) ; - - - - - - - -extern int fputs (const char *__restrict __s, FILE *__restrict __stream); - - - - - -extern int puts (const char *__s); - - - - - - -extern int ungetc (int __c, FILE *__stream); - - - - - - -extern size_t fread (void *__restrict __ptr, size_t __size, - size_t __n, FILE *__restrict __stream) ; - - - - -extern size_t fwrite (const void *__restrict __ptr, size_t __size, - size_t __n, FILE *__restrict __s); -# 667 "/usr/include/stdio.h" 3 4 -extern int fputs_unlocked (const char *__restrict __s, - FILE *__restrict __stream); -# 678 "/usr/include/stdio.h" 3 4 -extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, - size_t __n, FILE *__restrict __stream) ; -extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, - size_t __n, FILE *__restrict __stream); - - - - - - - -extern int fseek (FILE *__stream, long int __off, int __whence); - - - - -extern long int ftell (FILE *__stream) ; - - - - -extern void rewind (FILE *__stream); -# 712 "/usr/include/stdio.h" 3 4 -extern int fseeko (FILE *__stream, __off_t __off, int __whence); - - - - -extern __off_t ftello (FILE *__stream) ; -# 736 "/usr/include/stdio.h" 3 4 -extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); - - - - -extern int fsetpos (FILE *__stream, const fpos_t *__pos); -# 755 "/usr/include/stdio.h" 3 4 -extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); -extern __off64_t ftello64 (FILE *__stream) ; -extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); -extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); - - - -extern void clearerr (FILE *__stream) throw (); - -extern int feof (FILE *__stream) throw () ; - -extern int ferror (FILE *__stream) throw () ; - - - -extern void clearerr_unlocked (FILE *__stream) throw (); -extern int feof_unlocked (FILE *__stream) throw () ; -extern int ferror_unlocked (FILE *__stream) throw () ; - - - - - - - -extern void perror (const char *__s); - - - - -extern int fileno (FILE *__stream) throw () ; - - - - -extern int fileno_unlocked (FILE *__stream) throw () ; -# 799 "/usr/include/stdio.h" 3 4 -extern FILE *popen (const char *__command, const char *__modes) ; - - - - - -extern int pclose (FILE *__stream); - - - - - -extern char *ctermid (char *__s) throw (); - - - - - -extern char *cuserid (char *__s); - - - - -struct obstack; - - -extern int obstack_printf (struct obstack *__restrict __obstack, - const char *__restrict __format, ...) - throw () __attribute__ ((__format__ (__printf__, 2, 3))); -extern int obstack_vprintf (struct obstack *__restrict __obstack, - const char *__restrict __format, - __gnuc_va_list __args) - throw () __attribute__ ((__format__ (__printf__, 2, 0))); - - - - - - - -extern void flockfile (FILE *__stream) throw (); - - - -extern int ftrylockfile (FILE *__stream) throw () ; - - -extern void funlockfile (FILE *__stream) throw (); -# 857 "/usr/include/stdio.h" 3 4 -extern int __uflow (FILE *); -extern int __overflow (FILE *, int); -# 874 "/usr/include/stdio.h" 3 4 -} -# 43 "/usr/include/c++/10/cstdio" 2 3 -# 96 "/usr/include/c++/10/cstdio" 3 -namespace std -{ - using ::FILE; - using ::fpos_t; - - using ::clearerr; - using ::fclose; - using ::feof; - using ::ferror; - using ::fflush; - using ::fgetc; - using ::fgetpos; - using ::fgets; - using ::fopen; - using ::fprintf; - using ::fputc; - using ::fputs; - using ::fread; - using ::freopen; - using ::fscanf; - using ::fseek; - using ::fsetpos; - using ::ftell; - using ::fwrite; - using ::getc; - using ::getchar; - - - - - using ::perror; - using ::printf; - using ::putc; - using ::putchar; - using ::puts; - using ::remove; - using ::rename; - using ::rewind; - using ::scanf; - using ::setbuf; - using ::setvbuf; - using ::sprintf; - using ::sscanf; - using ::tmpfile; - - using ::tmpnam; - - using ::ungetc; - using ::vfprintf; - using ::vprintf; - using ::vsprintf; -} -# 157 "/usr/include/c++/10/cstdio" 3 -namespace __gnu_cxx -{ -# 175 "/usr/include/c++/10/cstdio" 3 - using ::snprintf; - using ::vfscanf; - using ::vscanf; - using ::vsnprintf; - using ::vsscanf; - -} - -namespace std -{ - using ::__gnu_cxx::snprintf; - using ::__gnu_cxx::vfscanf; - using ::__gnu_cxx::vscanf; - using ::__gnu_cxx::vsnprintf; - using ::__gnu_cxx::vsscanf; -} -# 44 "/usr/include/c++/10/ext/string_conversions.h" 2 3 -# 1 "/usr/include/c++/10/cerrno" 1 3 -# 39 "/usr/include/c++/10/cerrno" 3 - -# 40 "/usr/include/c++/10/cerrno" 3 - - -# 1 "/usr/include/errno.h" 1 3 4 -# 28 "/usr/include/errno.h" 3 4 -# 1 "/usr/include/bits/errno.h" 1 3 4 -# 26 "/usr/include/bits/errno.h" 3 4 -# 1 "/usr/include/linux/errno.h" 1 3 4 -# 1 "/usr/include/asm/errno.h" 1 3 4 -# 1 "/usr/include/asm-generic/errno.h" 1 3 4 - - - - -# 1 "/usr/include/asm-generic/errno-base.h" 1 3 4 -# 6 "/usr/include/asm-generic/errno.h" 2 3 4 -# 2 "/usr/include/asm/errno.h" 2 3 4 -# 2 "/usr/include/linux/errno.h" 2 3 4 -# 27 "/usr/include/bits/errno.h" 2 3 4 -# 29 "/usr/include/errno.h" 2 3 4 - - - - - -extern "C" { - - -extern int *__errno_location (void) throw () __attribute__ ((__const__)); - - - - - - - -extern char *program_invocation_name; -extern char *program_invocation_short_name; - -# 1 "/usr/include/bits/types/error_t.h" 1 3 4 -# 22 "/usr/include/bits/types/error_t.h" 3 4 -typedef int error_t; -# 49 "/usr/include/errno.h" 2 3 4 - - - -} -# 43 "/usr/include/c++/10/cerrno" 2 3 -# 45 "/usr/include/c++/10/ext/string_conversions.h" 2 3 - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - template - _Ret - __stoa(_TRet (*__convf) (const _CharT*, _CharT**, _Base...), - const char* __name, const _CharT* __str, std::size_t* __idx, - _Base... __base) - { - _Ret __ret; - - _CharT* __endptr; - - struct _Save_errno { - _Save_errno() : _M_errno((*__errno_location ())) { (*__errno_location ()) = 0; } - ~_Save_errno() { if ((*__errno_location ()) == 0) (*__errno_location ()) = _M_errno; } - int _M_errno; - } const __save_errno; - - struct _Range_chk { - static bool - _S_chk(_TRet, std::false_type) { return false; } - - static bool - _S_chk(_TRet __val, std::true_type) - { - return __val < _TRet(__numeric_traits::__min) - || __val > _TRet(__numeric_traits::__max); - } - }; - - const _TRet __tmp = __convf(__str, &__endptr, __base...); - - if (__endptr == __str) - std::__throw_invalid_argument(__name); - else if ((*__errno_location ()) == 34 - || _Range_chk::_S_chk(__tmp, std::is_same<_Ret, int>{})) - std::__throw_out_of_range(__name); - else - __ret = __tmp; - - if (__idx) - *__idx = __endptr - __str; - - return __ret; - } - - - template - _String - __to_xstring(int (*__convf) (_CharT*, std::size_t, const _CharT*, - __builtin_va_list), std::size_t __n, - const _CharT* __fmt, ...) - { - - - _CharT* __s = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) - * __n)); - - __builtin_va_list __args; - __builtin_va_start(__args, __fmt); - - const int __len = __convf(__s, __n, __fmt, __args); - - __builtin_va_end(__args); - - return _String(__s, __s + __len); - } - - -} -# 6545 "/usr/include/c++/10/bits/basic_string.h" 2 3 -# 1 "/usr/include/c++/10/bits/charconv.h" 1 3 -# 33 "/usr/include/c++/10/bits/charconv.h" 3 - -# 34 "/usr/include/c++/10/bits/charconv.h" 3 - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -namespace __detail -{ - - template - constexpr unsigned - __to_chars_len(_Tp __value, int __base = 10) noexcept - { - static_assert(is_integral<_Tp>::value, "implementation bug"); - static_assert(is_unsigned<_Tp>::value, "implementation bug"); - - unsigned __n = 1; - const unsigned __b2 = __base * __base; - const unsigned __b3 = __b2 * __base; - const unsigned long __b4 = __b3 * __base; - for (;;) - { - if (__value < (unsigned)__base) return __n; - if (__value < __b2) return __n + 1; - if (__value < __b3) return __n + 2; - if (__value < __b4) return __n + 3; - __value /= __b4; - __n += 4; - } - } - - - - - template - void - __to_chars_10_impl(char* __first, unsigned __len, _Tp __val) noexcept - { - static_assert(is_integral<_Tp>::value, "implementation bug"); - static_assert(is_unsigned<_Tp>::value, "implementation bug"); - - static constexpr char __digits[201] = - "0001020304050607080910111213141516171819" - "2021222324252627282930313233343536373839" - "4041424344454647484950515253545556575859" - "6061626364656667686970717273747576777879" - "8081828384858687888990919293949596979899"; - unsigned __pos = __len - 1; - while (__val >= 100) - { - auto const __num = (__val % 100) * 2; - __val /= 100; - __first[__pos] = __digits[__num + 1]; - __first[__pos - 1] = __digits[__num]; - __pos -= 2; - } - if (__val >= 10) - { - auto const __num = __val * 2; - __first[1] = __digits[__num + 1]; - __first[0] = __digits[__num]; - } - else - __first[0] = '0' + __val; - } - -} - -} -# 6546 "/usr/include/c++/10/bits/basic_string.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -namespace __cxx11 { - - - - inline int - stoi(const string& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::strtol, "stoi", __str.c_str(), - __idx, __base); } - - inline long - stol(const string& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::strtol, "stol", __str.c_str(), - __idx, __base); } - - inline unsigned long - stoul(const string& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::strtoul, "stoul", __str.c_str(), - __idx, __base); } - - inline long long - stoll(const string& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::strtoll, "stoll", __str.c_str(), - __idx, __base); } - - inline unsigned long long - stoull(const string& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::strtoull, "stoull", __str.c_str(), - __idx, __base); } - - - inline float - stof(const string& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::strtof, "stof", __str.c_str(), __idx); } - - inline double - stod(const string& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::strtod, "stod", __str.c_str(), __idx); } - - inline long double - stold(const string& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::strtold, "stold", __str.c_str(), __idx); } - - - - - inline string - to_string(int __val) - { - const bool __neg = __val < 0; - const unsigned __uval = __neg ? (unsigned)~__val + 1u : __val; - const auto __len = __detail::__to_chars_len(__uval); - string __str(__neg + __len, '-'); - __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); - return __str; - } - - inline string - to_string(unsigned __val) - { - string __str(__detail::__to_chars_len(__val), '\0'); - __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); - return __str; - } - - inline string - to_string(long __val) - { - const bool __neg = __val < 0; - const unsigned long __uval = __neg ? (unsigned long)~__val + 1ul : __val; - const auto __len = __detail::__to_chars_len(__uval); - string __str(__neg + __len, '-'); - __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); - return __str; - } - - inline string - to_string(unsigned long __val) - { - string __str(__detail::__to_chars_len(__val), '\0'); - __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); - return __str; - } - - inline string - to_string(long long __val) - { - const bool __neg = __val < 0; - const unsigned long long __uval - = __neg ? (unsigned long long)~__val + 1ull : __val; - const auto __len = __detail::__to_chars_len(__uval); - string __str(__neg + __len, '-'); - __detail::__to_chars_10_impl(&__str[__neg], __len, __uval); - return __str; - } - - inline string - to_string(unsigned long long __val) - { - string __str(__detail::__to_chars_len(__val), '\0'); - __detail::__to_chars_10_impl(&__str[0], __str.size(), __val); - return __str; - } - - - - - inline string - to_string(float __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, - "%f", __val); - } - - inline string - to_string(double __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, - "%f", __val); - } - - inline string - to_string(long double __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vsnprintf, __n, - "%Lf", __val); - } - - - - inline int - stoi(const wstring& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::wcstol, "stoi", __str.c_str(), - __idx, __base); } - - inline long - stol(const wstring& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::wcstol, "stol", __str.c_str(), - __idx, __base); } - - inline unsigned long - stoul(const wstring& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::wcstoul, "stoul", __str.c_str(), - __idx, __base); } - - inline long long - stoll(const wstring& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::wcstoll, "stoll", __str.c_str(), - __idx, __base); } - - inline unsigned long long - stoull(const wstring& __str, size_t* __idx = 0, int __base = 10) - { return __gnu_cxx::__stoa(&std::wcstoull, "stoull", __str.c_str(), - __idx, __base); } - - - inline float - stof(const wstring& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::wcstof, "stof", __str.c_str(), __idx); } - - inline double - stod(const wstring& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::wcstod, "stod", __str.c_str(), __idx); } - - inline long double - stold(const wstring& __str, size_t* __idx = 0) - { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); } - - - - inline wstring - to_wstring(int __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(int), - L"%d", __val); } - - inline wstring - to_wstring(unsigned __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, - 4 * sizeof(unsigned), - L"%u", __val); } - - inline wstring - to_wstring(long __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, 4 * sizeof(long), - L"%ld", __val); } - - inline wstring - to_wstring(unsigned long __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, - 4 * sizeof(unsigned long), - L"%lu", __val); } - - inline wstring - to_wstring(long long __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, - 4 * sizeof(long long), - L"%lld", __val); } - - inline wstring - to_wstring(unsigned long long __val) - { return __gnu_cxx::__to_xstring(&std::vswprintf, - 4 * sizeof(unsigned long long), - L"%llu", __val); } - - inline wstring - to_wstring(float __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vswprintf, __n, - L"%f", __val); - } - - inline wstring - to_wstring(double __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vswprintf, __n, - L"%f", __val); - } - - inline wstring - to_wstring(long double __val) - { - const int __n = - __gnu_cxx::__numeric_traits::__max_exponent10 + 20; - return __gnu_cxx::__to_xstring(&std::vswprintf, __n, - L"%Lf", __val); - } - - - -} - -} - - - - - -# 1 "/usr/include/c++/10/bits/functional_hash.h" 1 3 -# 33 "/usr/include/c++/10/bits/functional_hash.h" 3 - -# 34 "/usr/include/c++/10/bits/functional_hash.h" 3 - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 49 "/usr/include/c++/10/bits/functional_hash.h" 3 - template - struct __hash_base - { - typedef _Result result_type ; - typedef _Arg argument_type ; - }; - - - template - struct hash; - - template - struct __poison_hash - { - static constexpr bool __enable_hash_call = false; - private: - - __poison_hash(__poison_hash&&); - ~__poison_hash(); - }; - - template - struct __poison_hash<_Tp, __void_t()(declval<_Tp>()))>> - { - static constexpr bool __enable_hash_call = true; - }; - - - template::value> - struct __hash_enum - { - private: - - __hash_enum(__hash_enum&&); - ~__hash_enum(); - }; - - - template - struct __hash_enum<_Tp, true> : public __hash_base - { - size_t - operator()(_Tp __val) const noexcept - { - using __type = typename underlying_type<_Tp>::type; - return hash<__type>{}(static_cast<__type>(__val)); - } - }; - - - - template - struct hash : __hash_enum<_Tp> - { }; - - - template - struct hash<_Tp*> : public __hash_base - { - size_t - operator()(_Tp* __p) const noexcept - { return reinterpret_cast(__p); } - }; -# 124 "/usr/include/c++/10/bits/functional_hash.h" 3 - template<> struct hash : public __hash_base { size_t operator()(bool __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(char __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(signed char __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(unsigned char __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(wchar_t __val) const noexcept { return static_cast(__val); } }; - - - - - - - - template<> struct hash : public __hash_base { size_t operator()(char16_t __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(char32_t __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(short __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(int __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(long __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(long long __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(unsigned short __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(unsigned int __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(unsigned long __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash : public __hash_base { size_t operator()(unsigned long long __val) const noexcept { return static_cast(__val); } }; - - - template<> struct hash<__int128> : public __hash_base { size_t operator()(__int128 __val) const noexcept { return static_cast(__val); } }; - template<> struct hash<__int128 unsigned> : public __hash_base { size_t operator()(__int128 unsigned __val) const noexcept { return static_cast(__val); } }; -# 192 "/usr/include/c++/10/bits/functional_hash.h" 3 - struct _Hash_impl - { - static size_t - hash(const void* __ptr, size_t __clength, - size_t __seed = static_cast(0xc70f6907UL)) - { return _Hash_bytes(__ptr, __clength, __seed); } - - template - static size_t - hash(const _Tp& __val) - { return hash(&__val, sizeof(__val)); } - - template - static size_t - __hash_combine(const _Tp& __val, size_t __hash) - { return hash(&__val, sizeof(__val), __hash); } - }; - - - struct _Fnv_hash_impl - { - static size_t - hash(const void* __ptr, size_t __clength, - size_t __seed = static_cast(2166136261UL)) - { return _Fnv_hash_bytes(__ptr, __clength, __seed); } - - template - static size_t - hash(const _Tp& __val) - { return hash(&__val, sizeof(__val)); } - - template - static size_t - __hash_combine(const _Tp& __val, size_t __hash) - { return hash(&__val, sizeof(__val), __hash); } - }; - - - template<> - struct hash : public __hash_base - { - size_t - operator()(float __val) const noexcept - { - - return __val != 0.0f ? std::_Hash_impl::hash(__val) : 0; - } - }; - - - template<> - struct hash : public __hash_base - { - size_t - operator()(double __val) const noexcept - { - - return __val != 0.0 ? std::_Hash_impl::hash(__val) : 0; - } - }; - - - template<> - struct hash - : public __hash_base - { - __attribute__ ((__pure__)) size_t - operator()(long double __val) const noexcept; - }; -# 278 "/usr/include/c++/10/bits/functional_hash.h" 3 - template - struct __is_fast_hash : public std::true_type - { }; - - template<> - struct __is_fast_hash> : public std::false_type - { }; - - -} -# 6797 "/usr/include/c++/10/bits/basic_string.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - template<> - struct hash - : public __hash_base - { - size_t - operator()(const string& __s) const noexcept - { return std::_Hash_impl::hash(__s.data(), __s.length()); } - }; - - template<> - struct __is_fast_hash> : std::false_type - { }; - - - - template<> - struct hash - : public __hash_base - { - size_t - operator()(const wstring& __s) const noexcept - { return std::_Hash_impl::hash(__s.data(), - __s.length() * sizeof(wchar_t)); } - }; - - template<> - struct __is_fast_hash> : std::false_type - { }; -# 6855 "/usr/include/c++/10/bits/basic_string.h" 3 - template<> - struct hash - : public __hash_base - { - size_t - operator()(const u16string& __s) const noexcept - { return std::_Hash_impl::hash(__s.data(), - __s.length() * sizeof(char16_t)); } - }; - - template<> - struct __is_fast_hash> : std::false_type - { }; - - - template<> - struct hash - : public __hash_base - { - size_t - operator()(const u32string& __s) const noexcept - { return std::_Hash_impl::hash(__s.data(), - __s.length() * sizeof(char32_t)); } - }; - - template<> - struct __is_fast_hash> : std::false_type - { }; - - - - - - inline namespace literals - { - inline namespace string_literals - { -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wliteral-suffix" - __attribute ((__abi_tag__ ("cxx11"))) - inline basic_string - operator""s(const char* __str, size_t __len) - { return basic_string{__str, __len}; } - - - __attribute ((__abi_tag__ ("cxx11"))) - inline basic_string - operator""s(const wchar_t* __str, size_t __len) - { return basic_string{__str, __len}; } -# 6913 "/usr/include/c++/10/bits/basic_string.h" 3 - __attribute ((__abi_tag__ ("cxx11"))) - inline basic_string - operator""s(const char16_t* __str, size_t __len) - { return basic_string{__str, __len}; } - - __attribute ((__abi_tag__ ("cxx11"))) - inline basic_string - operator""s(const char32_t* __str, size_t __len) - { return basic_string{__str, __len}; } - -#pragma GCC diagnostic pop - } - } -# 6945 "/usr/include/c++/10/bits/basic_string.h" 3 - -} -# 56 "/usr/include/c++/10/string" 2 3 -# 1 "/usr/include/c++/10/bits/basic_string.tcc" 1 3 -# 42 "/usr/include/c++/10/bits/basic_string.tcc" 3 - -# 43 "/usr/include/c++/10/bits/basic_string.tcc" 3 - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - template - const typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>::npos; - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - swap(basic_string& __s) noexcept - { - if (this == &__s) - return; - - _Alloc_traits::_S_on_swap(_M_get_allocator(), __s._M_get_allocator()); - - if (_M_is_local()) - if (__s._M_is_local()) - { - if (length() && __s.length()) - { - _CharT __tmp_data[_S_local_capacity + 1]; - traits_type::copy(__tmp_data, __s._M_local_buf, - _S_local_capacity + 1); - traits_type::copy(__s._M_local_buf, _M_local_buf, - _S_local_capacity + 1); - traits_type::copy(_M_local_buf, __tmp_data, - _S_local_capacity + 1); - } - else if (__s.length()) - { - traits_type::copy(_M_local_buf, __s._M_local_buf, - _S_local_capacity + 1); - _M_length(__s.length()); - __s._M_set_length(0); - return; - } - else if (length()) - { - traits_type::copy(__s._M_local_buf, _M_local_buf, - _S_local_capacity + 1); - __s._M_length(length()); - _M_set_length(0); - return; - } - } - else - { - const size_type __tmp_capacity = __s._M_allocated_capacity; - traits_type::copy(__s._M_local_buf, _M_local_buf, - _S_local_capacity + 1); - _M_data(__s._M_data()); - __s._M_data(__s._M_local_buf); - _M_capacity(__tmp_capacity); - } - else - { - const size_type __tmp_capacity = _M_allocated_capacity; - if (__s._M_is_local()) - { - traits_type::copy(_M_local_buf, __s._M_local_buf, - _S_local_capacity + 1); - __s._M_data(_M_data()); - _M_data(_M_local_buf); - } - else - { - pointer __tmp_ptr = _M_data(); - _M_data(__s._M_data()); - __s._M_data(__tmp_ptr); - _M_capacity(__s._M_allocated_capacity); - } - __s._M_capacity(__tmp_capacity); - } - - const size_type __tmp_length = length(); - _M_length(__s.length()); - __s._M_length(__tmp_length); - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::pointer - basic_string<_CharT, _Traits, _Alloc>:: - _M_create(size_type& __capacity, size_type __old_capacity) - { - - - if (__capacity > max_size()) - std::__throw_length_error(("basic_string::_M_create")); - - - - - if (__capacity > __old_capacity && __capacity < 2 * __old_capacity) - { - __capacity = 2 * __old_capacity; - - if (__capacity > max_size()) - __capacity = max_size(); - } - - - - return _Alloc_traits::allocate(_M_get_allocator(), __capacity + 1); - } - - - - - - template - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_construct(_InIterator __beg, _InIterator __end, - std::input_iterator_tag) - { - size_type __len = 0; - size_type __capacity = size_type(_S_local_capacity); - - while (__beg != __end && __len < __capacity) - { - _M_data()[__len++] = *__beg; - ++__beg; - } - - try - { - while (__beg != __end) - { - if (__len == __capacity) - { - - __capacity = __len + 1; - pointer __another = _M_create(__capacity, __len); - this->_S_copy(__another, _M_data(), __len); - _M_dispose(); - _M_data(__another); - _M_capacity(__capacity); - } - _M_data()[__len++] = *__beg; - ++__beg; - } - } - catch(...) - { - _M_dispose(); - throw; - } - - _M_set_length(__len); - } - - template - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_construct(_InIterator __beg, _InIterator __end, - std::forward_iterator_tag) - { - - if (__gnu_cxx::__is_null_pointer(__beg) && __beg != __end) - std::__throw_logic_error(("basic_string::" "_M_construct null not valid") - ); - - size_type __dnew = static_cast(std::distance(__beg, __end)); - - if (__dnew > size_type(_S_local_capacity)) - { - _M_data(_M_create(__dnew, size_type(0))); - _M_capacity(__dnew); - } - - - try - { this->_S_copy_chars(_M_data(), __beg, __end); } - catch(...) - { - _M_dispose(); - throw; - } - - _M_set_length(__dnew); - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_construct(size_type __n, _CharT __c) - { - if (__n > size_type(_S_local_capacity)) - { - _M_data(_M_create(__n, size_type(0))); - _M_capacity(__n); - } - - if (__n) - this->_S_assign(_M_data(), __n, __c); - - _M_set_length(__n); - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_assign(const basic_string& __str) - { - if (this != &__str) - { - const size_type __rsize = __str.length(); - const size_type __capacity = capacity(); - - if (__rsize > __capacity) - { - size_type __new_capacity = __rsize; - pointer __tmp = _M_create(__new_capacity, __capacity); - _M_dispose(); - _M_data(__tmp); - _M_capacity(__new_capacity); - } - - if (__rsize) - this->_S_copy(_M_data(), __str._M_data(), __rsize); - - _M_set_length(__rsize); - } - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - reserve(size_type __res) - { - - if (__res < length()) - __res = length(); - - const size_type __capacity = capacity(); - if (__res != __capacity) - { - if (__res > __capacity - || __res > size_type(_S_local_capacity)) - { - pointer __tmp = _M_create(__res, __capacity); - this->_S_copy(__tmp, _M_data(), length() + 1); - _M_dispose(); - _M_data(__tmp); - _M_capacity(__res); - } - else if (!_M_is_local()) - { - this->_S_copy(_M_local_data(), _M_data(), length() + 1); - _M_destroy(__capacity); - _M_data(_M_local_data()); - } - } - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_mutate(size_type __pos, size_type __len1, const _CharT* __s, - size_type __len2) - { - const size_type __how_much = length() - __pos - __len1; - - size_type __new_capacity = length() + __len2 - __len1; - pointer __r = _M_create(__new_capacity, capacity()); - - if (__pos) - this->_S_copy(__r, _M_data(), __pos); - if (__s && __len2) - this->_S_copy(__r + __pos, __s, __len2); - if (__how_much) - this->_S_copy(__r + __pos + __len2, - _M_data() + __pos + __len1, __how_much); - - _M_dispose(); - _M_data(__r); - _M_capacity(__new_capacity); - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - _M_erase(size_type __pos, size_type __n) - { - const size_type __how_much = length() - __pos - __n; - - if (__how_much && __n) - this->_S_move(_M_data() + __pos, _M_data() + __pos + __n, __how_much); - - _M_set_length(length() - __n); - } - - template - void - basic_string<_CharT, _Traits, _Alloc>:: - resize(size_type __n, _CharT __c) - { - const size_type __size = this->size(); - if (__size < __n) - this->append(__n - __size, __c); - else if (__n < __size) - this->_M_set_length(__n); - } - - template - basic_string<_CharT, _Traits, _Alloc>& - basic_string<_CharT, _Traits, _Alloc>:: - _M_append(const _CharT* __s, size_type __n) - { - const size_type __len = __n + this->size(); - - if (__len <= this->capacity()) - { - if (__n) - this->_S_copy(this->_M_data() + this->size(), __s, __n); - } - else - this->_M_mutate(this->size(), size_type(0), __s, __n); - - this->_M_set_length(__len); - return *this; - } - - template - template - basic_string<_CharT, _Traits, _Alloc>& - basic_string<_CharT, _Traits, _Alloc>:: - _M_replace_dispatch(const_iterator __i1, const_iterator __i2, - _InputIterator __k1, _InputIterator __k2, - std::__false_type) - { - - - const basic_string __s(__k1, __k2, this->get_allocator()); - const size_type __n1 = __i2 - __i1; - return _M_replace(__i1 - begin(), __n1, __s._M_data(), - __s.size()); - } - - template - basic_string<_CharT, _Traits, _Alloc>& - basic_string<_CharT, _Traits, _Alloc>:: - _M_replace_aux(size_type __pos1, size_type __n1, size_type __n2, - _CharT __c) - { - _M_check_length(__n1, __n2, "basic_string::_M_replace_aux"); - - const size_type __old_size = this->size(); - const size_type __new_size = __old_size + __n2 - __n1; - - if (__new_size <= this->capacity()) - { - pointer __p = this->_M_data() + __pos1; - - const size_type __how_much = __old_size - __pos1 - __n1; - if (__how_much && __n1 != __n2) - this->_S_move(__p + __n2, __p + __n1, __how_much); - } - else - this->_M_mutate(__pos1, __n1, 0, __n2); - - if (__n2) - this->_S_assign(this->_M_data() + __pos1, __n2, __c); - - this->_M_set_length(__new_size); - return *this; - } - - template - basic_string<_CharT, _Traits, _Alloc>& - basic_string<_CharT, _Traits, _Alloc>:: - _M_replace(size_type __pos, size_type __len1, const _CharT* __s, - const size_type __len2) - { - _M_check_length(__len1, __len2, "basic_string::_M_replace"); - - const size_type __old_size = this->size(); - const size_type __new_size = __old_size + __len2 - __len1; - - if (__new_size <= this->capacity()) - { - pointer __p = this->_M_data() + __pos; - - const size_type __how_much = __old_size - __pos - __len1; - if (_M_disjunct(__s)) - { - if (__how_much && __len1 != __len2) - this->_S_move(__p + __len2, __p + __len1, __how_much); - if (__len2) - this->_S_copy(__p, __s, __len2); - } - else - { - - if (__len2 && __len2 <= __len1) - this->_S_move(__p, __s, __len2); - if (__how_much && __len1 != __len2) - this->_S_move(__p + __len2, __p + __len1, __how_much); - if (__len2 > __len1) - { - if (__s + __len2 <= __p + __len1) - this->_S_move(__p, __s, __len2); - else if (__s >= __p + __len1) - this->_S_copy(__p, __s + __len2 - __len1, __len2); - else - { - const size_type __nleft = (__p + __len1) - __s; - this->_S_move(__p, __s, __nleft); - this->_S_copy(__p + __nleft, __p + __len2, - __len2 - __nleft); - } - } - } - } - else - this->_M_mutate(__pos, __len1, __s, __len2); - - this->_M_set_length(__new_size); - return *this; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - copy(_CharT* __s, size_type __n, size_type __pos) const - { - _M_check(__pos, "basic_string::copy"); - __n = _M_limit(__pos, __n); - ; - if (__n) - _S_copy(__s, _M_data() + __pos, __n); - - return __n; - } -# 1150 "/usr/include/c++/10/bits/basic_string.tcc" 3 - template - basic_string<_CharT, _Traits, _Alloc> - operator+(const _CharT* __lhs, - const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { - ; - typedef basic_string<_CharT, _Traits, _Alloc> __string_type; - typedef typename __string_type::size_type __size_type; - typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template - rebind<_CharT>::other _Char_alloc_type; - typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; - const __size_type __len = _Traits::length(__lhs); - __string_type __str(_Alloc_traits::_S_select_on_copy( - __rhs.get_allocator())); - __str.reserve(__len + __rhs.size()); - __str.append(__lhs, __len); - __str.append(__rhs); - return __str; - } - - template - basic_string<_CharT, _Traits, _Alloc> - operator+(_CharT __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) - { - typedef basic_string<_CharT, _Traits, _Alloc> __string_type; - typedef typename __string_type::size_type __size_type; - typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template - rebind<_CharT>::other _Char_alloc_type; - typedef __gnu_cxx::__alloc_traits<_Char_alloc_type> _Alloc_traits; - __string_type __str(_Alloc_traits::_S_select_on_copy( - __rhs.get_allocator())); - const __size_type __len = __rhs.size(); - __str.reserve(__len + 1); - __str.append(__size_type(1), __lhs); - __str.append(__rhs); - return __str; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - const size_type __size = this->size(); - - if (__n == 0) - return __pos <= __size ? __pos : npos; - if (__pos >= __size) - return npos; - - const _CharT __elem0 = __s[0]; - const _CharT* const __data = data(); - const _CharT* __first = __data + __pos; - const _CharT* const __last = __data + __size; - size_type __len = __size - __pos; - - while (__len >= __n) - { - - __first = traits_type::find(__first, __len - __n + 1, __elem0); - if (!__first) - return npos; - - - - if (traits_type::compare(__first, __s, __n) == 0) - return __first - __data; - __len = __last - ++__first; - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find(_CharT __c, size_type __pos) const noexcept - { - size_type __ret = npos; - const size_type __size = this->size(); - if (__pos < __size) - { - const _CharT* __data = _M_data(); - const size_type __n = __size - __pos; - const _CharT* __p = traits_type::find(__data + __pos, __n, __c); - if (__p) - __ret = __p - __data; - } - return __ret; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - rfind(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - const size_type __size = this->size(); - if (__n <= __size) - { - __pos = std::min(size_type(__size - __n), __pos); - const _CharT* __data = _M_data(); - do - { - if (traits_type::compare(__data + __pos, __s, __n) == 0) - return __pos; - } - while (__pos-- > 0); - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - rfind(_CharT __c, size_type __pos) const noexcept - { - size_type __size = this->size(); - if (__size) - { - if (--__size > __pos) - __size = __pos; - for (++__size; __size-- > 0; ) - if (traits_type::eq(_M_data()[__size], __c)) - return __size; - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_first_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - for (; __n && __pos < this->size(); ++__pos) - { - const _CharT* __p = traits_type::find(__s, __n, _M_data()[__pos]); - if (__p) - return __pos; - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_last_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - size_type __size = this->size(); - if (__size && __n) - { - if (--__size > __pos) - __size = __pos; - do - { - if (traits_type::find(__s, __n, _M_data()[__size])) - return __size; - } - while (__size-- != 0); - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - for (; __pos < this->size(); ++__pos) - if (!traits_type::find(__s, __n, _M_data()[__pos])) - return __pos; - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_first_not_of(_CharT __c, size_type __pos) const noexcept - { - for (; __pos < this->size(); ++__pos) - if (!traits_type::eq(_M_data()[__pos], __c)) - return __pos; - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const - noexcept - { - ; - size_type __size = this->size(); - if (__size) - { - if (--__size > __pos) - __size = __pos; - do - { - if (!traits_type::find(__s, __n, _M_data()[__size])) - return __size; - } - while (__size--); - } - return npos; - } - - template - typename basic_string<_CharT, _Traits, _Alloc>::size_type - basic_string<_CharT, _Traits, _Alloc>:: - find_last_not_of(_CharT __c, size_type __pos) const noexcept - { - size_type __size = this->size(); - if (__size) - { - if (--__size > __pos) - __size = __pos; - do - { - if (!traits_type::eq(_M_data()[__size], __c)) - return __size; - } - while (__size--); - } - return npos; - } - - template - int - basic_string<_CharT, _Traits, _Alloc>:: - compare(size_type __pos, size_type __n, const basic_string& __str) const - { - _M_check(__pos, "basic_string::compare"); - __n = _M_limit(__pos, __n); - const size_type __osize = __str.size(); - const size_type __len = std::min(__n, __osize); - int __r = traits_type::compare(_M_data() + __pos, __str.data(), __len); - if (!__r) - __r = _S_compare(__n, __osize); - return __r; - } - - template - int - basic_string<_CharT, _Traits, _Alloc>:: - compare(size_type __pos1, size_type __n1, const basic_string& __str, - size_type __pos2, size_type __n2) const - { - _M_check(__pos1, "basic_string::compare"); - __str._M_check(__pos2, "basic_string::compare"); - __n1 = _M_limit(__pos1, __n1); - __n2 = __str._M_limit(__pos2, __n2); - const size_type __len = std::min(__n1, __n2); - int __r = traits_type::compare(_M_data() + __pos1, - __str.data() + __pos2, __len); - if (!__r) - __r = _S_compare(__n1, __n2); - return __r; - } - - template - int - basic_string<_CharT, _Traits, _Alloc>:: - compare(const _CharT* __s) const noexcept - { - ; - const size_type __size = this->size(); - const size_type __osize = traits_type::length(__s); - const size_type __len = std::min(__size, __osize); - int __r = traits_type::compare(_M_data(), __s, __len); - if (!__r) - __r = _S_compare(__size, __osize); - return __r; - } - - template - int - basic_string <_CharT, _Traits, _Alloc>:: - compare(size_type __pos, size_type __n1, const _CharT* __s) const - { - ; - _M_check(__pos, "basic_string::compare"); - __n1 = _M_limit(__pos, __n1); - const size_type __osize = traits_type::length(__s); - const size_type __len = std::min(__n1, __osize); - int __r = traits_type::compare(_M_data() + __pos, __s, __len); - if (!__r) - __r = _S_compare(__n1, __osize); - return __r; - } - - template - int - basic_string <_CharT, _Traits, _Alloc>:: - compare(size_type __pos, size_type __n1, const _CharT* __s, - size_type __n2) const - { - ; - _M_check(__pos, "basic_string::compare"); - __n1 = _M_limit(__pos, __n1); - const size_type __len = std::min(__n1, __n2); - int __r = traits_type::compare(_M_data() + __pos, __s, __len); - if (!__r) - __r = _S_compare(__n1, __n2); - return __r; - } - - - template - basic_istream<_CharT, _Traits>& - operator>>(basic_istream<_CharT, _Traits>& __in, - basic_string<_CharT, _Traits, _Alloc>& __str) - { - typedef basic_istream<_CharT, _Traits> __istream_type; - typedef basic_string<_CharT, _Traits, _Alloc> __string_type; - typedef typename __istream_type::ios_base __ios_base; - typedef typename __istream_type::int_type __int_type; - typedef typename __string_type::size_type __size_type; - typedef ctype<_CharT> __ctype_type; - typedef typename __ctype_type::ctype_base __ctype_base; - - __size_type __extracted = 0; - typename __ios_base::iostate __err = __ios_base::goodbit; - typename __istream_type::sentry __cerb(__in, false); - if (__cerb) - { - try - { - - __str.erase(); - _CharT __buf[128]; - __size_type __len = 0; - const streamsize __w = __in.width(); - const __size_type __n = __w > 0 ? static_cast<__size_type>(__w) - : __str.max_size(); - const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); - const __int_type __eof = _Traits::eof(); - __int_type __c = __in.rdbuf()->sgetc(); - - while (__extracted < __n - && !_Traits::eq_int_type(__c, __eof) - && !__ct.is(__ctype_base::space, - _Traits::to_char_type(__c))) - { - if (__len == sizeof(__buf) / sizeof(_CharT)) - { - __str.append(__buf, sizeof(__buf) / sizeof(_CharT)); - __len = 0; - } - __buf[__len++] = _Traits::to_char_type(__c); - ++__extracted; - __c = __in.rdbuf()->snextc(); - } - __str.append(__buf, __len); - - if (_Traits::eq_int_type(__c, __eof)) - __err |= __ios_base::eofbit; - __in.width(0); - } - catch(__cxxabiv1::__forced_unwind&) - { - __in._M_setstate(__ios_base::badbit); - throw; - } - catch(...) - { - - - - __in._M_setstate(__ios_base::badbit); - } - } - - if (!__extracted) - __err |= __ios_base::failbit; - if (__err) - __in.setstate(__err); - return __in; - } - - template - basic_istream<_CharT, _Traits>& - getline(basic_istream<_CharT, _Traits>& __in, - basic_string<_CharT, _Traits, _Alloc>& __str, _CharT __delim) - { - typedef basic_istream<_CharT, _Traits> __istream_type; - typedef basic_string<_CharT, _Traits, _Alloc> __string_type; - typedef typename __istream_type::ios_base __ios_base; - typedef typename __istream_type::int_type __int_type; - typedef typename __string_type::size_type __size_type; - - __size_type __extracted = 0; - const __size_type __n = __str.max_size(); - typename __ios_base::iostate __err = __ios_base::goodbit; - typename __istream_type::sentry __cerb(__in, true); - if (__cerb) - { - try - { - __str.erase(); - const __int_type __idelim = _Traits::to_int_type(__delim); - const __int_type __eof = _Traits::eof(); - __int_type __c = __in.rdbuf()->sgetc(); - - while (__extracted < __n - && !_Traits::eq_int_type(__c, __eof) - && !_Traits::eq_int_type(__c, __idelim)) - { - __str += _Traits::to_char_type(__c); - ++__extracted; - __c = __in.rdbuf()->snextc(); - } - - if (_Traits::eq_int_type(__c, __eof)) - __err |= __ios_base::eofbit; - else if (_Traits::eq_int_type(__c, __idelim)) - { - ++__extracted; - __in.rdbuf()->sbumpc(); - } - else - __err |= __ios_base::failbit; - } - catch(__cxxabiv1::__forced_unwind&) - { - __in._M_setstate(__ios_base::badbit); - throw; - } - catch(...) - { - - - - __in._M_setstate(__ios_base::badbit); - } - } - if (!__extracted) - __err |= __ios_base::failbit; - if (__err) - __in.setstate(__err); - return __in; - } -# 1610 "/usr/include/c++/10/bits/basic_string.tcc" 3 - extern template class basic_string; - - - - - - - - extern template - basic_istream& - operator>>(basic_istream&, string&); - extern template - basic_ostream& - operator<<(basic_ostream&, const string&); - extern template - basic_istream& - getline(basic_istream&, string&, char); - extern template - basic_istream& - getline(basic_istream&, string&); - - - - extern template class basic_string; - - - - - - extern template - basic_istream& - operator>>(basic_istream&, wstring&); - extern template - basic_ostream& - operator<<(basic_ostream&, const wstring&); - extern template - basic_istream& - getline(basic_istream&, wstring&, wchar_t); - extern template - basic_istream& - getline(basic_istream&, wstring&); - - - - -} -# 57 "/usr/include/c++/10/string" 2 3 -# 13 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Vector/Vector2.hpp" 1 -# 13 "lib/Ray/sources/Vector/Vector2.hpp" - -# 13 "lib/Ray/sources/Vector/Vector2.hpp" -namespace RAY { - - class Vector2 - { - public: - - - - Vector2(float x, float y); - - - - Vector2(); - - - Vector2(const Vector2 &) = default; - - - Vector2(const ::Vector2 &); - - - ~Vector2() = default; - - - Vector2 &operator=(const Vector2 &) = default; - - - - float x; - - float y; - - INTERNAL: - - operator ::Vector2() const; - }; -} -# 14 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Vector/Vector3.hpp" 1 -# 13 "lib/Ray/sources/Vector/Vector3.hpp" -namespace RAY { - - class Vector3 - { - public: - - - - - Vector3(float x, float y, float z); - - - - Vector3(); - - - Vector3(const Vector3 &) = default; - - - Vector3(const ::Vector3 &); - - - ~Vector3() = default; - - - Vector3 &operator=(const Vector3 &) = default; - - - - float x; - - float y; - - float z; - - INTERNAL: - - operator ::Vector3() const; - }; -} -# 15 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Controllers/Keyboard.hpp" 1 -# 13 "lib/Ray/sources/Controllers/Keyboard.hpp" -# 1 "/usr/include/c++/10/vector" 1 3 -# 58 "/usr/include/c++/10/vector" 3 - -# 59 "/usr/include/c++/10/vector" 3 - - - - - - - -# 1 "/usr/include/c++/10/bits/stl_uninitialized.h" 1 3 -# 69 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - -# 69 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - - template - struct __uninitialized_copy - { - template - static _ForwardIterator - __uninit_copy(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result) - { - _ForwardIterator __cur = __result; - try - { - for (; __first != __last; ++__first, (void)++__cur) - std::_Construct(std::__addressof(*__cur), *__first); - return __cur; - } - catch(...) - { - std::_Destroy(__result, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_copy - { - template - static _ForwardIterator - __uninit_copy(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result) - { return std::copy(__first, __last, __result); } - }; -# 123 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline _ForwardIterator - uninitialized_copy(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result) - { - typedef typename iterator_traits<_InputIterator>::value_type - _ValueType1; - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType2; - - - - - - static_assert(is_constructible<_ValueType2, decltype(*__first)>::value, - "result type must be constructible from value type of input range"); - - typedef typename iterator_traits<_InputIterator>::reference _RefType1; - typedef typename iterator_traits<_ForwardIterator>::reference _RefType2; - - - const bool __assignable = is_assignable<_RefType2, _RefType1>::value; - - - return std::__uninitialized_copy<__is_trivial(_ValueType1) - && __is_trivial(_ValueType2) - && __assignable>:: - __uninit_copy(__first, __last, __result); - } - - - - template - struct __uninitialized_fill - { - template - static void - __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __x) - { - _ForwardIterator __cur = __first; - try - { - for (; __cur != __last; ++__cur) - std::_Construct(std::__addressof(*__cur), __x); - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_fill - { - template - static void - __uninit_fill(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __x) - { std::fill(__first, __last, __x); } - }; -# 198 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline void - uninitialized_fill(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __x) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - - - - - static_assert(is_constructible<_ValueType, const _Tp&>::value, - "result type must be constructible from input type"); - - - - const bool __assignable = is_copy_assignable<_ValueType>::value; - - - std::__uninitialized_fill<__is_trivial(_ValueType) && __assignable>:: - __uninit_fill(__first, __last, __x); - } - - - - template - struct __uninitialized_fill_n - { - template - static _ForwardIterator - __uninit_fill_n(_ForwardIterator __first, _Size __n, - const _Tp& __x) - { - _ForwardIterator __cur = __first; - try - { - for (; __n > 0; --__n, (void) ++__cur) - std::_Construct(std::__addressof(*__cur), __x); - return __cur; - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_fill_n - { - template - static _ForwardIterator - __uninit_fill_n(_ForwardIterator __first, _Size __n, - const _Tp& __x) - { return std::fill_n(__first, __n, __x); } - }; -# 270 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline _ForwardIterator - uninitialized_fill_n(_ForwardIterator __first, _Size __n, const _Tp& __x) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - - - - - static_assert(is_constructible<_ValueType, const _Tp&>::value, - "result type must be constructible from input type"); - - - - const bool __assignable = is_copy_assignable<_ValueType>::value; - - return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>:: - __uninit_fill_n(__first, __n, __x); - } -# 300 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - _ForwardIterator - __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result, _Allocator& __alloc) - { - _ForwardIterator __cur = __result; - try - { - typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; - for (; __first != __last; ++__first, (void)++__cur) - __traits::construct(__alloc, std::__addressof(*__cur), *__first); - return __cur; - } - catch(...) - { - std::_Destroy(__result, __cur, __alloc); - throw; - } - } - - template - inline _ForwardIterator - __uninitialized_copy_a(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result, allocator<_Tp>&) - { return std::uninitialized_copy(__first, __last, __result); } - - template - inline _ForwardIterator - __uninitialized_move_a(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result, _Allocator& __alloc) - { - return std::__uninitialized_copy_a(std::make_move_iterator(__first), - std::make_move_iterator(__last), - __result, __alloc); - } - - template - inline _ForwardIterator - __uninitialized_move_if_noexcept_a(_InputIterator __first, - _InputIterator __last, - _ForwardIterator __result, - _Allocator& __alloc) - { - return std::__uninitialized_copy_a - (std::__make_move_if_noexcept_iterator(__first), - std::__make_move_if_noexcept_iterator(__last), __result, __alloc); - } - - template - void - __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __x, _Allocator& __alloc) - { - _ForwardIterator __cur = __first; - try - { - typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; - for (; __cur != __last; ++__cur) - __traits::construct(__alloc, std::__addressof(*__cur), __x); - } - catch(...) - { - std::_Destroy(__first, __cur, __alloc); - throw; - } - } - - template - inline void - __uninitialized_fill_a(_ForwardIterator __first, _ForwardIterator __last, - const _Tp& __x, allocator<_Tp2>&) - { std::uninitialized_fill(__first, __last, __x); } - - template - _ForwardIterator - __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, - const _Tp& __x, _Allocator& __alloc) - { - _ForwardIterator __cur = __first; - try - { - typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; - for (; __n > 0; --__n, (void) ++__cur) - __traits::construct(__alloc, std::__addressof(*__cur), __x); - return __cur; - } - catch(...) - { - std::_Destroy(__first, __cur, __alloc); - throw; - } - } - - template - inline _ForwardIterator - __uninitialized_fill_n_a(_ForwardIterator __first, _Size __n, - const _Tp& __x, allocator<_Tp2>&) - { return std::uninitialized_fill_n(__first, __n, __x); } -# 414 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline _ForwardIterator - __uninitialized_copy_move(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _ForwardIterator __result, - _Allocator& __alloc) - { - _ForwardIterator __mid = std::__uninitialized_copy_a(__first1, __last1, - __result, - __alloc); - try - { - return std::__uninitialized_move_a(__first2, __last2, __mid, __alloc); - } - catch(...) - { - std::_Destroy(__result, __mid, __alloc); - throw; - } - } - - - - - - template - inline _ForwardIterator - __uninitialized_move_copy(_InputIterator1 __first1, - _InputIterator1 __last1, - _InputIterator2 __first2, - _InputIterator2 __last2, - _ForwardIterator __result, - _Allocator& __alloc) - { - _ForwardIterator __mid = std::__uninitialized_move_a(__first1, __last1, - __result, - __alloc); - try - { - return std::__uninitialized_copy_a(__first2, __last2, __mid, __alloc); - } - catch(...) - { - std::_Destroy(__result, __mid, __alloc); - throw; - } - } - - - - - template - inline _ForwardIterator - __uninitialized_fill_move(_ForwardIterator __result, _ForwardIterator __mid, - const _Tp& __x, _InputIterator __first, - _InputIterator __last, _Allocator& __alloc) - { - std::__uninitialized_fill_a(__result, __mid, __x, __alloc); - try - { - return std::__uninitialized_move_a(__first, __last, __mid, __alloc); - } - catch(...) - { - std::_Destroy(__result, __mid, __alloc); - throw; - } - } - - - - - template - inline void - __uninitialized_move_fill(_InputIterator __first1, _InputIterator __last1, - _ForwardIterator __first2, - _ForwardIterator __last2, const _Tp& __x, - _Allocator& __alloc) - { - _ForwardIterator __mid2 = std::__uninitialized_move_a(__first1, __last1, - __first2, - __alloc); - try - { - std::__uninitialized_fill_a(__mid2, __last2, __x, __alloc); - } - catch(...) - { - std::_Destroy(__first2, __mid2, __alloc); - throw; - } - } -# 521 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - struct __uninitialized_default_1 - { - template - static void - __uninit_default(_ForwardIterator __first, _ForwardIterator __last) - { - _ForwardIterator __cur = __first; - try - { - for (; __cur != __last; ++__cur) - std::_Construct(std::__addressof(*__cur)); - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_default_1 - { - template - static void - __uninit_default(_ForwardIterator __first, _ForwardIterator __last) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - std::fill(__first, __last, _ValueType()); - } - }; - - template - struct __uninitialized_default_n_1 - { - template - static _ForwardIterator - __uninit_default_n(_ForwardIterator __first, _Size __n) - { - _ForwardIterator __cur = __first; - try - { - for (; __n > 0; --__n, (void) ++__cur) - std::_Construct(std::__addressof(*__cur)); - return __cur; - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_default_n_1 - { - template - static _ForwardIterator - __uninit_default_n(_ForwardIterator __first, _Size __n) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - return std::fill_n(__first, __n, _ValueType()); - } - }; - - - - - template - inline void - __uninitialized_default(_ForwardIterator __first, - _ForwardIterator __last) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - const bool __assignable = is_copy_assignable<_ValueType>::value; - - std::__uninitialized_default_1<__is_trivial(_ValueType) - && __assignable>:: - __uninit_default(__first, __last); - } - - - - template - inline _ForwardIterator - __uninitialized_default_n(_ForwardIterator __first, _Size __n) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - const bool __assignable = is_copy_assignable<_ValueType>::value; - - return __uninitialized_default_n_1<__is_trivial(_ValueType) - && __assignable>:: - __uninit_default_n(__first, __n); - } - - - - - - template - void - __uninitialized_default_a(_ForwardIterator __first, - _ForwardIterator __last, - _Allocator& __alloc) - { - _ForwardIterator __cur = __first; - try - { - typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; - for (; __cur != __last; ++__cur) - __traits::construct(__alloc, std::__addressof(*__cur)); - } - catch(...) - { - std::_Destroy(__first, __cur, __alloc); - throw; - } - } - - template - inline void - __uninitialized_default_a(_ForwardIterator __first, - _ForwardIterator __last, - allocator<_Tp>&) - { std::__uninitialized_default(__first, __last); } - - - - - - template - _ForwardIterator - __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, - _Allocator& __alloc) - { - _ForwardIterator __cur = __first; - try - { - typedef __gnu_cxx::__alloc_traits<_Allocator> __traits; - for (; __n > 0; --__n, (void) ++__cur) - __traits::construct(__alloc, std::__addressof(*__cur)); - return __cur; - } - catch(...) - { - std::_Destroy(__first, __cur, __alloc); - throw; - } - } - - template - inline _ForwardIterator - __uninitialized_default_n_a(_ForwardIterator __first, _Size __n, - allocator<_Tp>&) - { return std::__uninitialized_default_n(__first, __n); } - - template - struct __uninitialized_default_novalue_1 - { - template - static void - __uninit_default_novalue(_ForwardIterator __first, - _ForwardIterator __last) - { - _ForwardIterator __cur = __first; - try - { - for (; __cur != __last; ++__cur) - std::_Construct_novalue(std::__addressof(*__cur)); - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_default_novalue_1 - { - template - static void - __uninit_default_novalue(_ForwardIterator __first, - _ForwardIterator __last) - { - } - }; - - template - struct __uninitialized_default_novalue_n_1 - { - template - static _ForwardIterator - __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) - { - _ForwardIterator __cur = __first; - try - { - for (; __n > 0; --__n, (void) ++__cur) - std::_Construct_novalue(std::__addressof(*__cur)); - return __cur; - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_default_novalue_n_1 - { - template - static _ForwardIterator - __uninit_default_novalue_n(_ForwardIterator __first, _Size __n) - { return std::next(__first, __n); } - }; - - - - - template - inline void - __uninitialized_default_novalue(_ForwardIterator __first, - _ForwardIterator __last) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - std::__uninitialized_default_novalue_1< - is_trivially_default_constructible<_ValueType>::value>:: - __uninit_default_novalue(__first, __last); - } - - - - template - inline _ForwardIterator - __uninitialized_default_novalue_n(_ForwardIterator __first, _Size __n) - { - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType; - - return __uninitialized_default_novalue_n_1< - is_trivially_default_constructible<_ValueType>::value>:: - __uninit_default_novalue_n(__first, __n); - } - - template - _ForwardIterator - __uninitialized_copy_n(_InputIterator __first, _Size __n, - _ForwardIterator __result, input_iterator_tag) - { - _ForwardIterator __cur = __result; - try - { - for (; __n > 0; --__n, (void) ++__first, ++__cur) - std::_Construct(std::__addressof(*__cur), *__first); - return __cur; - } - catch(...) - { - std::_Destroy(__result, __cur); - throw; - } - } - - template - inline _ForwardIterator - __uninitialized_copy_n(_RandomAccessIterator __first, _Size __n, - _ForwardIterator __result, - random_access_iterator_tag) - { return std::uninitialized_copy(__first, __first + __n, __result); } - - template - pair<_InputIterator, _ForwardIterator> - __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, - _ForwardIterator __result, input_iterator_tag) - { - _ForwardIterator __cur = __result; - try - { - for (; __n > 0; --__n, (void) ++__first, ++__cur) - std::_Construct(std::__addressof(*__cur), *__first); - return {__first, __cur}; - } - catch(...) - { - std::_Destroy(__result, __cur); - throw; - } - } - - template - inline pair<_RandomAccessIterator, _ForwardIterator> - __uninitialized_copy_n_pair(_RandomAccessIterator __first, _Size __n, - _ForwardIterator __result, - random_access_iterator_tag) - { - auto __second_res = uninitialized_copy(__first, __first + __n, __result); - auto __first_res = std::next(__first, __n); - return {__first_res, __second_res}; - } -# 852 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline _ForwardIterator - uninitialized_copy_n(_InputIterator __first, _Size __n, - _ForwardIterator __result) - { return std::__uninitialized_copy_n(__first, __n, __result, - std::__iterator_category(__first)); } - - - template - inline pair<_InputIterator, _ForwardIterator> - __uninitialized_copy_n_pair(_InputIterator __first, _Size __n, - _ForwardIterator __result) - { - return - std::__uninitialized_copy_n_pair(__first, __n, __result, - std::__iterator_category(__first)); - } -# 966 "/usr/include/c++/10/bits/stl_uninitialized.h" 3 - template - inline void - __relocate_object_a(_Tp* __restrict __dest, _Up* __restrict __orig, - _Allocator& __alloc) - noexcept(noexcept(std::allocator_traits<_Allocator>::construct(__alloc, - __dest, std::move(*__orig))) - && noexcept(std::allocator_traits<_Allocator>::destroy( - __alloc, std::__addressof(*__orig)))) - { - typedef std::allocator_traits<_Allocator> __traits; - __traits::construct(__alloc, __dest, std::move(*__orig)); - __traits::destroy(__alloc, std::__addressof(*__orig)); - } - - - - template - struct __is_bitwise_relocatable - : is_trivial<_Tp> { }; - - template - inline __enable_if_t::value, _Tp*> - __relocate_a_1(_Tp* __first, _Tp* __last, - _Tp* __result, allocator<_Up>&) noexcept - { - ptrdiff_t __count = __last - __first; - if (__count > 0) - __builtin_memmove(__result, __first, __count * sizeof(_Tp)); - return __result + __count; - } - - template - inline _ForwardIterator - __relocate_a_1(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result, _Allocator& __alloc) - noexcept(noexcept(std::__relocate_object_a(std::addressof(*__result), - std::addressof(*__first), - __alloc))) - { - typedef typename iterator_traits<_InputIterator>::value_type - _ValueType; - typedef typename iterator_traits<_ForwardIterator>::value_type - _ValueType2; - static_assert(std::is_same<_ValueType, _ValueType2>::value, - "relocation is only possible for values of the same type"); - _ForwardIterator __cur = __result; - for (; __first != __last; ++__first, (void)++__cur) - std::__relocate_object_a(std::__addressof(*__cur), - std::__addressof(*__first), __alloc); - return __cur; - } - - template - inline _ForwardIterator - __relocate_a(_InputIterator __first, _InputIterator __last, - _ForwardIterator __result, _Allocator& __alloc) - noexcept(noexcept(__relocate_a_1(std::__niter_base(__first), - std::__niter_base(__last), - std::__niter_base(__result), __alloc))) - { - return __relocate_a_1(std::__niter_base(__first), - std::__niter_base(__last), - std::__niter_base(__result), __alloc); - } - - - - - - - -} -# 67 "/usr/include/c++/10/vector" 2 3 -# 1 "/usr/include/c++/10/bits/stl_vector.h" 1 3 -# 77 "/usr/include/c++/10/bits/stl_vector.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - template - struct _Vector_base - { - typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template - rebind<_Tp>::other _Tp_alloc_type; - typedef typename __gnu_cxx::__alloc_traits<_Tp_alloc_type>::pointer - pointer; - - struct _Vector_impl_data - { - pointer _M_start; - pointer _M_finish; - pointer _M_end_of_storage; - - _Vector_impl_data() noexcept - : _M_start(), _M_finish(), _M_end_of_storage() - { } - - - _Vector_impl_data(_Vector_impl_data&& __x) noexcept - : _M_start(__x._M_start), _M_finish(__x._M_finish), - _M_end_of_storage(__x._M_end_of_storage) - { __x._M_start = __x._M_finish = __x._M_end_of_storage = pointer(); } - - - void - _M_copy_data(_Vector_impl_data const& __x) noexcept - { - _M_start = __x._M_start; - _M_finish = __x._M_finish; - _M_end_of_storage = __x._M_end_of_storage; - } - - void - _M_swap_data(_Vector_impl_data& __x) noexcept - { - - - _Vector_impl_data __tmp; - __tmp._M_copy_data(*this); - _M_copy_data(__x); - __x._M_copy_data(__tmp); - } - }; - - struct _Vector_impl - : public _Tp_alloc_type, public _Vector_impl_data - { - _Vector_impl() noexcept(is_nothrow_default_constructible<_Tp_alloc_type>::value) - - : _Tp_alloc_type() - { } - - _Vector_impl(_Tp_alloc_type const& __a) noexcept - : _Tp_alloc_type(__a) - { } - - - - - _Vector_impl(_Vector_impl&& __x) noexcept - : _Tp_alloc_type(std::move(__x)), _Vector_impl_data(std::move(__x)) - { } - - _Vector_impl(_Tp_alloc_type&& __a) noexcept - : _Tp_alloc_type(std::move(__a)) - { } - - _Vector_impl(_Tp_alloc_type&& __a, _Vector_impl&& __rv) noexcept - : _Tp_alloc_type(std::move(__a)), _Vector_impl_data(std::move(__rv)) - { } -# 270 "/usr/include/c++/10/bits/stl_vector.h" 3 - }; - - public: - typedef _Alloc allocator_type; - - _Tp_alloc_type& - _M_get_Tp_allocator() noexcept - { return this->_M_impl; } - - const _Tp_alloc_type& - _M_get_Tp_allocator() const noexcept - { return this->_M_impl; } - - allocator_type - get_allocator() const noexcept - { return allocator_type(_M_get_Tp_allocator()); } - - - _Vector_base() = default; - - - - - _Vector_base(const allocator_type& __a) noexcept - : _M_impl(__a) { } - - - - _Vector_base(size_t __n) - : _M_impl() - { _M_create_storage(__n); } - - - _Vector_base(size_t __n, const allocator_type& __a) - : _M_impl(__a) - { _M_create_storage(__n); } - - - _Vector_base(_Vector_base&&) = default; - - - - _Vector_base(_Tp_alloc_type&& __a) noexcept - : _M_impl(std::move(__a)) { } - - _Vector_base(_Vector_base&& __x, const allocator_type& __a) - : _M_impl(__a) - { - if (__x.get_allocator() == __a) - this->_M_impl._M_swap_data(__x._M_impl); - else - { - size_t __n = __x._M_impl._M_finish - __x._M_impl._M_start; - _M_create_storage(__n); - } - } - - - _Vector_base(const allocator_type& __a, _Vector_base&& __x) - : _M_impl(_Tp_alloc_type(__a), std::move(__x._M_impl)) - { } - - - ~_Vector_base() noexcept - { - _M_deallocate(_M_impl._M_start, - _M_impl._M_end_of_storage - _M_impl._M_start); - } - - public: - _Vector_impl _M_impl; - - pointer - _M_allocate(size_t __n) - { - typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; - return __n != 0 ? _Tr::allocate(_M_impl, __n) : pointer(); - } - - void - _M_deallocate(pointer __p, size_t __n) - { - typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Tr; - if (__p) - _Tr::deallocate(_M_impl, __p, __n); - } - - protected: - void - _M_create_storage(size_t __n) - { - this->_M_impl._M_start = this->_M_allocate(__n); - this->_M_impl._M_finish = this->_M_impl._M_start; - this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; - } - }; -# 388 "/usr/include/c++/10/bits/stl_vector.h" 3 - template > - class vector : protected _Vector_base<_Tp, _Alloc> - { -# 401 "/usr/include/c++/10/bits/stl_vector.h" 3 - static_assert(is_same::type, _Tp>::value, - "std::vector must have a non-const, non-volatile value_type"); - - - - - - - typedef _Vector_base<_Tp, _Alloc> _Base; - typedef typename _Base::_Tp_alloc_type _Tp_alloc_type; - typedef __gnu_cxx::__alloc_traits<_Tp_alloc_type> _Alloc_traits; - - public: - typedef _Tp value_type; - typedef typename _Base::pointer pointer; - typedef typename _Alloc_traits::const_pointer const_pointer; - typedef typename _Alloc_traits::reference reference; - typedef typename _Alloc_traits::const_reference const_reference; - typedef __gnu_cxx::__normal_iterator iterator; - typedef __gnu_cxx::__normal_iterator - const_iterator; - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Alloc allocator_type; - - private: - - static constexpr bool - _S_nothrow_relocate(true_type) - { - return noexcept(std::__relocate_a(std::declval(), - std::declval(), - std::declval(), - std::declval<_Tp_alloc_type&>())); - } - - static constexpr bool - _S_nothrow_relocate(false_type) - { return false; } - - static constexpr bool - _S_use_relocate() - { - - - - return _S_nothrow_relocate(__is_move_insertable<_Tp_alloc_type>{}); - } - - static pointer - _S_do_relocate(pointer __first, pointer __last, pointer __result, - _Tp_alloc_type& __alloc, true_type) noexcept - { - return std::__relocate_a(__first, __last, __result, __alloc); - } - - static pointer - _S_do_relocate(pointer, pointer, pointer __result, - _Tp_alloc_type&, false_type) noexcept - { return __result; } - - static pointer - _S_relocate(pointer __first, pointer __last, pointer __result, - _Tp_alloc_type& __alloc) noexcept - { - using __do_it = __bool_constant<_S_use_relocate()>; - return _S_do_relocate(__first, __last, __result, __alloc, __do_it{}); - } - - - protected: - using _Base::_M_allocate; - using _Base::_M_deallocate; - using _Base::_M_impl; - using _Base::_M_get_Tp_allocator; - - public: - - - - - - - - vector() = default; -# 496 "/usr/include/c++/10/bits/stl_vector.h" 3 - explicit - vector(const allocator_type& __a) noexcept - : _Base(__a) { } -# 509 "/usr/include/c++/10/bits/stl_vector.h" 3 - explicit - vector(size_type __n, const allocator_type& __a = allocator_type()) - : _Base(_S_check_init_len(__n, __a), __a) - { _M_default_initialize(__n); } -# 522 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector(size_type __n, const value_type& __value, - const allocator_type& __a = allocator_type()) - : _Base(_S_check_init_len(__n, __a), __a) - { _M_fill_initialize(__n, __value); } -# 553 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector(const vector& __x) - : _Base(__x.size(), - _Alloc_traits::_S_select_on_copy(__x._M_get_Tp_allocator())) - { - this->_M_impl._M_finish = - std::__uninitialized_copy_a(__x.begin(), __x.end(), - this->_M_impl._M_start, - _M_get_Tp_allocator()); - } -# 572 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector(vector&&) noexcept = default; - - - vector(const vector& __x, const allocator_type& __a) - : _Base(__x.size(), __a) - { - this->_M_impl._M_finish = - std::__uninitialized_copy_a(__x.begin(), __x.end(), - this->_M_impl._M_start, - _M_get_Tp_allocator()); - } - - private: - vector(vector&& __rv, const allocator_type& __m, true_type) noexcept - : _Base(__m, std::move(__rv)) - { } - - vector(vector&& __rv, const allocator_type& __m, false_type) - : _Base(__m) - { - if (__rv.get_allocator() == __m) - this->_M_impl._M_swap_data(__rv._M_impl); - else if (!__rv.empty()) - { - this->_M_create_storage(__rv.size()); - this->_M_impl._M_finish = - std::__uninitialized_move_a(__rv.begin(), __rv.end(), - this->_M_impl._M_start, - _M_get_Tp_allocator()); - __rv.clear(); - } - } - - public: - - vector(vector&& __rv, const allocator_type& __m) - noexcept( noexcept( - vector(std::declval(), std::declval(), - std::declval())) ) - : vector(std::move(__rv), __m, typename _Alloc_traits::is_always_equal{}) - { } -# 625 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector(initializer_list __l, - const allocator_type& __a = allocator_type()) - : _Base(__a) - { - _M_range_initialize(__l.begin(), __l.end(), - random_access_iterator_tag()); - } -# 651 "/usr/include/c++/10/bits/stl_vector.h" 3 - template> - vector(_InputIterator __first, _InputIterator __last, - const allocator_type& __a = allocator_type()) - : _Base(__a) - { - _M_range_initialize(__first, __last, - std::__iterator_category(__first)); - } -# 678 "/usr/include/c++/10/bits/stl_vector.h" 3 - ~vector() noexcept - { - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - ; - } -# 694 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector& - operator=(const vector& __x); -# 708 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector& - operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) - { - constexpr bool __move_storage = - _Alloc_traits::_S_propagate_on_move_assign() - || _Alloc_traits::_S_always_equal(); - _M_move_assign(std::move(__x), __bool_constant<__move_storage>()); - return *this; - } -# 729 "/usr/include/c++/10/bits/stl_vector.h" 3 - vector& - operator=(initializer_list __l) - { - this->_M_assign_aux(__l.begin(), __l.end(), - random_access_iterator_tag()); - return *this; - } -# 748 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - assign(size_type __n, const value_type& __val) - { _M_fill_assign(__n, __val); } -# 765 "/usr/include/c++/10/bits/stl_vector.h" 3 - template> - void - assign(_InputIterator __first, _InputIterator __last) - { _M_assign_dispatch(__first, __last, __false_type()); } -# 793 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - assign(initializer_list __l) - { - this->_M_assign_aux(__l.begin(), __l.end(), - random_access_iterator_tag()); - } - - - - using _Base::get_allocator; - - - - - - - - iterator - begin() noexcept - { return iterator(this->_M_impl._M_start); } - - - - - - - const_iterator - begin() const noexcept - { return const_iterator(this->_M_impl._M_start); } - - - - - - - iterator - end() noexcept - { return iterator(this->_M_impl._M_finish); } - - - - - - - const_iterator - end() const noexcept - { return const_iterator(this->_M_impl._M_finish); } - - - - - - - reverse_iterator - rbegin() noexcept - { return reverse_iterator(end()); } - - - - - - - const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(end()); } - - - - - - - reverse_iterator - rend() noexcept - { return reverse_iterator(begin()); } - - - - - - - const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(begin()); } - - - - - - - - const_iterator - cbegin() const noexcept - { return const_iterator(this->_M_impl._M_start); } - - - - - - - const_iterator - cend() const noexcept - { return const_iterator(this->_M_impl._M_finish); } - - - - - - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - - - - - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } - - - - - size_type - size() const noexcept - { return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); } - - - size_type - max_size() const noexcept - { return _S_max_size(_M_get_Tp_allocator()); } -# 936 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - resize(size_type __new_size) - { - if (__new_size > size()) - _M_default_append(__new_size - size()); - else if (__new_size < size()) - _M_erase_at_end(this->_M_impl._M_start + __new_size); - } -# 956 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - resize(size_type __new_size, const value_type& __x) - { - if (__new_size > size()) - _M_fill_insert(end(), __new_size - size(), __x); - else if (__new_size < size()) - _M_erase_at_end(this->_M_impl._M_start + __new_size); - } -# 988 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - shrink_to_fit() - { _M_shrink_to_fit(); } - - - - - - - size_type - capacity() const noexcept - { return size_type(this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); } - - - - - - bool - empty() const noexcept - { return begin() == end(); } -# 1027 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - reserve(size_type __n); -# 1042 "/usr/include/c++/10/bits/stl_vector.h" 3 - reference - operator[](size_type __n) noexcept - { - ; - return *(this->_M_impl._M_start + __n); - } -# 1060 "/usr/include/c++/10/bits/stl_vector.h" 3 - const_reference - operator[](size_type __n) const noexcept - { - ; - return *(this->_M_impl._M_start + __n); - } - - protected: - - void - _M_range_check(size_type __n) const - { - if (__n >= this->size()) - __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") - - , - __n, this->size()); - } - - public: -# 1091 "/usr/include/c++/10/bits/stl_vector.h" 3 - reference - at(size_type __n) - { - _M_range_check(__n); - return (*this)[__n]; - } -# 1109 "/usr/include/c++/10/bits/stl_vector.h" 3 - const_reference - at(size_type __n) const - { - _M_range_check(__n); - return (*this)[__n]; - } - - - - - - reference - front() noexcept - { - ; - return *begin(); - } - - - - - - const_reference - front() const noexcept - { - ; - return *begin(); - } - - - - - - reference - back() noexcept - { - ; - return *(end() - 1); - } - - - - - - const_reference - back() const noexcept - { - ; - return *(end() - 1); - } -# 1167 "/usr/include/c++/10/bits/stl_vector.h" 3 - _Tp* - data() noexcept - { return _M_data_ptr(this->_M_impl._M_start); } - - const _Tp* - data() const noexcept - { return _M_data_ptr(this->_M_impl._M_start); } -# 1186 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - push_back(const value_type& __x) - { - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - __x); - ++this->_M_impl._M_finish; - ; - } - else - _M_realloc_insert(end(), __x); - } - - - void - push_back(value_type&& __x) - { emplace_back(std::move(__x)); } - - template - - - - void - - emplace_back(_Args&&... __args); -# 1224 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - pop_back() noexcept - { - ; - --this->_M_impl._M_finish; - _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); - ; - } -# 1246 "/usr/include/c++/10/bits/stl_vector.h" 3 - template - iterator - emplace(const_iterator __position, _Args&&... __args) - { return _M_emplace_aux(__position, std::forward<_Args>(__args)...); } -# 1262 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - insert(const_iterator __position, const value_type& __x); -# 1292 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - insert(const_iterator __position, value_type&& __x) - { return _M_insert_rval(__position, std::move(__x)); } -# 1309 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - insert(const_iterator __position, initializer_list __l) - { - auto __offset = __position - cbegin(); - _M_range_insert(begin() + __offset, __l.begin(), __l.end(), - std::random_access_iterator_tag()); - return begin() + __offset; - } -# 1334 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - insert(const_iterator __position, size_type __n, const value_type& __x) - { - difference_type __offset = __position - cbegin(); - _M_fill_insert(begin() + __offset, __n, __x); - return begin() + __offset; - } -# 1376 "/usr/include/c++/10/bits/stl_vector.h" 3 - template> - iterator - insert(const_iterator __position, _InputIterator __first, - _InputIterator __last) - { - difference_type __offset = __position - cbegin(); - _M_insert_dispatch(begin() + __offset, - __first, __last, __false_type()); - return begin() + __offset; - } -# 1428 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - - erase(const_iterator __position) - { return _M_erase(begin() + (__position - cbegin())); } -# 1455 "/usr/include/c++/10/bits/stl_vector.h" 3 - iterator - - erase(const_iterator __first, const_iterator __last) - { - const auto __beg = begin(); - const auto __cbeg = cbegin(); - return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg)); - } -# 1479 "/usr/include/c++/10/bits/stl_vector.h" 3 - void - swap(vector& __x) noexcept - { - - - ; - - this->_M_impl._M_swap_data(__x._M_impl); - _Alloc_traits::_S_on_swap(_M_get_Tp_allocator(), - __x._M_get_Tp_allocator()); - } - - - - - - - - void - clear() noexcept - { _M_erase_at_end(this->_M_impl._M_start); } - - protected: - - - - - template - pointer - _M_allocate_and_copy(size_type __n, - _ForwardIterator __first, _ForwardIterator __last) - { - pointer __result = this->_M_allocate(__n); - try - { - std::__uninitialized_copy_a(__first, __last, __result, - _M_get_Tp_allocator()); - return __result; - } - catch(...) - { - _M_deallocate(__result, __n); - throw; - } - } -# 1556 "/usr/include/c++/10/bits/stl_vector.h" 3 - template - void - _M_range_initialize(_InputIterator __first, _InputIterator __last, - std::input_iterator_tag) - { - try { - for (; __first != __last; ++__first) - - emplace_back(*__first); - - - - } catch(...) { - clear(); - throw; - } - } - - - template - void - _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, - std::forward_iterator_tag) - { - const size_type __n = std::distance(__first, __last); - this->_M_impl._M_start - = this->_M_allocate(_S_check_init_len(__n, _M_get_Tp_allocator())); - this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; - this->_M_impl._M_finish = - std::__uninitialized_copy_a(__first, __last, - this->_M_impl._M_start, - _M_get_Tp_allocator()); - } - - - - void - _M_fill_initialize(size_type __n, const value_type& __value) - { - this->_M_impl._M_finish = - std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, - _M_get_Tp_allocator()); - } - - - - void - _M_default_initialize(size_type __n) - { - this->_M_impl._M_finish = - std::__uninitialized_default_n_a(this->_M_impl._M_start, __n, - _M_get_Tp_allocator()); - } -# 1618 "/usr/include/c++/10/bits/stl_vector.h" 3 - template - void - _M_assign_dispatch(_Integer __n, _Integer __val, __true_type) - { _M_fill_assign(__n, __val); } - - - template - void - _M_assign_dispatch(_InputIterator __first, _InputIterator __last, - __false_type) - { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } - - - template - void - _M_assign_aux(_InputIterator __first, _InputIterator __last, - std::input_iterator_tag); - - - template - void - _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, - std::forward_iterator_tag); - - - - void - _M_fill_assign(size_type __n, const value_type& __val); - - - - - - - - template - void - _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, - __true_type) - { _M_fill_insert(__pos, __n, __val); } - - - template - void - _M_insert_dispatch(iterator __pos, _InputIterator __first, - _InputIterator __last, __false_type) - { - _M_range_insert(__pos, __first, __last, - std::__iterator_category(__first)); - } - - - template - void - _M_range_insert(iterator __pos, _InputIterator __first, - _InputIterator __last, std::input_iterator_tag); - - - template - void - _M_range_insert(iterator __pos, _ForwardIterator __first, - _ForwardIterator __last, std::forward_iterator_tag); - - - - void - _M_fill_insert(iterator __pos, size_type __n, const value_type& __x); - - - - void - _M_default_append(size_type __n); - - bool - _M_shrink_to_fit(); -# 1705 "/usr/include/c++/10/bits/stl_vector.h" 3 - struct _Temporary_value - { - template - explicit - _Temporary_value(vector* __vec, _Args&&... __args) : _M_this(__vec) - { - _Alloc_traits::construct(_M_this->_M_impl, _M_ptr(), - std::forward<_Args>(__args)...); - } - - ~_Temporary_value() - { _Alloc_traits::destroy(_M_this->_M_impl, _M_ptr()); } - - value_type& - _M_val() { return *_M_ptr(); } - - private: - _Tp* - _M_ptr() { return reinterpret_cast<_Tp*>(&__buf); } - - vector* _M_this; - typename aligned_storage::type __buf; - }; - - - - template - void - _M_insert_aux(iterator __position, _Arg&& __arg); - - template - void - _M_realloc_insert(iterator __position, _Args&&... __args); - - - iterator - _M_insert_rval(const_iterator __position, value_type&& __v); - - - template - iterator - _M_emplace_aux(const_iterator __position, _Args&&... __args); - - - iterator - _M_emplace_aux(const_iterator __position, value_type&& __v) - { return _M_insert_rval(__position, std::move(__v)); } - - - - size_type - _M_check_len(size_type __n, const char* __s) const - { - if (max_size() - size() < __n) - __throw_length_error((__s)); - - const size_type __len = size() + (std::max)(size(), __n); - return (__len < size() || __len > max_size()) ? max_size() : __len; - } - - - static size_type - _S_check_init_len(size_type __n, const allocator_type& __a) - { - if (__n > _S_max_size(_Tp_alloc_type(__a))) - __throw_length_error( - ("cannot create std::vector larger than max_size()")); - return __n; - } - - static size_type - _S_max_size(const _Tp_alloc_type& __a) noexcept - { - - - - const size_t __diffmax - = __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); - const size_t __allocmax = _Alloc_traits::max_size(__a); - return (std::min)(__diffmax, __allocmax); - } - - - - - - void - _M_erase_at_end(pointer __pos) noexcept - { - if (size_type __n = this->_M_impl._M_finish - __pos) - { - std::_Destroy(__pos, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish = __pos; - ; - } - } - - iterator - _M_erase(iterator __position); - - iterator - _M_erase(iterator __first, iterator __last); - - - private: - - - - void - _M_move_assign(vector&& __x, true_type) noexcept - { - vector __tmp(get_allocator()); - this->_M_impl._M_swap_data(__x._M_impl); - __tmp._M_impl._M_swap_data(__x._M_impl); - std::__alloc_on_move(_M_get_Tp_allocator(), __x._M_get_Tp_allocator()); - } - - - - void - _M_move_assign(vector&& __x, false_type) - { - if (__x._M_get_Tp_allocator() == this->_M_get_Tp_allocator()) - _M_move_assign(std::move(__x), true_type()); - else - { - - - this->_M_assign_aux(std::make_move_iterator(__x.begin()), - std::make_move_iterator(__x.end()), - std::random_access_iterator_tag()); - __x.clear(); - } - } - - - template - _Up* - _M_data_ptr(_Up* __ptr) const noexcept - { return __ptr; } - - - template - typename std::pointer_traits<_Ptr>::element_type* - _M_data_ptr(_Ptr __ptr) const - { return empty() ? nullptr : std::__to_address(__ptr); } -# 1868 "/usr/include/c++/10/bits/stl_vector.h" 3 - }; -# 1890 "/usr/include/c++/10/bits/stl_vector.h" 3 - template - inline bool - operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return (__x.size() == __y.size() - && std::equal(__x.begin(), __x.end(), __y.begin())); } -# 1928 "/usr/include/c++/10/bits/stl_vector.h" 3 - template - inline bool - operator<(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return std::lexicographical_compare(__x.begin(), __x.end(), - __y.begin(), __y.end()); } - - - template - inline bool - operator!=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return !(__x == __y); } - - - template - inline bool - operator>(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return __y < __x; } - - - template - inline bool - operator<=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return !(__y < __x); } - - - template - inline bool - operator>=(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) - { return !(__x < __y); } - - - - template - inline void - swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - -# 1982 "/usr/include/c++/10/bits/stl_vector.h" 3 - -} -# 68 "/usr/include/c++/10/vector" 2 3 -# 1 "/usr/include/c++/10/bits/stl_bvector.h" 1 3 -# 64 "/usr/include/c++/10/bits/stl_bvector.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - typedef unsigned long _Bit_type; - enum { _S_word_bit = int(8 * sizeof(_Bit_type)) }; - - struct _Bit_reference - { - _Bit_type * _M_p; - _Bit_type _M_mask; - - _Bit_reference(_Bit_type * __x, _Bit_type __y) - : _M_p(__x), _M_mask(__y) { } - - _Bit_reference() noexcept : _M_p(0), _M_mask(0) { } - - - _Bit_reference(const _Bit_reference&) = default; - - - operator bool() const noexcept - { return !!(*_M_p & _M_mask); } - - _Bit_reference& - operator=(bool __x) noexcept - { - if (__x) - *_M_p |= _M_mask; - else - *_M_p &= ~_M_mask; - return *this; - } - - _Bit_reference& - operator=(const _Bit_reference& __x) noexcept - { return *this = bool(__x); } - - bool - operator==(const _Bit_reference& __x) const - { return bool(*this) == bool(__x); } - - bool - operator<(const _Bit_reference& __x) const - { return !bool(*this) && bool(__x); } - - void - flip() noexcept - { *_M_p ^= _M_mask; } - }; - - - inline void - swap(_Bit_reference __x, _Bit_reference __y) noexcept - { - bool __tmp = __x; - __x = __y; - __y = __tmp; - } - - inline void - swap(_Bit_reference __x, bool& __y) noexcept - { - bool __tmp = __x; - __x = __y; - __y = __tmp; - } - - inline void - swap(bool& __x, _Bit_reference __y) noexcept - { - bool __tmp = __x; - __x = __y; - __y = __tmp; - } - - - struct _Bit_iterator_base - : public std::iterator - { - _Bit_type * _M_p; - unsigned int _M_offset; - - _Bit_iterator_base(_Bit_type * __x, unsigned int __y) - : _M_p(__x), _M_offset(__y) { } - - void - _M_bump_up() - { - if (_M_offset++ == int(_S_word_bit) - 1) - { - _M_offset = 0; - ++_M_p; - } - } - - void - _M_bump_down() - { - if (_M_offset-- == 0) - { - _M_offset = int(_S_word_bit) - 1; - --_M_p; - } - } - - void - _M_incr(ptrdiff_t __i) - { - difference_type __n = __i + _M_offset; - _M_p += __n / int(_S_word_bit); - __n = __n % int(_S_word_bit); - if (__n < 0) - { - __n += int(_S_word_bit); - --_M_p; - } - _M_offset = static_cast(__n); - } - - friend bool - operator==(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { return __x._M_p == __y._M_p && __x._M_offset == __y._M_offset; } -# 199 "/usr/include/c++/10/bits/stl_bvector.h" 3 - friend bool - operator<(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { - return __x._M_p < __y._M_p - || (__x._M_p == __y._M_p && __x._M_offset < __y._M_offset); - } - - friend bool - operator!=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { return !(__x == __y); } - - friend bool - operator>(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { return __y < __x; } - - friend bool - operator<=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { return !(__y < __x); } - - friend bool - operator>=(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { return !(__x < __y); } - - - friend ptrdiff_t - operator-(const _Bit_iterator_base& __x, const _Bit_iterator_base& __y) - { - return (int(_S_word_bit) * (__x._M_p - __y._M_p) - + __x._M_offset - __y._M_offset); - } - }; - - struct _Bit_iterator : public _Bit_iterator_base - { - typedef _Bit_reference reference; - - - - typedef _Bit_reference* pointer; - - typedef _Bit_iterator iterator; - - _Bit_iterator() : _Bit_iterator_base(0, 0) { } - - _Bit_iterator(_Bit_type * __x, unsigned int __y) - : _Bit_iterator_base(__x, __y) { } - - iterator - _M_const_cast() const - { return *this; } - - reference - operator*() const - { return reference(_M_p, 1UL << _M_offset); } - - iterator& - operator++() - { - _M_bump_up(); - return *this; - } - - iterator - operator++(int) - { - iterator __tmp = *this; - _M_bump_up(); - return __tmp; - } - - iterator& - operator--() - { - _M_bump_down(); - return *this; - } - - iterator - operator--(int) - { - iterator __tmp = *this; - _M_bump_down(); - return __tmp; - } - - iterator& - operator+=(difference_type __i) - { - _M_incr(__i); - return *this; - } - - iterator& - operator-=(difference_type __i) - { - *this += -__i; - return *this; - } - - reference - operator[](difference_type __i) const - { return *(*this + __i); } - - friend iterator - operator+(const iterator& __x, difference_type __n) - { - iterator __tmp = __x; - __tmp += __n; - return __tmp; - } - - friend iterator - operator+(difference_type __n, const iterator& __x) - { return __x + __n; } - - friend iterator - operator-(const iterator& __x, difference_type __n) - { - iterator __tmp = __x; - __tmp -= __n; - return __tmp; - } - }; - - struct _Bit_const_iterator : public _Bit_iterator_base - { - typedef bool reference; - typedef bool const_reference; - - - - typedef const bool* pointer; - - typedef _Bit_const_iterator const_iterator; - - _Bit_const_iterator() : _Bit_iterator_base(0, 0) { } - - _Bit_const_iterator(_Bit_type * __x, unsigned int __y) - : _Bit_iterator_base(__x, __y) { } - - _Bit_const_iterator(const _Bit_iterator& __x) - : _Bit_iterator_base(__x._M_p, __x._M_offset) { } - - _Bit_iterator - _M_const_cast() const - { return _Bit_iterator(_M_p, _M_offset); } - - const_reference - operator*() const - { return _Bit_reference(_M_p, 1UL << _M_offset); } - - const_iterator& - operator++() - { - _M_bump_up(); - return *this; - } - - const_iterator - operator++(int) - { - const_iterator __tmp = *this; - _M_bump_up(); - return __tmp; - } - - const_iterator& - operator--() - { - _M_bump_down(); - return *this; - } - - const_iterator - operator--(int) - { - const_iterator __tmp = *this; - _M_bump_down(); - return __tmp; - } - - const_iterator& - operator+=(difference_type __i) - { - _M_incr(__i); - return *this; - } - - const_iterator& - operator-=(difference_type __i) - { - *this += -__i; - return *this; - } - - const_reference - operator[](difference_type __i) const - { return *(*this + __i); } - - friend const_iterator - operator+(const const_iterator& __x, difference_type __n) - { - const_iterator __tmp = __x; - __tmp += __n; - return __tmp; - } - - friend const_iterator - operator-(const const_iterator& __x, difference_type __n) - { - const_iterator __tmp = __x; - __tmp -= __n; - return __tmp; - } - - friend const_iterator - operator+(difference_type __n, const const_iterator& __x) - { return __x + __n; } - }; - - inline void - __fill_bvector(_Bit_type * __v, - unsigned int __first, unsigned int __last, bool __x) - { - const _Bit_type __fmask = ~0ul << __first; - const _Bit_type __lmask = ~0ul >> (_S_word_bit - __last); - const _Bit_type __mask = __fmask & __lmask; - - if (__x) - *__v |= __mask; - else - *__v &= ~__mask; - } - - inline void - fill(_Bit_iterator __first, _Bit_iterator __last, const bool& __x) - { - if (__first._M_p != __last._M_p) - { - _Bit_type* __first_p = __first._M_p; - if (__first._M_offset != 0) - __fill_bvector(__first_p++, __first._M_offset, _S_word_bit, __x); - - __builtin_memset(__first_p, __x ? ~0 : 0, - (__last._M_p - __first_p) * sizeof(_Bit_type)); - - if (__last._M_offset != 0) - __fill_bvector(__last._M_p, 0, __last._M_offset, __x); - } - else if (__first._M_offset != __last._M_offset) - __fill_bvector(__first._M_p, __first._M_offset, __last._M_offset, __x); - } - - template - struct _Bvector_base - { - typedef typename __gnu_cxx::__alloc_traits<_Alloc>::template - rebind<_Bit_type>::other _Bit_alloc_type; - typedef typename __gnu_cxx::__alloc_traits<_Bit_alloc_type> - _Bit_alloc_traits; - typedef typename _Bit_alloc_traits::pointer _Bit_pointer; - - struct _Bvector_impl_data - { - _Bit_iterator _M_start; - _Bit_iterator _M_finish; - _Bit_pointer _M_end_of_storage; - - _Bvector_impl_data() noexcept - : _M_start(), _M_finish(), _M_end_of_storage() - { } - - - _Bvector_impl_data(_Bvector_impl_data&& __x) noexcept - : _M_start(__x._M_start), _M_finish(__x._M_finish) - , _M_end_of_storage(__x._M_end_of_storage) - { __x._M_reset(); } - - void - _M_move_data(_Bvector_impl_data&& __x) noexcept - { - this->_M_start = __x._M_start; - this->_M_finish = __x._M_finish; - this->_M_end_of_storage = __x._M_end_of_storage; - __x._M_reset(); - } - - - void - _M_reset() noexcept - { - _M_start = _M_finish = _Bit_iterator(); - _M_end_of_storage = _Bit_pointer(); - } - }; - - struct _Bvector_impl - : public _Bit_alloc_type, public _Bvector_impl_data - { - public: - _Bvector_impl() noexcept(is_nothrow_default_constructible<_Bit_alloc_type>::value) - - : _Bit_alloc_type() - { } - - _Bvector_impl(const _Bit_alloc_type& __a) noexcept - : _Bit_alloc_type(__a) - { } - - - _Bvector_impl(_Bvector_impl&&) = default; - - - _Bit_type* - _M_end_addr() const noexcept - { - if (this->_M_end_of_storage) - return std::__addressof(this->_M_end_of_storage[-1]) + 1; - return 0; - } - }; - - public: - typedef _Alloc allocator_type; - - _Bit_alloc_type& - _M_get_Bit_allocator() noexcept - { return this->_M_impl; } - - const _Bit_alloc_type& - _M_get_Bit_allocator() const noexcept - { return this->_M_impl; } - - allocator_type - get_allocator() const noexcept - { return allocator_type(_M_get_Bit_allocator()); } - - - _Bvector_base() = default; - - - - - _Bvector_base(const allocator_type& __a) - : _M_impl(__a) { } - - - _Bvector_base(_Bvector_base&&) = default; - - - ~_Bvector_base() - { this->_M_deallocate(); } - - protected: - _Bvector_impl _M_impl; - - _Bit_pointer - _M_allocate(size_t __n) - { return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); } - - void - _M_deallocate() - { - if (_M_impl._M_start._M_p) - { - const size_t __n = _M_impl._M_end_addr() - _M_impl._M_start._M_p; - _Bit_alloc_traits::deallocate(_M_impl, - _M_impl._M_end_of_storage - __n, - __n); - _M_impl._M_reset(); - } - } - - - void - _M_move_data(_Bvector_base&& __x) noexcept - { _M_impl._M_move_data(std::move(__x._M_impl)); } - - - static size_t - _S_nword(size_t __n) - { return (__n + int(_S_word_bit) - 1) / int(_S_word_bit); } - }; - - - -} - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - -# 614 "/usr/include/c++/10/bits/stl_bvector.h" 3 - template - class vector : protected _Bvector_base<_Alloc> - { - typedef _Bvector_base<_Alloc> _Base; - typedef typename _Base::_Bit_pointer _Bit_pointer; - typedef typename _Base::_Bit_alloc_traits _Bit_alloc_traits; - - - friend struct std::hash; - - - public: - typedef bool value_type; - typedef size_t size_type; - typedef ptrdiff_t difference_type; - typedef _Bit_reference reference; - typedef bool const_reference; - typedef _Bit_reference* pointer; - typedef const bool* const_pointer; - typedef _Bit_iterator iterator; - typedef _Bit_const_iterator const_iterator; - typedef std::reverse_iterator const_reverse_iterator; - typedef std::reverse_iterator reverse_iterator; - typedef _Alloc allocator_type; - - allocator_type - get_allocator() const - { return _Base::get_allocator(); } - - protected: - using _Base::_M_allocate; - using _Base::_M_deallocate; - using _Base::_S_nword; - using _Base::_M_get_Bit_allocator; - - public: - - vector() = default; - - - - - explicit - vector(const allocator_type& __a) - : _Base(__a) { } - - - explicit - vector(size_type __n, const allocator_type& __a = allocator_type()) - : vector(__n, false, __a) - { } - - vector(size_type __n, const bool& __value, - const allocator_type& __a = allocator_type()) - - - - - - : _Base(__a) - { - _M_initialize(__n); - _M_initialize_value(__value); - } - - vector(const vector& __x) - : _Base(_Bit_alloc_traits::_S_select_on_copy(__x._M_get_Bit_allocator())) - { - _M_initialize(__x.size()); - _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); - } - - - vector(vector&&) = default; - - vector(vector&& __x, const allocator_type& __a) - noexcept(_Bit_alloc_traits::_S_always_equal()) - : _Base(__a) - { - if (__x.get_allocator() == __a) - this->_M_move_data(std::move(__x)); - else - { - _M_initialize(__x.size()); - _M_copy_aligned(__x.begin(), __x.end(), begin()); - __x.clear(); - } - } - - vector(const vector& __x, const allocator_type& __a) - : _Base(__a) - { - _M_initialize(__x.size()); - _M_copy_aligned(__x.begin(), __x.end(), this->_M_impl._M_start); - } - - vector(initializer_list __l, - const allocator_type& __a = allocator_type()) - : _Base(__a) - { - _M_initialize_range(__l.begin(), __l.end(), - random_access_iterator_tag()); - } - - - - template> - vector(_InputIterator __first, _InputIterator __last, - const allocator_type& __a = allocator_type()) - : _Base(__a) - { _M_initialize_dispatch(__first, __last, __false_type()); } -# 737 "/usr/include/c++/10/bits/stl_bvector.h" 3 - ~vector() noexcept { } - - vector& - operator=(const vector& __x) - { - if (&__x == this) - return *this; - - if (_Bit_alloc_traits::_S_propagate_on_copy_assign()) - { - if (this->_M_get_Bit_allocator() != __x._M_get_Bit_allocator()) - { - this->_M_deallocate(); - std::__alloc_on_copy(_M_get_Bit_allocator(), - __x._M_get_Bit_allocator()); - _M_initialize(__x.size()); - } - else - std::__alloc_on_copy(_M_get_Bit_allocator(), - __x._M_get_Bit_allocator()); - } - - if (__x.size() > capacity()) - { - this->_M_deallocate(); - _M_initialize(__x.size()); - } - this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), - begin()); - return *this; - } - - - vector& - operator=(vector&& __x) noexcept(_Bit_alloc_traits::_S_nothrow_move()) - { - if (_Bit_alloc_traits::_S_propagate_on_move_assign() - || this->_M_get_Bit_allocator() == __x._M_get_Bit_allocator()) - { - this->_M_deallocate(); - this->_M_move_data(std::move(__x)); - std::__alloc_on_move(_M_get_Bit_allocator(), - __x._M_get_Bit_allocator()); - } - else - { - if (__x.size() > capacity()) - { - this->_M_deallocate(); - _M_initialize(__x.size()); - } - this->_M_impl._M_finish = _M_copy_aligned(__x.begin(), __x.end(), - begin()); - __x.clear(); - } - return *this; - } - - vector& - operator=(initializer_list __l) - { - this->assign (__l.begin(), __l.end()); - return *this; - } - - - - - - - void - assign(size_type __n, const bool& __x) - { _M_fill_assign(__n, __x); } - - - template> - void - assign(_InputIterator __first, _InputIterator __last) - { _M_assign_aux(__first, __last, std::__iterator_category(__first)); } -# 828 "/usr/include/c++/10/bits/stl_bvector.h" 3 - void - assign(initializer_list __l) - { _M_assign_aux(__l.begin(), __l.end(), random_access_iterator_tag()); } - - - iterator - begin() noexcept - { return iterator(this->_M_impl._M_start._M_p, 0); } - - const_iterator - begin() const noexcept - { return const_iterator(this->_M_impl._M_start._M_p, 0); } - - iterator - end() noexcept - { return this->_M_impl._M_finish; } - - const_iterator - end() const noexcept - { return this->_M_impl._M_finish; } - - reverse_iterator - rbegin() noexcept - { return reverse_iterator(end()); } - - const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(end()); } - - reverse_iterator - rend() noexcept - { return reverse_iterator(begin()); } - - const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(begin()); } - - - const_iterator - cbegin() const noexcept - { return const_iterator(this->_M_impl._M_start._M_p, 0); } - - const_iterator - cend() const noexcept - { return this->_M_impl._M_finish; } - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } - - - size_type - size() const noexcept - { return size_type(end() - begin()); } - - size_type - max_size() const noexcept - { - const size_type __isize = - __gnu_cxx::__numeric_traits::__max - - int(_S_word_bit) + 1; - const size_type __asize - = _Bit_alloc_traits::max_size(_M_get_Bit_allocator()); - return (__asize <= __isize / int(_S_word_bit) - ? __asize * int(_S_word_bit) : __isize); - } - - size_type - capacity() const noexcept - { return size_type(const_iterator(this->_M_impl._M_end_addr(), 0) - - begin()); } - - bool - empty() const noexcept - { return begin() == end(); } - - reference - operator[](size_type __n) - { - return *iterator(this->_M_impl._M_start._M_p - + __n / int(_S_word_bit), __n % int(_S_word_bit)); - } - - const_reference - operator[](size_type __n) const - { - return *const_iterator(this->_M_impl._M_start._M_p - + __n / int(_S_word_bit), __n % int(_S_word_bit)); - } - - protected: - void - _M_range_check(size_type __n) const - { - if (__n >= this->size()) - __throw_out_of_range_fmt(("vector::_M_range_check: __n " "(which is %zu) >= this->size() " "(which is %zu)") - - , - __n, this->size()); - } - - public: - reference - at(size_type __n) - { _M_range_check(__n); return (*this)[__n]; } - - const_reference - at(size_type __n) const - { _M_range_check(__n); return (*this)[__n]; } - - void - reserve(size_type __n) - { - if (__n > max_size()) - __throw_length_error(("vector::reserve")); - if (capacity() < __n) - _M_reallocate(__n); - } - - reference - front() - { return *begin(); } - - const_reference - front() const - { return *begin(); } - - reference - back() - { return *(end() - 1); } - - const_reference - back() const - { return *(end() - 1); } - - - - - - - void - data() noexcept { } - - void - push_back(bool __x) - { - if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) - *this->_M_impl._M_finish++ = __x; - else - _M_insert_aux(end(), __x); - } - - void - swap(vector& __x) noexcept - { - std::swap(this->_M_impl._M_start, __x._M_impl._M_start); - std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); - std::swap(this->_M_impl._M_end_of_storage, - __x._M_impl._M_end_of_storage); - _Bit_alloc_traits::_S_on_swap(_M_get_Bit_allocator(), - __x._M_get_Bit_allocator()); - } - - - static void - swap(reference __x, reference __y) noexcept - { - bool __tmp = __x; - __x = __y; - __y = __tmp; - } - - iterator - - insert(const_iterator __position, const bool& __x = bool()) - - - - { - const difference_type __n = __position - begin(); - if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr() - && __position == end()) - *this->_M_impl._M_finish++ = __x; - else - _M_insert_aux(__position._M_const_cast(), __x); - return begin() + __n; - } - - - template> - iterator - insert(const_iterator __position, - _InputIterator __first, _InputIterator __last) - { - difference_type __offset = __position - cbegin(); - _M_insert_dispatch(__position._M_const_cast(), - __first, __last, __false_type()); - return begin() + __offset; - } -# 1044 "/usr/include/c++/10/bits/stl_bvector.h" 3 - iterator - insert(const_iterator __position, size_type __n, const bool& __x) - { - difference_type __offset = __position - cbegin(); - _M_fill_insert(__position._M_const_cast(), __n, __x); - return begin() + __offset; - } - - - - - - - - iterator - insert(const_iterator __p, initializer_list __l) - { return this->insert(__p, __l.begin(), __l.end()); } - - - void - pop_back() - { --this->_M_impl._M_finish; } - - iterator - - erase(const_iterator __position) - - - - { return _M_erase(__position._M_const_cast()); } - - iterator - - erase(const_iterator __first, const_iterator __last) - - - - { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); } - - void - resize(size_type __new_size, bool __x = bool()) - { - if (__new_size < size()) - _M_erase_at_end(begin() + difference_type(__new_size)); - else - insert(end(), __new_size - size(), __x); - } - - - void - shrink_to_fit() - { _M_shrink_to_fit(); } - - - void - flip() noexcept - { - _Bit_type * const __end = this->_M_impl._M_end_addr(); - for (_Bit_type * __p = this->_M_impl._M_start._M_p; __p != __end; ++__p) - *__p = ~*__p; - } - - void - clear() noexcept - { _M_erase_at_end(begin()); } - - - template - - - - void - - emplace_back(_Args&&... __args) - { - push_back(bool(__args...)); - - - - } - - template - iterator - emplace(const_iterator __pos, _Args&&... __args) - { return insert(__pos, bool(__args...)); } - - - protected: - - iterator - _M_copy_aligned(const_iterator __first, const_iterator __last, - iterator __result) - { - _Bit_type* __q = std::copy(__first._M_p, __last._M_p, __result._M_p); - return std::copy(const_iterator(__last._M_p, 0), __last, - iterator(__q, 0)); - } - - void - _M_initialize(size_type __n) - { - if (__n) - { - _Bit_pointer __q = this->_M_allocate(__n); - this->_M_impl._M_end_of_storage = __q + _S_nword(__n); - this->_M_impl._M_start = iterator(std::__addressof(*__q), 0); - } - else - { - this->_M_impl._M_end_of_storage = _Bit_pointer(); - this->_M_impl._M_start = iterator(0, 0); - } - this->_M_impl._M_finish = this->_M_impl._M_start + difference_type(__n); - - } - - void - _M_initialize_value(bool __x) - { - if (_Bit_type* __p = this->_M_impl._M_start._M_p) - __builtin_memset(__p, __x ? ~0 : 0, - (this->_M_impl._M_end_addr() - __p) - * sizeof(_Bit_type)); - } - - void - _M_reallocate(size_type __n); - - - bool - _M_shrink_to_fit(); - - - - - - - template - void - _M_initialize_dispatch(_Integer __n, _Integer __x, __true_type) - { - _M_initialize(static_cast(__n)); - _M_initialize_value(__x); - } - - template - void - _M_initialize_dispatch(_InputIterator __first, _InputIterator __last, - __false_type) - { _M_initialize_range(__first, __last, - std::__iterator_category(__first)); } - - template - void - _M_initialize_range(_InputIterator __first, _InputIterator __last, - std::input_iterator_tag) - { - for (; __first != __last; ++__first) - push_back(*__first); - } - - template - void - _M_initialize_range(_ForwardIterator __first, _ForwardIterator __last, - std::forward_iterator_tag) - { - const size_type __n = std::distance(__first, __last); - _M_initialize(__n); - std::copy(__first, __last, this->_M_impl._M_start); - } -# 1230 "/usr/include/c++/10/bits/stl_bvector.h" 3 - void - _M_fill_assign(size_t __n, bool __x) - { - if (__n > size()) - { - _M_initialize_value(__x); - insert(end(), __n - size(), __x); - } - else - { - _M_erase_at_end(begin() + __n); - _M_initialize_value(__x); - } - } - - template - void - _M_assign_aux(_InputIterator __first, _InputIterator __last, - std::input_iterator_tag) - { - iterator __cur = begin(); - for (; __first != __last && __cur != end(); ++__cur, (void)++__first) - *__cur = *__first; - if (__first == __last) - _M_erase_at_end(__cur); - else - insert(end(), __first, __last); - } - - template - void - _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, - std::forward_iterator_tag) - { - const size_type __len = std::distance(__first, __last); - if (__len < size()) - _M_erase_at_end(std::copy(__first, __last, begin())); - else - { - _ForwardIterator __mid = __first; - std::advance(__mid, size()); - std::copy(__first, __mid, begin()); - insert(end(), __mid, __last); - } - } - - - - - - template - void - _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x, - __true_type) - { _M_fill_insert(__pos, __n, __x); } - - template - void - _M_insert_dispatch(iterator __pos, - _InputIterator __first, _InputIterator __last, - __false_type) - { _M_insert_range(__pos, __first, __last, - std::__iterator_category(__first)); } - - void - _M_fill_insert(iterator __position, size_type __n, bool __x); - - template - void - _M_insert_range(iterator __pos, _InputIterator __first, - _InputIterator __last, std::input_iterator_tag) - { - for (; __first != __last; ++__first) - { - __pos = insert(__pos, *__first); - ++__pos; - } - } - - template - void - _M_insert_range(iterator __position, _ForwardIterator __first, - _ForwardIterator __last, std::forward_iterator_tag); - - void - _M_insert_aux(iterator __position, bool __x); - - size_type - _M_check_len(size_type __n, const char* __s) const - { - if (max_size() - size() < __n) - __throw_length_error((__s)); - - const size_type __len = size() + std::max(size(), __n); - return (__len < size() || __len > max_size()) ? max_size() : __len; - } - - void - _M_erase_at_end(iterator __pos) - { this->_M_impl._M_finish = __pos; } - - iterator - _M_erase(iterator __pos); - - iterator - _M_erase(iterator __first, iterator __last); - }; - - - -} - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - template - struct hash> - : public __hash_base> - { - size_t - operator()(const std::vector&) const noexcept; - }; - - -} -# 69 "/usr/include/c++/10/vector" 2 3 - - - -# 1 "/usr/include/c++/10/bits/vector.tcc" 1 3 -# 59 "/usr/include/c++/10/bits/vector.tcc" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - template - void - vector<_Tp, _Alloc>:: - reserve(size_type __n) - { - if (__n > this->max_size()) - __throw_length_error(("vector::reserve")); - if (this->capacity() < __n) - { - const size_type __old_size = size(); - pointer __tmp; - - if (_S_use_relocate()) - { - __tmp = this->_M_allocate(__n); - _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, - __tmp, _M_get_Tp_allocator()); - } - else - - { - __tmp = _M_allocate_and_copy(__n, - std::__make_move_if_noexcept_iterator(this->_M_impl._M_start), - std::__make_move_if_noexcept_iterator(this->_M_impl._M_finish)); - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - } - ; - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __tmp; - this->_M_impl._M_finish = __tmp + __old_size; - this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; - } - } - - - template - template - - - - void - - vector<_Tp, _Alloc>:: - emplace_back(_Args&&... __args) - { - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - std::forward<_Args>(__args)...); - ++this->_M_impl._M_finish; - ; - } - else - _M_realloc_insert(end(), std::forward<_Args>(__args)...); - - - - } - - - template - typename vector<_Tp, _Alloc>::iterator - vector<_Tp, _Alloc>:: - - insert(const_iterator __position, const value_type& __x) - - - - { - const size_type __n = __position - begin(); - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - if (__position == end()) - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - __x); - ++this->_M_impl._M_finish; - ; - } - else - { - - const auto __pos = begin() + (__position - cbegin()); - - - _Temporary_value __x_copy(this, __x); - _M_insert_aux(__pos, std::move(__x_copy._M_val())); - - - - } - else - - _M_realloc_insert(begin() + (__position - cbegin()), __x); - - - - - return iterator(this->_M_impl._M_start + __n); - } - - template - typename vector<_Tp, _Alloc>::iterator - vector<_Tp, _Alloc>:: - _M_erase(iterator __position) - { - if (__position + 1 != end()) - std::move(__position + 1, end(), __position); - --this->_M_impl._M_finish; - _Alloc_traits::destroy(this->_M_impl, this->_M_impl._M_finish); - ; - return __position; - } - - template - typename vector<_Tp, _Alloc>::iterator - vector<_Tp, _Alloc>:: - _M_erase(iterator __first, iterator __last) - { - if (__first != __last) - { - if (__last != end()) - std::move(__last, end(), __first); - _M_erase_at_end(__first.base() + (end() - __last)); - } - return __first; - } - - template - vector<_Tp, _Alloc>& - vector<_Tp, _Alloc>:: - operator=(const vector<_Tp, _Alloc>& __x) - { - if (&__x != this) - { - ; - - if (_Alloc_traits::_S_propagate_on_copy_assign()) - { - if (!_Alloc_traits::_S_always_equal() - && _M_get_Tp_allocator() != __x._M_get_Tp_allocator()) - { - - this->clear(); - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = nullptr; - this->_M_impl._M_finish = nullptr; - this->_M_impl._M_end_of_storage = nullptr; - } - std::__alloc_on_copy(_M_get_Tp_allocator(), - __x._M_get_Tp_allocator()); - } - - const size_type __xlen = __x.size(); - if (__xlen > capacity()) - { - pointer __tmp = _M_allocate_and_copy(__xlen, __x.begin(), - __x.end()); - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __tmp; - this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __xlen; - } - else if (size() >= __xlen) - { - std::_Destroy(std::copy(__x.begin(), __x.end(), begin()), - end(), _M_get_Tp_allocator()); - } - else - { - std::copy(__x._M_impl._M_start, __x._M_impl._M_start + size(), - this->_M_impl._M_start); - std::__uninitialized_copy_a(__x._M_impl._M_start + size(), - __x._M_impl._M_finish, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - } - this->_M_impl._M_finish = this->_M_impl._M_start + __xlen; - } - return *this; - } - - template - void - vector<_Tp, _Alloc>:: - _M_fill_assign(size_t __n, const value_type& __val) - { - if (__n > capacity()) - { - vector __tmp(__n, __val, _M_get_Tp_allocator()); - __tmp._M_impl._M_swap_data(this->_M_impl); - } - else if (__n > size()) - { - std::fill(begin(), end(), __val); - const size_type __add = __n - size(); - ; - this->_M_impl._M_finish = - std::__uninitialized_fill_n_a(this->_M_impl._M_finish, - __add, __val, _M_get_Tp_allocator()); - ; - } - else - _M_erase_at_end(std::fill_n(this->_M_impl._M_start, __n, __val)); - } - - template - template - void - vector<_Tp, _Alloc>:: - _M_assign_aux(_InputIterator __first, _InputIterator __last, - std::input_iterator_tag) - { - pointer __cur(this->_M_impl._M_start); - for (; __first != __last && __cur != this->_M_impl._M_finish; - ++__cur, (void)++__first) - *__cur = *__first; - if (__first == __last) - _M_erase_at_end(__cur); - else - _M_range_insert(end(), __first, __last, - std::__iterator_category(__first)); - } - - template - template - void - vector<_Tp, _Alloc>:: - _M_assign_aux(_ForwardIterator __first, _ForwardIterator __last, - std::forward_iterator_tag) - { - const size_type __len = std::distance(__first, __last); - - if (__len > capacity()) - { - _S_check_init_len(__len, _M_get_Tp_allocator()); - pointer __tmp(_M_allocate_and_copy(__len, __first, __last)); - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - ; - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __tmp; - this->_M_impl._M_finish = this->_M_impl._M_start + __len; - this->_M_impl._M_end_of_storage = this->_M_impl._M_finish; - } - else if (size() >= __len) - _M_erase_at_end(std::copy(__first, __last, this->_M_impl._M_start)); - else - { - _ForwardIterator __mid = __first; - std::advance(__mid, size()); - std::copy(__first, __mid, this->_M_impl._M_start); - const size_type __attribute__((__unused__)) __n = __len - size(); - ; - this->_M_impl._M_finish = - std::__uninitialized_copy_a(__mid, __last, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - ; - } - } - - - template - auto - vector<_Tp, _Alloc>:: - _M_insert_rval(const_iterator __position, value_type&& __v) -> iterator - { - const auto __n = __position - cbegin(); - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - if (__position == cend()) - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - std::move(__v)); - ++this->_M_impl._M_finish; - ; - } - else - _M_insert_aux(begin() + __n, std::move(__v)); - else - _M_realloc_insert(begin() + __n, std::move(__v)); - - return iterator(this->_M_impl._M_start + __n); - } - - template - template - auto - vector<_Tp, _Alloc>:: - _M_emplace_aux(const_iterator __position, _Args&&... __args) - -> iterator - { - const auto __n = __position - cbegin(); - if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) - if (__position == cend()) - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - std::forward<_Args>(__args)...); - ++this->_M_impl._M_finish; - ; - } - else - { - - - - _Temporary_value __tmp(this, std::forward<_Args>(__args)...); - _M_insert_aux(begin() + __n, std::move(__tmp._M_val())); - } - else - _M_realloc_insert(begin() + __n, std::forward<_Args>(__args)...); - - return iterator(this->_M_impl._M_start + __n); - } - - template - template - void - vector<_Tp, _Alloc>:: - _M_insert_aux(iterator __position, _Arg&& __arg) - - - - - - - { - ; - _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, - std::move(*(this->_M_impl._M_finish - 1))); - ++this->_M_impl._M_finish; - ; - - - - std::move_backward(__position.base(), this->_M_impl._M_finish - 2, this->_M_impl._M_finish - 1) - - ; - - - - *__position = std::forward<_Arg>(__arg); - - } - - - template - template - void - vector<_Tp, _Alloc>:: - _M_realloc_insert(iterator __position, _Args&&... __args) - - - - - - - { - const size_type __len = - _M_check_len(size_type(1), "vector::_M_realloc_insert"); - pointer __old_start = this->_M_impl._M_start; - pointer __old_finish = this->_M_impl._M_finish; - const size_type __elems_before = __position - begin(); - pointer __new_start(this->_M_allocate(__len)); - pointer __new_finish(__new_start); - try - { - - - - - - _Alloc_traits::construct(this->_M_impl, - __new_start + __elems_before, - - std::forward<_Args>(__args)...); - - - - __new_finish = pointer(); - - - if (_S_use_relocate()) - { - __new_finish = _S_relocate(__old_start, __position.base(), - __new_start, _M_get_Tp_allocator()); - - ++__new_finish; - - __new_finish = _S_relocate(__position.base(), __old_finish, - __new_finish, _M_get_Tp_allocator()); - } - else - - { - __new_finish - = std::__uninitialized_move_if_noexcept_a - (__old_start, __position.base(), - __new_start, _M_get_Tp_allocator()); - - ++__new_finish; - - __new_finish - = std::__uninitialized_move_if_noexcept_a - (__position.base(), __old_finish, - __new_finish, _M_get_Tp_allocator()); - } - } - catch(...) - { - if (!__new_finish) - _Alloc_traits::destroy(this->_M_impl, - __new_start + __elems_before); - else - std::_Destroy(__new_start, __new_finish, _M_get_Tp_allocator()); - _M_deallocate(__new_start, __len); - throw; - } - - if (!_S_use_relocate()) - - std::_Destroy(__old_start, __old_finish, _M_get_Tp_allocator()); - ; - _M_deallocate(__old_start, - this->_M_impl._M_end_of_storage - __old_start); - this->_M_impl._M_start = __new_start; - this->_M_impl._M_finish = __new_finish; - this->_M_impl._M_end_of_storage = __new_start + __len; - } - - template - void - vector<_Tp, _Alloc>:: - _M_fill_insert(iterator __position, size_type __n, const value_type& __x) - { - if (__n != 0) - { - if (size_type(this->_M_impl._M_end_of_storage - - this->_M_impl._M_finish) >= __n) - { - - - - _Temporary_value __tmp(this, __x); - value_type& __x_copy = __tmp._M_val(); - - const size_type __elems_after = end() - __position; - pointer __old_finish(this->_M_impl._M_finish); - if (__elems_after > __n) - { - ; - std::__uninitialized_move_a(this->_M_impl._M_finish - __n, - this->_M_impl._M_finish, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish += __n; - ; - std::move_backward(__position.base(), __old_finish - __n, __old_finish) - ; - std::fill(__position.base(), __position.base() + __n, - __x_copy); - } - else - { - ; - this->_M_impl._M_finish = - std::__uninitialized_fill_n_a(this->_M_impl._M_finish, - __n - __elems_after, - __x_copy, - _M_get_Tp_allocator()); - ; - std::__uninitialized_move_a(__position.base(), __old_finish, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish += __elems_after; - ; - std::fill(__position.base(), __old_finish, __x_copy); - } - } - else - { - const size_type __len = - _M_check_len(__n, "vector::_M_fill_insert"); - const size_type __elems_before = __position - begin(); - pointer __new_start(this->_M_allocate(__len)); - pointer __new_finish(__new_start); - try - { - - std::__uninitialized_fill_n_a(__new_start + __elems_before, - __n, __x, - _M_get_Tp_allocator()); - __new_finish = pointer(); - - __new_finish - = std::__uninitialized_move_if_noexcept_a - (this->_M_impl._M_start, __position.base(), - __new_start, _M_get_Tp_allocator()); - - __new_finish += __n; - - __new_finish - = std::__uninitialized_move_if_noexcept_a - (__position.base(), this->_M_impl._M_finish, - __new_finish, _M_get_Tp_allocator()); - } - catch(...) - { - if (!__new_finish) - std::_Destroy(__new_start + __elems_before, - __new_start + __elems_before + __n, - _M_get_Tp_allocator()); - else - std::_Destroy(__new_start, __new_finish, - _M_get_Tp_allocator()); - _M_deallocate(__new_start, __len); - throw; - } - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - ; - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __new_start; - this->_M_impl._M_finish = __new_finish; - this->_M_impl._M_end_of_storage = __new_start + __len; - } - } - } - - - template - void - vector<_Tp, _Alloc>:: - _M_default_append(size_type __n) - { - if (__n != 0) - { - const size_type __size = size(); - size_type __navail = size_type(this->_M_impl._M_end_of_storage - - this->_M_impl._M_finish); - - if (__size > max_size() || __navail > max_size() - __size) - __builtin_unreachable(); - - if (__navail >= __n) - { - ; - this->_M_impl._M_finish = - std::__uninitialized_default_n_a(this->_M_impl._M_finish, - __n, _M_get_Tp_allocator()); - ; - } - else - { - const size_type __len = - _M_check_len(__n, "vector::_M_default_append"); - pointer __new_start(this->_M_allocate(__len)); - if (_S_use_relocate()) - { - try - { - std::__uninitialized_default_n_a(__new_start + __size, - __n, _M_get_Tp_allocator()); - } - catch(...) - { - _M_deallocate(__new_start, __len); - throw; - } - _S_relocate(this->_M_impl._M_start, this->_M_impl._M_finish, - __new_start, _M_get_Tp_allocator()); - } - else - { - pointer __destroy_from = pointer(); - try - { - std::__uninitialized_default_n_a(__new_start + __size, - __n, _M_get_Tp_allocator()); - __destroy_from = __new_start + __size; - std::__uninitialized_move_if_noexcept_a( - this->_M_impl._M_start, this->_M_impl._M_finish, - __new_start, _M_get_Tp_allocator()); - } - catch(...) - { - if (__destroy_from) - std::_Destroy(__destroy_from, __destroy_from + __n, - _M_get_Tp_allocator()); - _M_deallocate(__new_start, __len); - throw; - } - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - } - ; - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __new_start; - this->_M_impl._M_finish = __new_start + __size + __n; - this->_M_impl._M_end_of_storage = __new_start + __len; - } - } - } - - template - bool - vector<_Tp, _Alloc>:: - _M_shrink_to_fit() - { - if (capacity() == size()) - return false; - ; - return std::__shrink_to_fit_aux::_S_do_it(*this); - } - - - template - template - void - vector<_Tp, _Alloc>:: - _M_range_insert(iterator __pos, _InputIterator __first, - _InputIterator __last, std::input_iterator_tag) - { - if (__pos == end()) - { - for (; __first != __last; ++__first) - insert(end(), *__first); - } - else if (__first != __last) - { - vector __tmp(__first, __last, _M_get_Tp_allocator()); - insert(__pos, - std::make_move_iterator(__tmp.begin()), - std::make_move_iterator(__tmp.end())); - } - } - - template - template - void - vector<_Tp, _Alloc>:: - _M_range_insert(iterator __position, _ForwardIterator __first, - _ForwardIterator __last, std::forward_iterator_tag) - { - if (__first != __last) - { - const size_type __n = std::distance(__first, __last); - if (size_type(this->_M_impl._M_end_of_storage - - this->_M_impl._M_finish) >= __n) - { - const size_type __elems_after = end() - __position; - pointer __old_finish(this->_M_impl._M_finish); - if (__elems_after > __n) - { - ; - std::__uninitialized_move_a(this->_M_impl._M_finish - __n, - this->_M_impl._M_finish, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish += __n; - ; - std::move_backward(__position.base(), __old_finish - __n, __old_finish) - ; - std::copy(__first, __last, __position); - } - else - { - _ForwardIterator __mid = __first; - std::advance(__mid, __elems_after); - ; - std::__uninitialized_copy_a(__mid, __last, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish += __n - __elems_after; - ; - std::__uninitialized_move_a(__position.base(), - __old_finish, - this->_M_impl._M_finish, - _M_get_Tp_allocator()); - this->_M_impl._M_finish += __elems_after; - ; - std::copy(__first, __mid, __position); - } - } - else - { - const size_type __len = - _M_check_len(__n, "vector::_M_range_insert"); - pointer __new_start(this->_M_allocate(__len)); - pointer __new_finish(__new_start); - try - { - __new_finish - = std::__uninitialized_move_if_noexcept_a - (this->_M_impl._M_start, __position.base(), - __new_start, _M_get_Tp_allocator()); - __new_finish - = std::__uninitialized_copy_a(__first, __last, - __new_finish, - _M_get_Tp_allocator()); - __new_finish - = std::__uninitialized_move_if_noexcept_a - (__position.base(), this->_M_impl._M_finish, - __new_finish, _M_get_Tp_allocator()); - } - catch(...) - { - std::_Destroy(__new_start, __new_finish, - _M_get_Tp_allocator()); - _M_deallocate(__new_start, __len); - throw; - } - std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, - _M_get_Tp_allocator()); - ; - _M_deallocate(this->_M_impl._M_start, - this->_M_impl._M_end_of_storage - - this->_M_impl._M_start); - this->_M_impl._M_start = __new_start; - this->_M_impl._M_finish = __new_finish; - this->_M_impl._M_end_of_storage = __new_start + __len; - } - } - } - - - - template - void - vector:: - _M_reallocate(size_type __n) - { - _Bit_pointer __q = this->_M_allocate(__n); - iterator __start(std::__addressof(*__q), 0); - iterator __finish(_M_copy_aligned(begin(), end(), __start)); - this->_M_deallocate(); - this->_M_impl._M_start = __start; - this->_M_impl._M_finish = __finish; - this->_M_impl._M_end_of_storage = __q + _S_nword(__n); - } - - template - void - vector:: - _M_fill_insert(iterator __position, size_type __n, bool __x) - { - if (__n == 0) - return; - if (capacity() - size() >= __n) - { - std::copy_backward(__position, end(), - this->_M_impl._M_finish + difference_type(__n)); - std::fill(__position, __position + difference_type(__n), __x); - this->_M_impl._M_finish += difference_type(__n); - } - else - { - const size_type __len = - _M_check_len(__n, "vector::_M_fill_insert"); - _Bit_pointer __q = this->_M_allocate(__len); - iterator __start(std::__addressof(*__q), 0); - iterator __i = _M_copy_aligned(begin(), __position, __start); - std::fill(__i, __i + difference_type(__n), __x); - iterator __finish = std::copy(__position, end(), - __i + difference_type(__n)); - this->_M_deallocate(); - this->_M_impl._M_end_of_storage = __q + _S_nword(__len); - this->_M_impl._M_start = __start; - this->_M_impl._M_finish = __finish; - } - } - - template - template - void - vector:: - _M_insert_range(iterator __position, _ForwardIterator __first, - _ForwardIterator __last, std::forward_iterator_tag) - { - if (__first != __last) - { - size_type __n = std::distance(__first, __last); - if (capacity() - size() >= __n) - { - std::copy_backward(__position, end(), - this->_M_impl._M_finish - + difference_type(__n)); - std::copy(__first, __last, __position); - this->_M_impl._M_finish += difference_type(__n); - } - else - { - const size_type __len = - _M_check_len(__n, "vector::_M_insert_range"); - _Bit_pointer __q = this->_M_allocate(__len); - iterator __start(std::__addressof(*__q), 0); - iterator __i = _M_copy_aligned(begin(), __position, __start); - __i = std::copy(__first, __last, __i); - iterator __finish = std::copy(__position, end(), __i); - this->_M_deallocate(); - this->_M_impl._M_end_of_storage = __q + _S_nword(__len); - this->_M_impl._M_start = __start; - this->_M_impl._M_finish = __finish; - } - } - } - - template - void - vector:: - _M_insert_aux(iterator __position, bool __x) - { - if (this->_M_impl._M_finish._M_p != this->_M_impl._M_end_addr()) - { - std::copy_backward(__position, this->_M_impl._M_finish, - this->_M_impl._M_finish + 1); - *__position = __x; - ++this->_M_impl._M_finish; - } - else - { - const size_type __len = - _M_check_len(size_type(1), "vector::_M_insert_aux"); - _Bit_pointer __q = this->_M_allocate(__len); - iterator __start(std::__addressof(*__q), 0); - iterator __i = _M_copy_aligned(begin(), __position, __start); - *__i++ = __x; - iterator __finish = std::copy(__position, end(), __i); - this->_M_deallocate(); - this->_M_impl._M_end_of_storage = __q + _S_nword(__len); - this->_M_impl._M_start = __start; - this->_M_impl._M_finish = __finish; - } - } - - template - typename vector::iterator - vector:: - _M_erase(iterator __position) - { - if (__position + 1 != end()) - std::copy(__position + 1, end(), __position); - --this->_M_impl._M_finish; - return __position; - } - - template - typename vector::iterator - vector:: - _M_erase(iterator __first, iterator __last) - { - if (__first != __last) - _M_erase_at_end(std::copy(__last, end(), __first)); - return __first; - } - - - template - bool - vector:: - _M_shrink_to_fit() - { - if (capacity() - size() < int(_S_word_bit)) - return false; - try - { - _M_reallocate(size()); - return true; - } - catch(...) - { return false; } - } - - - - -} - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - template - size_t - hash>:: - operator()(const std::vector& __b) const noexcept - { - size_t __hash = 0; - using std::_S_word_bit; - using std::_Bit_type; - - const size_t __words = __b.size() / _S_word_bit; - if (__words) - { - const size_t __clength = __words * sizeof(_Bit_type); - __hash = std::_Hash_impl::hash(__b._M_impl._M_start._M_p, __clength); - } - - const size_t __extrabits = __b.size() % _S_word_bit; - if (__extrabits) - { - _Bit_type __hiword = *__b._M_impl._M_finish._M_p; - __hiword &= ~((~static_cast<_Bit_type>(0)) << __extrabits); - - const size_t __clength - = (__extrabits + 8 - 1) / 8; - if (__words) - __hash = std::_Hash_impl::hash(&__hiword, __clength, __hash); - else - __hash = std::_Hash_impl::hash(&__hiword, __clength); - } - - return __hash; - } - - -} -# 73 "/usr/include/c++/10/vector" 2 3 -# 14 "lib/Ray/sources/Controllers/Keyboard.hpp" 2 - - -# 15 "lib/Ray/sources/Controllers/Keyboard.hpp" -namespace RAY::Controller { - - class Keyboard { - public: - typedef ::KeyboardKey Key; - - - - static bool isPressed(Key); - - - - static bool isDown(Key); - - - - static bool isReleased(Key); - - - - static bool isUp(Key); - - - - static std::vector getPressedKeys(void); - - - - static std::vector getPressedChars(void); - }; -} -# 16 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Camera/Camera2D.hpp" 1 -# 12 "lib/Ray/sources/Camera/Camera2D.hpp" -# 1 "lib/Ray/sources/Vector/Vector2.hpp" 1 -# 13 "lib/Ray/sources/Camera/Camera2D.hpp" 2 -# 1 "lib/Ray/sources/Camera/ICamera.hpp" 1 -# 11 "lib/Ray/sources/Camera/ICamera.hpp" -# 1 "lib/Ray/sources/Matrix.hpp" 1 -# 13 "lib/Ray/sources/Matrix.hpp" -namespace RAY { - typedef ::Matrix Matrix; -} -# 12 "lib/Ray/sources/Camera/ICamera.hpp" 2 - -namespace RAY::Camera { - - class ICamera { - public: - virtual ~ICamera() = default; - - virtual Matrix getMatrix() const = 0; - }; -} -# 14 "lib/Ray/sources/Camera/Camera2D.hpp" 2 - -namespace RAY::Camera { - - - class Camera2D: public ICamera { - public: - - - - - - Camera2D(const Vector2 &offset, const Vector2 &target, float rotation, float zoom = 1); - - - Camera2D(const Camera2D &) = default; - - ~Camera2D() override = default; - - - Camera2D &operator=(const Camera2D &) = default; - - - void setOffset(const Vector2 &offset); - - void setTarget(const Vector2 &target); - - void setRotation(float rotation); - - void setZoom(float zoom); - - - Vector2 getOffset(void) const; - - Vector2 getTarget(void) const; - - float getRotation(void) const; - - float getZoom(void) const; - - - Matrix getMatrix(void) const override; - - private: - ::Camera2D _camera; - - INTERNAL: - - operator ::Camera2D() const; - }; -} -# 17 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Camera/Camera3D.hpp" 1 -# 12 "lib/Ray/sources/Camera/Camera3D.hpp" -# 1 "lib/Ray/sources/Vector/Vector3.hpp" 1 -# 13 "lib/Ray/sources/Camera/Camera3D.hpp" 2 - -# 1 "lib/Ray/sources/Camera/CameraProjection.hpp" 1 -# 13 "lib/Ray/sources/Camera/CameraProjection.hpp" -namespace RAY::Camera { - - typedef ::CameraProjection Projection; - -} -# 15 "lib/Ray/sources/Camera/Camera3D.hpp" 2 -# 1 "lib/Ray/sources/Camera/CameraMode.hpp" 1 -# 13 "lib/Ray/sources/Camera/CameraMode.hpp" -namespace RAY::Camera { - typedef ::CameraMode Mode; -} -# 16 "lib/Ray/sources/Camera/Camera3D.hpp" 2 - -namespace RAY::Camera { - - - class Camera3D: public ICamera { - public: - - - - - - - Camera3D(const Vector3 &position, const Vector3 &target, const Vector3 &up, float fovy, Projection projection); - - - Camera3D(const Camera3D &) = default; - - ~Camera3D() override = default; - - - Camera3D &operator=(const Camera3D &) = default; - - - void setPosition(const Vector3 &Position); - - void setTarget(const Vector3 &target); - - void setUp(const Vector3 &up); - - void setFovy(float fovy); - - void setProjection(Projection projection); - - - Vector3 getPosition(void) const; - - Vector3 getTarget(void) const; - - Vector3 getUp(void) const; - - float getFovy(void) const; - - Projection getProjection(void) const; - - - Matrix getMatrix(void) const override; - - - void setMode(Mode mode); - - - void update(void); - - private: - ::Camera3D _camera; - Mode _mode; - - INTERNAL: - - operator ::Camera3D() const; - }; -} -# 18 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Color.hpp" 1 -# 13 "lib/Ray/sources/Color.hpp" -namespace RAY { - - class Color { - public: - - - - - - Color(unsigned char r, unsigned char g, unsigned char b, unsigned char a); - - - - - - Color(float h, float s, float v); - - - - Color(const ::Color &); - - - Color(const Color &) = default; - - - Color(unsigned int hexValue); - - - ~Color() = default; - - - Color &operator=(const Color &) = default; - - - - Color &setR(unsigned char r); - - - Color &setG(unsigned char g); - - - Color &setB(unsigned char b); - - - Color &setA(unsigned char a); - - - unsigned char getR(void) const; - - - unsigned char getG(void) const; - - - unsigned char getB(void) const; - - - unsigned char getA(void) const; - - - - int toHex(void) const; - - private: - - ::Color _color; - - INTERNAL: - - operator ::Color() const; - }; -}; -# 19 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Drawables/Texture.hpp" 1 -# 13 "lib/Ray/sources/Drawables/Texture.hpp" -# 1 "lib/Ray/sources/IRessource.hpp" 1 -# 13 "lib/Ray/sources/IRessource.hpp" -namespace RAY { - - class IRessource { - public: - virtual ~IRessource() = default; - - virtual bool load(const std::string &filePath) = 0; - - virtual bool unload() = 0; - }; -}; -# 14 "lib/Ray/sources/Drawables/Texture.hpp" 2 - -namespace RAY -{ - - class Texture: public IRessource { - public: - - - Texture(const std::string &filename); - - - - Texture(const Image &image); - - - Texture(const Texture &) = default; - - - Texture(); - - - Texture &operator=(const Texture &) = default; - - - ~Texture() override; - - - - bool load(const std::string &filename) override; - - - bool unload() override; - - protected: - private: - - ::Texture _texture; - - INTERNAL: - - operator ::Texture() const; - }; -} -# 20 "lib/Ray/sources/Window.hpp" 2 -# 1 "lib/Ray/sources/Model/Model.hpp" 1 -# 12 "lib/Ray/sources/Model/Model.hpp" -# 1 "lib/Ray/sources/Drawables/Texture.hpp" 1 -# 13 "lib/Ray/sources/Model/Model.hpp" 2 -# 1 "lib/Ray/sources/Drawables/IDrawable.hpp" 1 -# 11 "lib/Ray/sources/Drawables/IDrawable.hpp" -# 1 "lib/Ray/sources/Drawables/Image.hpp" 1 -# 13 "lib/Ray/sources/Drawables/Image.hpp" -# 1 "lib/Ray/sources/Drawables/Texture.hpp" 1 -# 14 "lib/Ray/sources/Drawables/Image.hpp" 2 - - -namespace RAY -{ - namespace Drawables { - class ADrawable2D; - } - class IRessource; - - class Image: public IRessource { - public: - - - Image(const std::string &filename); - - - - Image(Texture &texture); - - - Image(const Image &image) = default; - - - Image(); - - - Image &operator=(const Image &image) = default; - - - ~Image(); - - - - bool load(const std::string &filename) override; - - - - bool exportTo(const std::string &outputPath); - - - bool unload() override; - - - - void draw(Drawables::ADrawable2D &); - - private: - - ::Image _image; - - INTERNAL: - - operator ::Image() const; - operator ::Image *(); - }; -} -# 12 "lib/Ray/sources/Drawables/IDrawable.hpp" 2 -# 1 "lib/Ray/sources/Window.hpp" 1 -# 13 "lib/Ray/sources/Drawables/IDrawable.hpp" 2 - -namespace RAY -{ - class Window; - class Image; - namespace Drawables { - - class IDrawable { - public: - virtual ~IDrawable() = default; - - virtual void drawOn(RAY::Window &) = 0; - protected: - private: - }; - } -} -# 14 "lib/Ray/sources/Model/Model.hpp" 2 -# 1 "lib/Ray/sources/Model/ModelAnimation.hpp" 1 -# 12 "lib/Ray/sources/Model/ModelAnimation.hpp" -# 1 "/usr/include/c++/10/memory" 1 3 -# 47 "/usr/include/c++/10/memory" 3 - -# 48 "/usr/include/c++/10/memory" 3 -# 67 "/usr/include/c++/10/memory" 3 -# 1 "/usr/include/c++/10/bits/stl_tempbuf.h" 1 3 -# 62 "/usr/include/c++/10/bits/stl_tempbuf.h" 3 - -# 62 "/usr/include/c++/10/bits/stl_tempbuf.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - namespace __detail - { - template - inline void - __return_temporary_buffer(_Tp* __p, - size_t __len __attribute__((__unused__))) - { - - ::operator delete(__p, __len * sizeof(_Tp)); - - - - } - } -# 98 "/usr/include/c++/10/bits/stl_tempbuf.h" 3 - template - pair<_Tp*, ptrdiff_t> - get_temporary_buffer(ptrdiff_t __len) noexcept - { - const ptrdiff_t __max = - __gnu_cxx::__numeric_traits::__max / sizeof(_Tp); - if (__len > __max) - __len = __max; - - while (__len > 0) - { - _Tp* __tmp = static_cast<_Tp*>(::operator new(__len * sizeof(_Tp), - std::nothrow)); - if (__tmp != 0) - return std::pair<_Tp*, ptrdiff_t>(__tmp, __len); - __len /= 2; - } - return std::pair<_Tp*, ptrdiff_t>(static_cast<_Tp*>(0), 0); - } -# 125 "/usr/include/c++/10/bits/stl_tempbuf.h" 3 - template - inline void - return_temporary_buffer(_Tp* __p) - { ::operator delete(__p); } - - - - - - - template - class _Temporary_buffer - { - - - - public: - typedef _Tp value_type; - typedef value_type* pointer; - typedef pointer iterator; - typedef ptrdiff_t size_type; - - protected: - size_type _M_original_len; - size_type _M_len; - pointer _M_buffer; - - public: - - size_type - size() const - { return _M_len; } - - - size_type - requested_size() const - { return _M_original_len; } - - - iterator - begin() - { return _M_buffer; } - - - iterator - end() - { return _M_buffer + _M_len; } - - - - - - _Temporary_buffer(_ForwardIterator __seed, size_type __original_len); - - ~_Temporary_buffer() - { - std::_Destroy(_M_buffer, _M_buffer + _M_len); - std::__detail::__return_temporary_buffer(_M_buffer, _M_len); - } - - private: - - _Temporary_buffer(const _Temporary_buffer&); - - void - operator=(const _Temporary_buffer&); - }; - - - template - struct __uninitialized_construct_buf_dispatch - { - template - static void - __ucr(_Pointer __first, _Pointer __last, - _ForwardIterator __seed) - { - if (__first == __last) - return; - - _Pointer __cur = __first; - try - { - std::_Construct(std::__addressof(*__first), - std::move(*__seed)); - _Pointer __prev = __cur; - ++__cur; - for(; __cur != __last; ++__cur, ++__prev) - std::_Construct(std::__addressof(*__cur), - std::move(*__prev)); - *__seed = std::move(*__prev); - } - catch(...) - { - std::_Destroy(__first, __cur); - throw; - } - } - }; - - template<> - struct __uninitialized_construct_buf_dispatch - { - template - static void - __ucr(_Pointer, _Pointer, _ForwardIterator) { } - }; -# 243 "/usr/include/c++/10/bits/stl_tempbuf.h" 3 - template - inline void - __uninitialized_construct_buf(_Pointer __first, _Pointer __last, - _ForwardIterator __seed) - { - typedef typename std::iterator_traits<_Pointer>::value_type - _ValueType; - - std::__uninitialized_construct_buf_dispatch< - __has_trivial_constructor(_ValueType)>:: - __ucr(__first, __last, __seed); - } - - template - _Temporary_buffer<_ForwardIterator, _Tp>:: - _Temporary_buffer(_ForwardIterator __seed, size_type __original_len) - : _M_original_len(__original_len), _M_len(0), _M_buffer(0) - { - std::pair __p( - std::get_temporary_buffer(_M_original_len)); - - if (__p.first) - { - try - { - std::__uninitialized_construct_buf(__p.first, __p.first + __p.second, - __seed); - _M_buffer = __p.first; - _M_len = __p.second; - } - catch(...) - { - std::__detail::__return_temporary_buffer(__p.first, __p.second); - throw; - } - } - } - - -} -# 68 "/usr/include/c++/10/memory" 2 3 -# 1 "/usr/include/c++/10/bits/stl_raw_storage_iter.h" 1 3 -# 59 "/usr/include/c++/10/bits/stl_raw_storage_iter.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - template - class raw_storage_iterator - : public iterator - { - protected: - _OutputIterator _M_iter; - - public: - explicit - raw_storage_iterator(_OutputIterator __x) - : _M_iter(__x) {} - - raw_storage_iterator& - operator*() { return *this; } - - raw_storage_iterator& - operator=(const _Tp& __element) - { - std::_Construct(std::__addressof(*_M_iter), __element); - return *this; - } - - - - - raw_storage_iterator& - operator=(_Tp&& __element) - { - std::_Construct(std::__addressof(*_M_iter), std::move(__element)); - return *this; - } - - - raw_storage_iterator& - operator++() - { - ++_M_iter; - return *this; - } - - raw_storage_iterator - operator++(int) - { - raw_storage_iterator __tmp = *this; - ++_M_iter; - return __tmp; - } - - - - _OutputIterator base() const { return _M_iter; } - }; - - -} -# 69 "/usr/include/c++/10/memory" 2 3 -# 1 "/usr/include/c++/10/bits/ranges_uninitialized.h" 1 3 -# 70 "/usr/include/c++/10/memory" 2 3 - - - - - - -# 1 "/usr/include/c++/10/ext/concurrence.h" 1 3 -# 32 "/usr/include/c++/10/ext/concurrence.h" 3 - -# 33 "/usr/include/c++/10/ext/concurrence.h" 3 - - - - - - - -namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; - - - - static const _Lock_policy __default_lock_policy = - - - - _S_atomic; - - - - - - - class __concurrence_lock_error : public std::exception - { - public: - virtual char const* - what() const throw() - { return "__gnu_cxx::__concurrence_lock_error"; } - }; - - class __concurrence_unlock_error : public std::exception - { - public: - virtual char const* - what() const throw() - { return "__gnu_cxx::__concurrence_unlock_error"; } - }; - - class __concurrence_broadcast_error : public std::exception - { - public: - virtual char const* - what() const throw() - { return "__gnu_cxx::__concurrence_broadcast_error"; } - }; - - class __concurrence_wait_error : public std::exception - { - public: - virtual char const* - what() const throw() - { return "__gnu_cxx::__concurrence_wait_error"; } - }; - - - inline void - __throw_concurrence_lock_error() - { (throw (__concurrence_lock_error())); } - - inline void - __throw_concurrence_unlock_error() - { (throw (__concurrence_unlock_error())); } - - - inline void - __throw_concurrence_broadcast_error() - { (throw (__concurrence_broadcast_error())); } - - inline void - __throw_concurrence_wait_error() - { (throw (__concurrence_wait_error())); } - - - class __mutex - { - private: - - __gthread_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_TIMED_NP, 0, 0, { 0, 0 } } }; - - - - - __mutex(const __mutex&); - __mutex& operator=(const __mutex&); - - public: - __mutex() - { - - - - - } -# 144 "/usr/include/c++/10/ext/concurrence.h" 3 - void lock() - { - - if (__gthread_active_p()) - { - if (__gthread_mutex_lock(&_M_mutex) != 0) - __throw_concurrence_lock_error(); - } - - } - - void unlock() - { - - if (__gthread_active_p()) - { - if (__gthread_mutex_unlock(&_M_mutex) != 0) - __throw_concurrence_unlock_error(); - } - - } - - __gthread_mutex_t* gthread_mutex(void) - { return &_M_mutex; } - }; - - class __recursive_mutex - { - private: - - __gthread_recursive_mutex_t _M_mutex = { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0, { 0, 0 } } }; - - - - - __recursive_mutex(const __recursive_mutex&); - __recursive_mutex& operator=(const __recursive_mutex&); - - public: - __recursive_mutex() - { - - - - - } -# 199 "/usr/include/c++/10/ext/concurrence.h" 3 - void lock() - { - - if (__gthread_active_p()) - { - if (__gthread_recursive_mutex_lock(&_M_mutex) != 0) - __throw_concurrence_lock_error(); - } - - } - - void unlock() - { - - if (__gthread_active_p()) - { - if (__gthread_recursive_mutex_unlock(&_M_mutex) != 0) - __throw_concurrence_unlock_error(); - } - - } - - __gthread_recursive_mutex_t* gthread_recursive_mutex(void) - { return &_M_mutex; } - }; - - - - - class __scoped_lock - { - public: - typedef __mutex __mutex_type; - - private: - __mutex_type& _M_device; - - __scoped_lock(const __scoped_lock&); - __scoped_lock& operator=(const __scoped_lock&); - - public: - explicit __scoped_lock(__mutex_type& __name) : _M_device(__name) - { _M_device.lock(); } - - ~__scoped_lock() throw() - { _M_device.unlock(); } - }; - - - class __cond - { - private: - - __gthread_cond_t _M_cond = { { {0}, {0}, {0, 0}, {0, 0}, 0, 0, {0, 0} } }; - - - - - __cond(const __cond&); - __cond& operator=(const __cond&); - - public: - __cond() - { - - - - - } -# 277 "/usr/include/c++/10/ext/concurrence.h" 3 - void broadcast() - { - - if (__gthread_active_p()) - { - if (__gthread_cond_broadcast(&_M_cond) != 0) - __throw_concurrence_broadcast_error(); - } - - } - - void wait(__mutex *mutex) - { - - { - if (__gthread_cond_wait(&_M_cond, mutex->gthread_mutex()) != 0) - __throw_concurrence_wait_error(); - } - - } - - void wait_recursive(__recursive_mutex *mutex) - { - - { - if (__gthread_cond_wait_recursive(&_M_cond, - mutex->gthread_recursive_mutex()) - != 0) - __throw_concurrence_wait_error(); - } - - } - }; - - - -} -# 77 "/usr/include/c++/10/memory" 2 3 - - -# 1 "/usr/include/c++/10/bits/uses_allocator.h" 1 3 -# 35 "/usr/include/c++/10/bits/uses_allocator.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - struct __erased_type { }; - - - - - template - using __is_erased_or_convertible - = __or_, is_same<_Tp, __erased_type>>; - - - struct allocator_arg_t { explicit allocator_arg_t() = default; }; - - constexpr allocator_arg_t allocator_arg = - allocator_arg_t(); - - template> - struct __uses_allocator_helper - : false_type { }; - - template - struct __uses_allocator_helper<_Tp, _Alloc, - __void_t> - : __is_erased_or_convertible<_Alloc, typename _Tp::allocator_type>::type - { }; - - - template - struct uses_allocator - : __uses_allocator_helper<_Tp, _Alloc>::type - { }; - - struct __uses_alloc_base { }; - - struct __uses_alloc0 : __uses_alloc_base - { - struct _Sink { void operator=(const void*) { } } _M_a; - }; - - template - struct __uses_alloc1 : __uses_alloc_base { const _Alloc* _M_a; }; - - template - struct __uses_alloc2 : __uses_alloc_base { const _Alloc* _M_a; }; - - template - struct __uses_alloc; - - template - struct __uses_alloc - : conditional< - is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>::value, - __uses_alloc1<_Alloc>, - __uses_alloc2<_Alloc>>::type - { - - - static_assert(__or_< - is_constructible<_Tp, allocator_arg_t, const _Alloc&, _Args...>, - is_constructible<_Tp, _Args..., const _Alloc&>>::value, - "construction with an allocator must be possible" - " if uses_allocator is true"); - }; - - template - struct __uses_alloc - : __uses_alloc0 { }; - - template - using __uses_alloc_t = - __uses_alloc::value, _Tp, _Alloc, _Args...>; - - template - - inline __uses_alloc_t<_Tp, _Alloc, _Args...> - __use_alloc(const _Alloc& __a) - { - __uses_alloc_t<_Tp, _Alloc, _Args...> __ret; - __ret._M_a = std::__addressof(__a); - return __ret; - } - - template - void - __use_alloc(const _Alloc&&) = delete; - - - - - - - - template class _Predicate, - typename _Tp, typename _Alloc, typename... _Args> - struct __is_uses_allocator_predicate - : conditional::value, - __or_<_Predicate<_Tp, allocator_arg_t, _Alloc, _Args...>, - _Predicate<_Tp, _Args..., _Alloc>>, - _Predicate<_Tp, _Args...>>::type { }; - - template - struct __is_uses_allocator_constructible - : __is_uses_allocator_predicate - { }; - - - template - constexpr bool __is_uses_allocator_constructible_v = - __is_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; - - - template - struct __is_nothrow_uses_allocator_constructible - : __is_uses_allocator_predicate - { }; - - - - template - constexpr bool - __is_nothrow_uses_allocator_constructible_v = - __is_nothrow_uses_allocator_constructible<_Tp, _Alloc, _Args...>::value; - - - template - void __uses_allocator_construct_impl(__uses_alloc0 __a, _Tp* __ptr, - _Args&&... __args) - { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)...); } - - template - void __uses_allocator_construct_impl(__uses_alloc1<_Alloc> __a, _Tp* __ptr, - _Args&&... __args) - { - ::new ((void*)__ptr) _Tp(allocator_arg, *__a._M_a, - std::forward<_Args>(__args)...); - } - - template - void __uses_allocator_construct_impl(__uses_alloc2<_Alloc> __a, _Tp* __ptr, - _Args&&... __args) - { ::new ((void*)__ptr) _Tp(std::forward<_Args>(__args)..., *__a._M_a); } - - template - void __uses_allocator_construct(const _Alloc& __a, _Tp* __ptr, - _Args&&... __args) - { - std::__uses_allocator_construct_impl( - std::__use_alloc<_Tp, _Alloc, _Args...>(__a), __ptr, - std::forward<_Args>(__args)...); - } - - -} -# 80 "/usr/include/c++/10/memory" 2 3 - - - -# 1 "/usr/include/c++/10/bits/unique_ptr.h" 1 3 -# 36 "/usr/include/c++/10/bits/unique_ptr.h" 3 -# 1 "/usr/include/c++/10/utility" 1 3 -# 58 "/usr/include/c++/10/utility" 3 - -# 59 "/usr/include/c++/10/utility" 3 -# 69 "/usr/include/c++/10/utility" 3 -# 1 "/usr/include/c++/10/bits/stl_relops.h" 1 3 -# 67 "/usr/include/c++/10/bits/stl_relops.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - namespace rel_ops - { -# 85 "/usr/include/c++/10/bits/stl_relops.h" 3 - template - inline bool - operator!=(const _Tp& __x, const _Tp& __y) - { return !(__x == __y); } -# 98 "/usr/include/c++/10/bits/stl_relops.h" 3 - template - inline bool - operator>(const _Tp& __x, const _Tp& __y) - { return __y < __x; } -# 111 "/usr/include/c++/10/bits/stl_relops.h" 3 - template - inline bool - operator<=(const _Tp& __x, const _Tp& __y) - { return !(__y < __x); } -# 124 "/usr/include/c++/10/bits/stl_relops.h" 3 - template - inline bool - operator>=(const _Tp& __x, const _Tp& __y) - { return !(__x < __y); } - } - - -} -# 70 "/usr/include/c++/10/utility" 2 3 -# 82 "/usr/include/c++/10/utility" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - template - struct tuple_size; - - - - - - template::type, - typename = typename enable_if::value>::type, - size_t = tuple_size<_Tp>::value> - using __enable_if_has_tuple_size = _Tp; - - template - struct tuple_size> - : public tuple_size<_Tp> { }; - - template - struct tuple_size> - : public tuple_size<_Tp> { }; - - template - struct tuple_size> - : public tuple_size<_Tp> { }; - - - template - struct tuple_element; - - - template - using __tuple_element_t = typename tuple_element<__i, _Tp>::type; - - template - struct tuple_element<__i, const _Tp> - { - typedef typename add_const<__tuple_element_t<__i, _Tp>>::type type; - }; - - template - struct tuple_element<__i, volatile _Tp> - { - typedef typename add_volatile<__tuple_element_t<__i, _Tp>>::type type; - }; - - template - struct tuple_element<__i, const volatile _Tp> - { - typedef typename add_cv<__tuple_element_t<__i, _Tp>>::type type; - }; - - - - - - - - template - using tuple_element_t = typename tuple_element<__i, _Tp>::type; - - - - - - template - struct __is_tuple_like_impl> : true_type - { }; - - - template - struct tuple_size> - : public integral_constant { }; - - - template - struct tuple_element<0, std::pair<_Tp1, _Tp2>> - { typedef _Tp1 type; }; - - - template - struct tuple_element<1, std::pair<_Tp1, _Tp2>> - { typedef _Tp2 type; }; - - template - struct __pair_get; - - template<> - struct __pair_get<0> - { - template - static constexpr _Tp1& - __get(std::pair<_Tp1, _Tp2>& __pair) noexcept - { return __pair.first; } - - template - static constexpr _Tp1&& - __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept - { return std::forward<_Tp1>(__pair.first); } - - template - static constexpr const _Tp1& - __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept - { return __pair.first; } - - template - static constexpr const _Tp1&& - __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept - { return std::forward(__pair.first); } - }; - - template<> - struct __pair_get<1> - { - template - static constexpr _Tp2& - __get(std::pair<_Tp1, _Tp2>& __pair) noexcept - { return __pair.second; } - - template - static constexpr _Tp2&& - __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept - { return std::forward<_Tp2>(__pair.second); } - - template - static constexpr const _Tp2& - __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept - { return __pair.second; } - - template - static constexpr const _Tp2&& - __const_move_get(const std::pair<_Tp1, _Tp2>&& __pair) noexcept - { return std::forward(__pair.second); } - }; - - template - constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& - get(std::pair<_Tp1, _Tp2>& __in) noexcept - { return __pair_get<_Int>::__get(__in); } - - template - constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& - get(std::pair<_Tp1, _Tp2>&& __in) noexcept - { return __pair_get<_Int>::__move_get(std::move(__in)); } - - template - constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type& - get(const std::pair<_Tp1, _Tp2>& __in) noexcept - { return __pair_get<_Int>::__const_get(__in); } - - template - constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&& - get(const std::pair<_Tp1, _Tp2>&& __in) noexcept - { return __pair_get<_Int>::__const_move_get(std::move(__in)); } - - - - - - template - constexpr _Tp& - get(pair<_Tp, _Up>& __p) noexcept - { return __p.first; } - - template - constexpr const _Tp& - get(const pair<_Tp, _Up>& __p) noexcept - { return __p.first; } - - template - constexpr _Tp&& - get(pair<_Tp, _Up>&& __p) noexcept - { return std::move(__p.first); } - - template - constexpr const _Tp&& - get(const pair<_Tp, _Up>&& __p) noexcept - { return std::move(__p.first); } - - template - constexpr _Tp& - get(pair<_Up, _Tp>& __p) noexcept - { return __p.second; } - - template - constexpr const _Tp& - get(const pair<_Up, _Tp>& __p) noexcept - { return __p.second; } - - template - constexpr _Tp&& - get(pair<_Up, _Tp>&& __p) noexcept - { return std::move(__p.second); } - - template - constexpr const _Tp&& - get(const pair<_Up, _Tp>&& __p) noexcept - { return std::move(__p.second); } - - - - - template - - inline _Tp - exchange(_Tp& __obj, _Up&& __new_val) - { return std::__exchange(__obj, std::forward<_Up>(__new_val)); } - - - - - - template struct _Index_tuple { }; -# 307 "/usr/include/c++/10/utility" 3 - template - struct _Build_index_tuple - { - - - - - - - using __type = _Index_tuple<__integer_pack(_Num)...>; - - }; - - - - - - - template - struct integer_sequence - { - typedef _Tp value_type; - static constexpr size_t size() noexcept { return sizeof...(_Idx); } - }; - - - template - using make_integer_sequence - - - - = integer_sequence<_Tp, __integer_pack(_Num)...>; - - - - - - template - using index_sequence = integer_sequence; - - - template - using make_index_sequence = make_integer_sequence; - - - template - using index_sequence_for = make_index_sequence; -# 473 "/usr/include/c++/10/utility" 3 - -} -# 37 "/usr/include/c++/10/bits/unique_ptr.h" 2 3 -# 1 "/usr/include/c++/10/tuple" 1 3 -# 32 "/usr/include/c++/10/tuple" 3 - -# 33 "/usr/include/c++/10/tuple" 3 - - - - - - -# 1 "/usr/include/c++/10/array" 1 3 -# 32 "/usr/include/c++/10/array" 3 - -# 33 "/usr/include/c++/10/array" 3 -# 43 "/usr/include/c++/10/array" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - template - struct __array_traits - { - typedef _Tp _Type[_Nm]; - typedef __is_swappable<_Tp> _Is_swappable; - typedef __is_nothrow_swappable<_Tp> _Is_nothrow_swappable; - - static constexpr _Tp& - _S_ref(const _Type& __t, std::size_t __n) noexcept - { return const_cast<_Tp&>(__t[__n]); } - - static constexpr _Tp* - _S_ptr(const _Type& __t) noexcept - { return const_cast<_Tp*>(__t); } - }; - - template - struct __array_traits<_Tp, 0> - { - struct _Type { }; - typedef true_type _Is_swappable; - typedef true_type _Is_nothrow_swappable; - - static constexpr _Tp& - _S_ref(const _Type&, std::size_t) noexcept - { return *static_cast<_Tp*>(nullptr); } - - static constexpr _Tp* - _S_ptr(const _Type&) noexcept - { return nullptr; } - }; -# 93 "/usr/include/c++/10/array" 3 - template - struct array - { - typedef _Tp value_type; - typedef value_type* pointer; - typedef const value_type* const_pointer; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; - - - typedef std::__array_traits<_Tp, _Nm> _AT_Type; - typename _AT_Type::_Type _M_elems; - - - - - void - fill(const value_type& __u) - { std::fill_n(begin(), size(), __u); } - - void - swap(array& __other) - noexcept(_AT_Type::_Is_nothrow_swappable::value) - { std::swap_ranges(begin(), end(), __other.begin()); } - - - iterator - begin() noexcept - { return iterator(data()); } - - const_iterator - begin() const noexcept - { return const_iterator(data()); } - - iterator - end() noexcept - { return iterator(data() + _Nm); } - - const_iterator - end() const noexcept - { return const_iterator(data() + _Nm); } - - reverse_iterator - rbegin() noexcept - { return reverse_iterator(end()); } - - const_reverse_iterator - rbegin() const noexcept - { return const_reverse_iterator(end()); } - - reverse_iterator - rend() noexcept - { return reverse_iterator(begin()); } - - const_reverse_iterator - rend() const noexcept - { return const_reverse_iterator(begin()); } - - const_iterator - cbegin() const noexcept - { return const_iterator(data()); } - - const_iterator - cend() const noexcept - { return const_iterator(data() + _Nm); } - - const_reverse_iterator - crbegin() const noexcept - { return const_reverse_iterator(end()); } - - const_reverse_iterator - crend() const noexcept - { return const_reverse_iterator(begin()); } - - - constexpr size_type - size() const noexcept { return _Nm; } - - constexpr size_type - max_size() const noexcept { return _Nm; } - - constexpr bool - empty() const noexcept { return size() == 0; } - - - reference - operator[](size_type __n) noexcept - { return _AT_Type::_S_ref(_M_elems, __n); } - - constexpr const_reference - operator[](size_type __n) const noexcept - { return _AT_Type::_S_ref(_M_elems, __n); } - - reference - at(size_type __n) - { - if (__n >= _Nm) - std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") - , - __n, _Nm); - return _AT_Type::_S_ref(_M_elems, __n); - } - - constexpr const_reference - at(size_type __n) const - { - - - return __n < _Nm ? _AT_Type::_S_ref(_M_elems, __n) - : (std::__throw_out_of_range_fmt(("array::at: __n (which is %zu) " ">= _Nm (which is %zu)") - , - __n, _Nm), - _AT_Type::_S_ref(_M_elems, 0)); - } - - reference - front() noexcept - { return *begin(); } - - constexpr const_reference - front() const noexcept - { return _AT_Type::_S_ref(_M_elems, 0); } - - reference - back() noexcept - { return _Nm ? *(end() - 1) : *end(); } - - constexpr const_reference - back() const noexcept - { - return _Nm ? _AT_Type::_S_ref(_M_elems, _Nm - 1) - : _AT_Type::_S_ref(_M_elems, 0); - } - - pointer - data() noexcept - { return _AT_Type::_S_ptr(_M_elems); } - - const_pointer - data() const noexcept - { return _AT_Type::_S_ptr(_M_elems); } - }; -# 250 "/usr/include/c++/10/array" 3 - template - - inline bool - operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return std::equal(__one.begin(), __one.end(), __two.begin()); } -# 279 "/usr/include/c++/10/array" 3 - template - - inline bool - operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one == __two); } - - template - - inline bool - operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b) - { - return std::lexicographical_compare(__a.begin(), __a.end(), - __b.begin(), __b.end()); - } - - template - - inline bool - operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return __two < __one; } - - template - - inline bool - operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one > __two); } - - template - - inline bool - operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) - { return !(__one < __two); } - - - - template - - inline - - - typename enable_if< - std::__array_traits<_Tp, _Nm>::_Is_swappable::value - >::type - - - - swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two) - noexcept(noexcept(__one.swap(__two))) - { __one.swap(__two); } - - - template - typename enable_if< - !std::__array_traits<_Tp, _Nm>::_Is_swappable::value>::type - swap(array<_Tp, _Nm>&, array<_Tp, _Nm>&) = delete; - - - template - constexpr _Tp& - get(array<_Tp, _Nm>& __arr) noexcept - { - static_assert(_Int < _Nm, "array index is within bounds"); - return std::__array_traits<_Tp, _Nm>:: - _S_ref(__arr._M_elems, _Int); - } - - template - constexpr _Tp&& - get(array<_Tp, _Nm>&& __arr) noexcept - { - static_assert(_Int < _Nm, "array index is within bounds"); - return std::move(std::get<_Int>(__arr)); - } - - template - constexpr const _Tp& - get(const array<_Tp, _Nm>& __arr) noexcept - { - static_assert(_Int < _Nm, "array index is within bounds"); - return std::__array_traits<_Tp, _Nm>:: - _S_ref(__arr._M_elems, _Int); - } - - template - constexpr const _Tp&& - get(const array<_Tp, _Nm>&& __arr) noexcept - { - static_assert(_Int < _Nm, "array index is within bounds"); - return std::move(std::get<_Int>(__arr)); - } -# 408 "/usr/include/c++/10/array" 3 - -} - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - template - struct tuple_size; - - - template - struct tuple_size> - : public integral_constant { }; - - - template - struct tuple_element; - - - template - struct tuple_element<_Int, std::array<_Tp, _Nm>> - { - static_assert(_Int < _Nm, "index is out of bounds"); - typedef _Tp type; - }; - - template - struct __is_tuple_like_impl> : true_type - { }; - - -} -# 40 "/usr/include/c++/10/tuple" 2 3 - -# 1 "/usr/include/c++/10/bits/invoke.h" 1 3 -# 33 "/usr/include/c++/10/bits/invoke.h" 3 - -# 34 "/usr/include/c++/10/bits/invoke.h" 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 52 "/usr/include/c++/10/bits/invoke.h" 3 - template::type> - constexpr _Up&& - __invfwd(typename remove_reference<_Tp>::type& __t) noexcept - { return static_cast<_Up&&>(__t); } - - template - constexpr _Res - __invoke_impl(__invoke_other, _Fn&& __f, _Args&&... __args) - { return std::forward<_Fn>(__f)(std::forward<_Args>(__args)...); } - - template - constexpr _Res - __invoke_impl(__invoke_memfun_ref, _MemFun&& __f, _Tp&& __t, - _Args&&... __args) - { return (__invfwd<_Tp>(__t).*__f)(std::forward<_Args>(__args)...); } - - template - constexpr _Res - __invoke_impl(__invoke_memfun_deref, _MemFun&& __f, _Tp&& __t, - _Args&&... __args) - { - return ((*std::forward<_Tp>(__t)).*__f)(std::forward<_Args>(__args)...); - } - - template - constexpr _Res - __invoke_impl(__invoke_memobj_ref, _MemPtr&& __f, _Tp&& __t) - { return __invfwd<_Tp>(__t).*__f; } - - template - constexpr _Res - __invoke_impl(__invoke_memobj_deref, _MemPtr&& __f, _Tp&& __t) - { return (*std::forward<_Tp>(__t)).*__f; } - - - template - constexpr typename __invoke_result<_Callable, _Args...>::type - __invoke(_Callable&& __fn, _Args&&... __args) - noexcept(__is_nothrow_invocable<_Callable, _Args...>::value) - { - using __result = __invoke_result<_Callable, _Args...>; - using __type = typename __result::type; - using __tag = typename __result::__invoke_type; - return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), - std::forward<_Args>(__args)...); - } -# 118 "/usr/include/c++/10/bits/invoke.h" 3 - template - using __can_invoke_as_void = __enable_if_t< - __and_, __is_invocable<_Callable, _Args...>>::value, - _Res - >; - - template - using __can_invoke_as_nonvoid = __enable_if_t< - __and_<__not_>, - is_convertible::type, - _Res> - >::value, - _Res - >; - - - template - constexpr __can_invoke_as_nonvoid<_Res, _Callable, _Args...> - __invoke_r(_Callable&& __fn, _Args&&... __args) - { - using __result = __invoke_result<_Callable, _Args...>; - using __type = typename __result::type; - using __tag = typename __result::__invoke_type; - return std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), - std::forward<_Args>(__args)...); - } - - - template - constexpr __can_invoke_as_void<_Res, _Callable, _Args...> - __invoke_r(_Callable&& __fn, _Args&&... __args) - { - using __result = __invoke_result<_Callable, _Args...>; - using __type = typename __result::type; - using __tag = typename __result::__invoke_type; - std::__invoke_impl<__type>(__tag{}, std::forward<_Callable>(__fn), - std::forward<_Args>(__args)...); - } - - - -} -# 42 "/usr/include/c++/10/tuple" 2 3 - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - template - class tuple; - - template - struct __is_empty_non_tuple : is_empty<_Tp> { }; - - - template - struct __is_empty_non_tuple> : false_type { }; - - - template - using __empty_not_final - = typename conditional<__is_final(_Tp), false_type, - __is_empty_non_tuple<_Tp>>::type; - - template::value> - struct _Head_base; - - template - struct _Head_base<_Idx, _Head, true> - : public _Head - { - constexpr _Head_base() - : _Head() { } - - constexpr _Head_base(const _Head& __h) - : _Head(__h) { } - - constexpr _Head_base(const _Head_base&) = default; - constexpr _Head_base(_Head_base&&) = default; - - template - constexpr _Head_base(_UHead&& __h) - : _Head(std::forward<_UHead>(__h)) { } - - _Head_base(allocator_arg_t, __uses_alloc0) - : _Head() { } - - template - _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) - : _Head(allocator_arg, *__a._M_a) { } - - template - _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) - : _Head(*__a._M_a) { } - - template - _Head_base(__uses_alloc0, _UHead&& __uhead) - : _Head(std::forward<_UHead>(__uhead)) { } - - template - _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) - : _Head(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) { } - - template - _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) - : _Head(std::forward<_UHead>(__uhead), *__a._M_a) { } - - static constexpr _Head& - _M_head(_Head_base& __b) noexcept { return __b; } - - static constexpr const _Head& - _M_head(const _Head_base& __b) noexcept { return __b; } - }; - - template - struct _Head_base<_Idx, _Head, false> - { - constexpr _Head_base() - : _M_head_impl() { } - - constexpr _Head_base(const _Head& __h) - : _M_head_impl(__h) { } - - constexpr _Head_base(const _Head_base&) = default; - constexpr _Head_base(_Head_base&&) = default; - - template - constexpr _Head_base(_UHead&& __h) - : _M_head_impl(std::forward<_UHead>(__h)) { } - - - _Head_base(allocator_arg_t, __uses_alloc0) - : _M_head_impl() { } - - template - _Head_base(allocator_arg_t, __uses_alloc1<_Alloc> __a) - : _M_head_impl(allocator_arg, *__a._M_a) { } - - template - _Head_base(allocator_arg_t, __uses_alloc2<_Alloc> __a) - : _M_head_impl(*__a._M_a) { } - - template - - _Head_base(__uses_alloc0, _UHead&& __uhead) - : _M_head_impl(std::forward<_UHead>(__uhead)) { } - - template - _Head_base(__uses_alloc1<_Alloc> __a, _UHead&& __uhead) - : _M_head_impl(allocator_arg, *__a._M_a, std::forward<_UHead>(__uhead)) - { } - - template - _Head_base(__uses_alloc2<_Alloc> __a, _UHead&& __uhead) - : _M_head_impl(std::forward<_UHead>(__uhead), *__a._M_a) { } - - static constexpr _Head& - _M_head(_Head_base& __b) noexcept { return __b._M_head_impl; } - - static constexpr const _Head& - _M_head(const _Head_base& __b) noexcept { return __b._M_head_impl; } - - _Head _M_head_impl; - }; -# 182 "/usr/include/c++/10/tuple" 3 - template - struct _Tuple_impl; - - - - - - - template - struct _Tuple_impl<_Idx, _Head, _Tail...> - : public _Tuple_impl<_Idx + 1, _Tail...>, - private _Head_base<_Idx, _Head> - { - template friend class _Tuple_impl; - - typedef _Tuple_impl<_Idx + 1, _Tail...> _Inherited; - typedef _Head_base<_Idx, _Head> _Base; - - static constexpr _Head& - _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } - - static constexpr const _Head& - _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } - - static constexpr _Inherited& - _M_tail(_Tuple_impl& __t) noexcept { return __t; } - - static constexpr const _Inherited& - _M_tail(const _Tuple_impl& __t) noexcept { return __t; } - - constexpr _Tuple_impl() - : _Inherited(), _Base() { } - - explicit - constexpr _Tuple_impl(const _Head& __head, const _Tail&... __tail) - : _Inherited(__tail...), _Base(__head) { } - - template::type> - explicit - constexpr _Tuple_impl(_UHead&& __head, _UTail&&... __tail) - : _Inherited(std::forward<_UTail>(__tail)...), - _Base(std::forward<_UHead>(__head)) { } - - constexpr _Tuple_impl(const _Tuple_impl&) = default; - - - - _Tuple_impl& operator=(const _Tuple_impl&) = delete; - - constexpr - _Tuple_impl(_Tuple_impl&& __in) - noexcept(__and_, - is_nothrow_move_constructible<_Inherited>>::value) - : _Inherited(std::move(_M_tail(__in))), - _Base(std::forward<_Head>(_M_head(__in))) { } - - template - constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UElements...>& __in) - : _Inherited(_Tuple_impl<_Idx, _UElements...>::_M_tail(__in)), - _Base(_Tuple_impl<_Idx, _UElements...>::_M_head(__in)) { } - - template - constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) - : _Inherited(std::move - (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), - _Base(std::forward<_UHead> - (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) - : _Inherited(__tag, __a), - _Base(__tag, __use_alloc<_Head>(__a)) { } - - template - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Head& __head, const _Tail&... __tail) - : _Inherited(__tag, __a, __tail...), - _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } - - template::type> - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _UHead&& __head, _UTail&&... __tail) - : _Inherited(__tag, __a, std::forward<_UTail>(__tail)...), - _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), - std::forward<_UHead>(__head)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Tuple_impl& __in) - : _Inherited(__tag, __a, _M_tail(__in)), - _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _Tuple_impl&& __in) - : _Inherited(__tag, __a, std::move(_M_tail(__in))), - _Base(__use_alloc<_Head, _Alloc, _Head>(__a), - std::forward<_Head>(_M_head(__in))) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Tuple_impl<_Idx, _UHead, _UTails...>& __in) - : _Inherited(__tag, __a, - _Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in)), - _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), - _Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _Tuple_impl<_Idx, _UHead, _UTails...>&& __in) - : _Inherited(__tag, __a, std::move - (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))), - _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), - std::forward<_UHead> - (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in))) { } - - template - - void - _M_assign(const _Tuple_impl<_Idx, _UElements...>& __in) - { - _M_head(*this) = _Tuple_impl<_Idx, _UElements...>::_M_head(__in); - _M_tail(*this)._M_assign( - _Tuple_impl<_Idx, _UElements...>::_M_tail(__in)); - } - - template - - void - _M_assign(_Tuple_impl<_Idx, _UHead, _UTails...>&& __in) - { - _M_head(*this) = std::forward<_UHead> - (_Tuple_impl<_Idx, _UHead, _UTails...>::_M_head(__in)); - _M_tail(*this)._M_assign( - std::move(_Tuple_impl<_Idx, _UHead, _UTails...>::_M_tail(__in))); - } - - protected: - - void - _M_swap(_Tuple_impl& __in) - { - using std::swap; - swap(_M_head(*this), _M_head(__in)); - _Inherited::_M_swap(_M_tail(__in)); - } - }; - - - template - struct _Tuple_impl<_Idx, _Head> - : private _Head_base<_Idx, _Head> - { - template friend class _Tuple_impl; - - typedef _Head_base<_Idx, _Head> _Base; - - static constexpr _Head& - _M_head(_Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } - - static constexpr const _Head& - _M_head(const _Tuple_impl& __t) noexcept { return _Base::_M_head(__t); } - - constexpr _Tuple_impl() - : _Base() { } - - explicit - constexpr _Tuple_impl(const _Head& __head) - : _Base(__head) { } - - template - explicit - constexpr _Tuple_impl(_UHead&& __head) - : _Base(std::forward<_UHead>(__head)) { } - - constexpr _Tuple_impl(const _Tuple_impl&) = default; - - - - _Tuple_impl& operator=(const _Tuple_impl&) = delete; - - constexpr - _Tuple_impl(_Tuple_impl&& __in) - noexcept(is_nothrow_move_constructible<_Head>::value) - : _Base(std::forward<_Head>(_M_head(__in))) { } - - template - constexpr _Tuple_impl(const _Tuple_impl<_Idx, _UHead>& __in) - : _Base(_Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } - - template - constexpr _Tuple_impl(_Tuple_impl<_Idx, _UHead>&& __in) - : _Base(std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) - { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a) - : _Base(__tag, __use_alloc<_Head>(__a)) { } - - template - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Head& __head) - : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), __head) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _UHead&& __head) - : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), - std::forward<_UHead>(__head)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Tuple_impl& __in) - : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), _M_head(__in)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _Tuple_impl&& __in) - : _Base(__use_alloc<_Head, _Alloc, _Head>(__a), - std::forward<_Head>(_M_head(__in))) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - const _Tuple_impl<_Idx, _UHead>& __in) - : _Base(__use_alloc<_Head, _Alloc, const _UHead&>(__a), - _Tuple_impl<_Idx, _UHead>::_M_head(__in)) { } - - template - - _Tuple_impl(allocator_arg_t __tag, const _Alloc& __a, - _Tuple_impl<_Idx, _UHead>&& __in) - : _Base(__use_alloc<_Head, _Alloc, _UHead>(__a), - std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in))) - { } - - template - - void - _M_assign(const _Tuple_impl<_Idx, _UHead>& __in) - { - _M_head(*this) = _Tuple_impl<_Idx, _UHead>::_M_head(__in); - } - - template - - void - _M_assign(_Tuple_impl<_Idx, _UHead>&& __in) - { - _M_head(*this) - = std::forward<_UHead>(_Tuple_impl<_Idx, _UHead>::_M_head(__in)); - } - - protected: - - void - _M_swap(_Tuple_impl& __in) - { - using std::swap; - swap(_M_head(*this), _M_head(__in)); - } - }; - - - - template - struct _TupleConstraints - { - template - using is_constructible - = __bool_constant<__is_constructible(_Tp, _Up)>; - - - - - template - static constexpr bool __is_implicitly_constructible() - { - return __and_..., - is_convertible<_UTypes, _Types>... - >::value; - } - - - - - template - static constexpr bool __is_explicitly_constructible() - { - return __and_..., - __not_<__and_...>> - >::value; - } - - static constexpr bool __is_implicitly_default_constructible() - { - return __and_... - >::value; - } - - static constexpr bool __is_explicitly_default_constructible() - { - return __and_..., - __not_<__and_< - std::__is_implicitly_default_constructible<_Types>...> - >>::value; - } - }; - - - - template - struct _TupleConstraints - { - template - static constexpr bool __is_implicitly_constructible() - { return false; } - - template - static constexpr bool __is_explicitly_constructible() - { return false; } - }; - - - template - class tuple : public _Tuple_impl<0, _Elements...> - { - typedef _Tuple_impl<0, _Elements...> _Inherited; - - template - using _TCC = _TupleConstraints<_Cond, _Elements...>; - - - template - using _ImplicitDefaultCtor = __enable_if_t< - _TCC<_Dummy>::__is_implicitly_default_constructible(), - bool>; - - - template - using _ExplicitDefaultCtor = __enable_if_t< - _TCC<_Dummy>::__is_explicitly_default_constructible(), - bool>; - - - template - using _ImplicitCtor = __enable_if_t< - _TCC<_Cond>::template __is_implicitly_constructible<_Args...>(), - bool>; - - - template - using _ExplicitCtor = __enable_if_t< - _TCC<_Cond>::template __is_explicitly_constructible<_Args...>(), - bool>; - - template - static constexpr - __enable_if_t - __assignable() - { return __and_...>::value; } - - - template - static constexpr bool __nothrow_assignable() - { - return - __and_...>::value; - } - - - template - static constexpr bool __nothrow_constructible() - { - return - __and_...>::value; - } - - - template - static constexpr bool __valid_args() - { - return sizeof...(_Elements) == 1 - && !is_same>::value; - } - - - template - static constexpr bool __valid_args() - { return (sizeof...(_Tail) + 2) == sizeof...(_Elements); } -# 595 "/usr/include/c++/10/tuple" 3 - template> - struct _UseOtherCtor - : false_type - { }; - - - template - struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Up>> - : __or_, is_constructible<_Tp, _Tuple>> - { }; - - - template - struct _UseOtherCtor<_Tuple, tuple<_Tp>, tuple<_Tp>> - : true_type - { }; - - - - - template - static constexpr bool __use_other_ctor() - { return _UseOtherCtor<_Tuple>::value; } - - public: - template::value> = true> - constexpr - tuple() - noexcept(__and_...>::value) - : _Inherited() { } - - template::value> = false> - explicit constexpr - tuple() - noexcept(__and_...>::value) - : _Inherited() { } - - template= 1), - _ImplicitCtor<_NotEmpty, const _Elements&...> = true> - constexpr - tuple(const _Elements&... __elements) - noexcept(__nothrow_constructible()) - : _Inherited(__elements...) { } - - template= 1), - _ExplicitCtor<_NotEmpty, const _Elements&...> = false> - explicit constexpr - tuple(const _Elements&... __elements) - noexcept(__nothrow_constructible()) - : _Inherited(__elements...) { } - - template(), - _ImplicitCtor<_Valid, _UElements...> = true> - constexpr - tuple(_UElements&&... __elements) - noexcept(__nothrow_constructible<_UElements...>()) - : _Inherited(std::forward<_UElements>(__elements)...) { } - - template(), - _ExplicitCtor<_Valid, _UElements...> = false> - explicit constexpr - tuple(_UElements&&... __elements) - noexcept(__nothrow_constructible<_UElements...>()) - : _Inherited(std::forward<_UElements>(__elements)...) { } - - constexpr tuple(const tuple&) = default; - - constexpr tuple(tuple&&) = default; - - template&>(), - _ImplicitCtor<_Valid, const _UElements&...> = true> - constexpr - tuple(const tuple<_UElements...>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(static_cast&>(__in)) - { } - - template&>(), - _ExplicitCtor<_Valid, const _UElements&...> = false> - explicit constexpr - tuple(const tuple<_UElements...>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(static_cast&>(__in)) - { } - - template&&>(), - _ImplicitCtor<_Valid, _UElements...> = true> - constexpr - tuple(tuple<_UElements...>&& __in) - noexcept(__nothrow_constructible<_UElements...>()) - : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } - - template&&>(), - _ExplicitCtor<_Valid, _UElements...> = false> - explicit constexpr - tuple(tuple<_UElements...>&& __in) - noexcept(__nothrow_constructible<_UElements...>()) - : _Inherited(static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) { } - - - - template::value> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a) - : _Inherited(__tag, __a) { } - - template= 1), - _ImplicitCtor<_NotEmpty, const _Elements&...> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const _Elements&... __elements) - : _Inherited(__tag, __a, __elements...) { } - - template= 1), - _ExplicitCtor<_NotEmpty, const _Elements&...> = false> - - explicit - tuple(allocator_arg_t __tag, const _Alloc& __a, - const _Elements&... __elements) - : _Inherited(__tag, __a, __elements...) { } - - template(), - _ImplicitCtor<_Valid, _UElements...> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - _UElements&&... __elements) - : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) - { } - - template(), - _ExplicitCtor<_Valid, _UElements...> = false> - - explicit - tuple(allocator_arg_t __tag, const _Alloc& __a, - _UElements&&... __elements) - : _Inherited(__tag, __a, std::forward<_UElements>(__elements)...) - { } - - template - - tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) - : _Inherited(__tag, __a, static_cast(__in)) { } - - template - - tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) - : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } - - template&>(), - _ImplicitCtor<_Valid, const _UElements&...> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const tuple<_UElements...>& __in) - : _Inherited(__tag, __a, - static_cast&>(__in)) - { } - - template&>(), - _ExplicitCtor<_Valid, const _UElements&...> = false> - - explicit - tuple(allocator_arg_t __tag, const _Alloc& __a, - const tuple<_UElements...>& __in) - : _Inherited(__tag, __a, - static_cast&>(__in)) - { } - - template&&>(), - _ImplicitCtor<_Valid, _UElements...> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - tuple<_UElements...>&& __in) - : _Inherited(__tag, __a, - static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) - { } - - template&&>(), - _ExplicitCtor<_Valid, _UElements...> = false> - - explicit - tuple(allocator_arg_t __tag, const _Alloc& __a, - tuple<_UElements...>&& __in) - : _Inherited(__tag, __a, - static_cast<_Tuple_impl<0, _UElements...>&&>(__in)) - { } - - - - - tuple& - operator=(typename conditional<__assignable(), - const tuple&, - const __nonesuch&>::type __in) - noexcept(__nothrow_assignable()) - { - this->_M_assign(__in); - return *this; - } - - - tuple& - operator=(typename conditional<__assignable<_Elements...>(), - tuple&&, - __nonesuch&&>::type __in) - noexcept(__nothrow_assignable<_Elements...>()) - { - this->_M_assign(std::move(__in)); - return *this; - } - - template - - __enable_if_t<__assignable(), tuple&> - operator=(const tuple<_UElements...>& __in) - noexcept(__nothrow_assignable()) - { - this->_M_assign(__in); - return *this; - } - - template - - __enable_if_t<__assignable<_UElements...>(), tuple&> - operator=(tuple<_UElements...>&& __in) - noexcept(__nothrow_assignable<_UElements...>()) - { - this->_M_assign(std::move(__in)); - return *this; - } - - - - void - swap(tuple& __in) - noexcept(__and_<__is_nothrow_swappable<_Elements>...>::value) - { _Inherited::_M_swap(__in); } - }; -# 871 "/usr/include/c++/10/tuple" 3 - template<> - class tuple<> - { - public: - void swap(tuple&) noexcept { } - - - tuple() = default; - - template - - tuple(allocator_arg_t, const _Alloc&) noexcept { } - template - - tuple(allocator_arg_t, const _Alloc&, const tuple&) noexcept { } - }; - - - - template - class tuple<_T1, _T2> : public _Tuple_impl<0, _T1, _T2> - { - typedef _Tuple_impl<0, _T1, _T2> _Inherited; - - - template - using _ImplicitDefaultCtor = __enable_if_t< - _TupleConstraints<_Dummy, _U1, _U2>:: - __is_implicitly_default_constructible(), - bool>; - - - template - using _ExplicitDefaultCtor = __enable_if_t< - _TupleConstraints<_Dummy, _U1, _U2>:: - __is_explicitly_default_constructible(), - bool>; - - template - using _TCC = _TupleConstraints<_Dummy, _T1, _T2>; - - - template - using _ImplicitCtor = __enable_if_t< - _TCC<_Cond>::template __is_implicitly_constructible<_U1, _U2>(), - bool>; - - - template - using _ExplicitCtor = __enable_if_t< - _TCC<_Cond>::template __is_explicitly_constructible<_U1, _U2>(), - bool>; - - template - static constexpr bool __assignable() - { - return __and_, - is_assignable<_T2&, _U2>>::value; - } - - template - static constexpr bool __nothrow_assignable() - { - return __and_, - is_nothrow_assignable<_T2&, _U2>>::value; - } - - template - static constexpr bool __nothrow_constructible() - { - return __and_, - is_nothrow_constructible<_T2, _U2>>::value; - } - - static constexpr bool __nothrow_default_constructible() - { - return __and_, - is_nothrow_default_constructible<_T2>>::value; - } - - template - static constexpr bool __is_alloc_arg() - { return is_same<__remove_cvref_t<_U1>, allocator_arg_t>::value; } - - public: - template = true> - constexpr - tuple() - noexcept(__nothrow_default_constructible()) - : _Inherited() { } - - template = false> - explicit constexpr - tuple() - noexcept(__nothrow_default_constructible()) - : _Inherited() { } - - template = true> - constexpr - tuple(const _T1& __a1, const _T2& __a2) - noexcept(__nothrow_constructible()) - : _Inherited(__a1, __a2) { } - - template = false> - explicit constexpr - tuple(const _T1& __a1, const _T2& __a2) - noexcept(__nothrow_constructible()) - : _Inherited(__a1, __a2) { } - - template(), _U1, _U2> = true> - constexpr - tuple(_U1&& __a1, _U2&& __a2) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } - - template(), _U1, _U2> = false> - explicit constexpr - tuple(_U1&& __a1, _U2&& __a2) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(std::forward<_U1>(__a1), std::forward<_U2>(__a2)) { } - - constexpr tuple(const tuple&) = default; - - constexpr tuple(tuple&&) = default; - - template = true> - constexpr - tuple(const tuple<_U1, _U2>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(static_cast&>(__in)) { } - - template = false> - explicit constexpr - tuple(const tuple<_U1, _U2>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(static_cast&>(__in)) { } - - template = true> - constexpr - tuple(tuple<_U1, _U2>&& __in) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } - - template = false> - explicit constexpr - tuple(tuple<_U1, _U2>&& __in) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) { } - - template = true> - constexpr - tuple(const pair<_U1, _U2>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(__in.first, __in.second) { } - - template = false> - explicit constexpr - tuple(const pair<_U1, _U2>& __in) - noexcept(__nothrow_constructible()) - : _Inherited(__in.first, __in.second) { } - - template = true> - constexpr - tuple(pair<_U1, _U2>&& __in) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(std::forward<_U1>(__in.first), - std::forward<_U2>(__in.second)) { } - - template = false> - explicit constexpr - tuple(pair<_U1, _U2>&& __in) - noexcept(__nothrow_constructible<_U1, _U2>()) - : _Inherited(std::forward<_U1>(__in.first), - std::forward<_U2>(__in.second)) { } - - - - template::value, _T1, _T2> = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a) - : _Inherited(__tag, __a) { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const _T1& __a1, const _T2& __a2) - : _Inherited(__tag, __a, __a1, __a2) { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const _T1& __a1, const _T2& __a2) - : _Inherited(__tag, __a, __a1, __a2) { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, _U1&& __a1, _U2&& __a2) - : _Inherited(__tag, __a, std::forward<_U1>(__a1), - std::forward<_U2>(__a2)) { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, - _U1&& __a1, _U2&& __a2) - : _Inherited(__tag, __a, std::forward<_U1>(__a1), - std::forward<_U2>(__a2)) { } - - template - - tuple(allocator_arg_t __tag, const _Alloc& __a, const tuple& __in) - : _Inherited(__tag, __a, static_cast(__in)) { } - - template - - tuple(allocator_arg_t __tag, const _Alloc& __a, tuple&& __in) - : _Inherited(__tag, __a, static_cast<_Inherited&&>(__in)) { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const tuple<_U1, _U2>& __in) - : _Inherited(__tag, __a, - static_cast&>(__in)) - { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const tuple<_U1, _U2>& __in) - : _Inherited(__tag, __a, - static_cast&>(__in)) - { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) - : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) - { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, tuple<_U1, _U2>&& __in) - : _Inherited(__tag, __a, static_cast<_Tuple_impl<0, _U1, _U2>&&>(__in)) - { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const pair<_U1, _U2>& __in) - : _Inherited(__tag, __a, __in.first, __in.second) { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, - const pair<_U1, _U2>& __in) - : _Inherited(__tag, __a, __in.first, __in.second) { } - - template = true> - - tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) - : _Inherited(__tag, __a, std::forward<_U1>(__in.first), - std::forward<_U2>(__in.second)) { } - - template = false> - explicit - - tuple(allocator_arg_t __tag, const _Alloc& __a, pair<_U1, _U2>&& __in) - : _Inherited(__tag, __a, std::forward<_U1>(__in.first), - std::forward<_U2>(__in.second)) { } - - - - - tuple& - operator=(typename conditional<__assignable(), - const tuple&, - const __nonesuch&>::type __in) - noexcept(__nothrow_assignable()) - { - this->_M_assign(__in); - return *this; - } - - - tuple& - operator=(typename conditional<__assignable<_T1, _T2>(), - tuple&&, - __nonesuch&&>::type __in) - noexcept(__nothrow_assignable<_T1, _T2>()) - { - this->_M_assign(std::move(__in)); - return *this; - } - - template - - __enable_if_t<__assignable(), tuple&> - operator=(const tuple<_U1, _U2>& __in) - noexcept(__nothrow_assignable()) - { - this->_M_assign(__in); - return *this; - } - - template - - __enable_if_t<__assignable<_U1, _U2>(), tuple&> - operator=(tuple<_U1, _U2>&& __in) - noexcept(__nothrow_assignable<_U1, _U2>()) - { - this->_M_assign(std::move(__in)); - return *this; - } - - template - - __enable_if_t<__assignable(), tuple&> - operator=(const pair<_U1, _U2>& __in) - noexcept(__nothrow_assignable()) - { - this->_M_head(*this) = __in.first; - this->_M_tail(*this)._M_head(*this) = __in.second; - return *this; - } - - template - - __enable_if_t<__assignable<_U1, _U2>(), tuple&> - operator=(pair<_U1, _U2>&& __in) - noexcept(__nothrow_assignable<_U1, _U2>()) - { - this->_M_head(*this) = std::forward<_U1>(__in.first); - this->_M_tail(*this)._M_head(*this) = std::forward<_U2>(__in.second); - return *this; - } - - - void - swap(tuple& __in) - noexcept(__and_<__is_nothrow_swappable<_T1>, - __is_nothrow_swappable<_T2>>::value) - { _Inherited::_M_swap(__in); } - }; - - - - template - struct tuple_size> - : public integral_constant { }; -# 1262 "/usr/include/c++/10/tuple" 3 - template - struct tuple_element<__i, tuple<_Head, _Tail...> > - : tuple_element<__i - 1, tuple<_Tail...> > { }; - - - - - template - struct tuple_element<0, tuple<_Head, _Tail...> > - { - typedef _Head type; - }; - - - - - template - struct tuple_element<__i, tuple<>> - { - static_assert(__i < tuple_size>::value, - "tuple index is in range"); - }; - - template - constexpr _Head& - __get_helper(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept - { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } - - template - constexpr const _Head& - __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept - { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } - - - template - constexpr __tuple_element_t<__i, tuple<_Elements...>>& - get(tuple<_Elements...>& __t) noexcept - { return std::__get_helper<__i>(__t); } - - - template - constexpr const __tuple_element_t<__i, tuple<_Elements...>>& - get(const tuple<_Elements...>& __t) noexcept - { return std::__get_helper<__i>(__t); } - - - template - constexpr __tuple_element_t<__i, tuple<_Elements...>>&& - get(tuple<_Elements...>&& __t) noexcept - { - typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; - return std::forward<__element_type&&>(std::get<__i>(__t)); - } - - - template - constexpr const __tuple_element_t<__i, tuple<_Elements...>>&& - get(const tuple<_Elements...>&& __t) noexcept - { - typedef __tuple_element_t<__i, tuple<_Elements...>> __element_type; - return std::forward(std::get<__i>(__t)); - } - - - - - - template - constexpr _Head& - __get_helper2(_Tuple_impl<__i, _Head, _Tail...>& __t) noexcept - { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } - - template - constexpr const _Head& - __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept - { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); } - - - template - constexpr _Tp& - get(tuple<_Types...>& __t) noexcept - { return std::__get_helper2<_Tp>(__t); } - - - template - constexpr _Tp&& - get(tuple<_Types...>&& __t) noexcept - { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); } - - - template - constexpr const _Tp& - get(const tuple<_Types...>& __t) noexcept - { return std::__get_helper2<_Tp>(__t); } - - - - template - constexpr const _Tp&& - get(const tuple<_Types...>&& __t) noexcept - { return std::forward(std::__get_helper2<_Tp>(__t)); } - - - - template - struct __tuple_compare - { - static constexpr bool - __eq(const _Tp& __t, const _Up& __u) - { - return bool(std::get<__i>(__t) == std::get<__i>(__u)) - && __tuple_compare<_Tp, _Up, __i + 1, __size>::__eq(__t, __u); - } - - static constexpr bool - __less(const _Tp& __t, const _Up& __u) - { - return bool(std::get<__i>(__t) < std::get<__i>(__u)) - || (!bool(std::get<__i>(__u) < std::get<__i>(__t)) - && __tuple_compare<_Tp, _Up, __i + 1, __size>::__less(__t, __u)); - } - }; - - template - struct __tuple_compare<_Tp, _Up, __size, __size> - { - static constexpr bool - __eq(const _Tp&, const _Up&) { return true; } - - static constexpr bool - __less(const _Tp&, const _Up&) { return false; } - }; - - template - constexpr bool - operator==(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { - static_assert(sizeof...(_TElements) == sizeof...(_UElements), - "tuple objects can only be compared if they have equal sizes."); - using __compare = __tuple_compare, - tuple<_UElements...>, - 0, sizeof...(_TElements)>; - return __compare::__eq(__t, __u); - } -# 1437 "/usr/include/c++/10/tuple" 3 - template - constexpr bool - operator<(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { - static_assert(sizeof...(_TElements) == sizeof...(_UElements), - "tuple objects can only be compared if they have equal sizes."); - using __compare = __tuple_compare, - tuple<_UElements...>, - 0, sizeof...(_TElements)>; - return __compare::__less(__t, __u); - } - - template - constexpr bool - operator!=(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { return !(__t == __u); } - - template - constexpr bool - operator>(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { return __u < __t; } - - template - constexpr bool - operator<=(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { return !(__u < __t); } - - template - constexpr bool - operator>=(const tuple<_TElements...>& __t, - const tuple<_UElements...>& __u) - { return !(__t < __u); } - - - - template - constexpr tuple::__type...> - make_tuple(_Elements&&... __args) - { - typedef tuple::__type...> - __result_type; - return __result_type(std::forward<_Elements>(__args)...); - } - - - - - template - constexpr tuple<_Elements&&...> - forward_as_tuple(_Elements&&... __args) noexcept - { return tuple<_Elements&&...>(std::forward<_Elements>(__args)...); } - - template - struct __make_tuple_impl; - - template - struct __make_tuple_impl<_Idx, tuple<_Tp...>, _Tuple, _Nm> - : __make_tuple_impl<_Idx + 1, - tuple<_Tp..., __tuple_element_t<_Idx, _Tuple>>, - _Tuple, _Nm> - { }; - - template - struct __make_tuple_impl<_Nm, tuple<_Tp...>, _Tuple, _Nm> - { - typedef tuple<_Tp...> __type; - }; - - template - struct __do_make_tuple - : __make_tuple_impl<0, tuple<>, _Tuple, std::tuple_size<_Tuple>::value> - { }; - - - template - struct __make_tuple - : public __do_make_tuple<__remove_cvref_t<_Tuple>> - { }; - - - template - struct __combine_tuples; - - template<> - struct __combine_tuples<> - { - typedef tuple<> __type; - }; - - template - struct __combine_tuples> - { - typedef tuple<_Ts...> __type; - }; - - template - struct __combine_tuples, tuple<_T2s...>, _Rem...> - { - typedef typename __combine_tuples, - _Rem...>::__type __type; - }; - - - template - struct __tuple_cat_result - { - typedef typename __combine_tuples - ::__type...>::__type __type; - }; - - - - template - struct __make_1st_indices; - - template<> - struct __make_1st_indices<> - { - typedef std::_Index_tuple<> __type; - }; - - template - struct __make_1st_indices<_Tp, _Tpls...> - { - typedef typename std::_Build_index_tuple::type>::value>::__type __type; - }; - - - - - template - struct __tuple_concater; - - template - struct __tuple_concater<_Ret, std::_Index_tuple<_Is...>, _Tp, _Tpls...> - { - template - static constexpr _Ret - _S_do(_Tp&& __tp, _Tpls&&... __tps, _Us&&... __us) - { - typedef typename __make_1st_indices<_Tpls...>::__type __idx; - typedef __tuple_concater<_Ret, __idx, _Tpls...> __next; - return __next::_S_do(std::forward<_Tpls>(__tps)..., - std::forward<_Us>(__us)..., - std::get<_Is>(std::forward<_Tp>(__tp))...); - } - }; - - template - struct __tuple_concater<_Ret, std::_Index_tuple<>> - { - template - static constexpr _Ret - _S_do(_Us&&... __us) - { - return _Ret(std::forward<_Us>(__us)...); - } - }; - - - template...>::value>::type> - constexpr auto - tuple_cat(_Tpls&&... __tpls) - -> typename __tuple_cat_result<_Tpls...>::__type - { - typedef typename __tuple_cat_result<_Tpls...>::__type __ret; - typedef typename __make_1st_indices<_Tpls...>::__type __idx; - typedef __tuple_concater<__ret, __idx, _Tpls...> __concater; - return __concater::_S_do(std::forward<_Tpls>(__tpls)...); - } - - - - - template - constexpr tuple<_Elements&...> - tie(_Elements&... __args) noexcept - { return tuple<_Elements&...>(__args...); } - - - template - - inline - - - typename enable_if<__and_<__is_swappable<_Elements>...>::value - >::type - - - - swap(tuple<_Elements...>& __x, tuple<_Elements...>& __y) - noexcept(noexcept(__x.swap(__y))) - { __x.swap(__y); } - - - template - - typename enable_if...>::value>::type - swap(tuple<_Elements...>&, tuple<_Elements...>&) = delete; - - - - - - - struct _Swallow_assign - { - template - constexpr const _Swallow_assign& - operator=(const _Tp&) const - { return *this; } - }; - - - - constexpr _Swallow_assign ignore{}; - - - template - struct uses_allocator, _Alloc> : true_type { }; -# 1673 "/usr/include/c++/10/tuple" 3 - template - template - - inline - pair<_T1, _T2>:: - pair(piecewise_construct_t, - tuple<_Args1...> __first, tuple<_Args2...> __second) - : pair(__first, __second, - typename _Build_index_tuple::__type(), - typename _Build_index_tuple::__type()) - { } - - template - template - inline - pair<_T1, _T2>:: - pair(tuple<_Args1...>& __tuple1, tuple<_Args2...>& __tuple2, - _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>) - : first(std::forward<_Args1>(std::get<_Indexes1>(__tuple1))...), - second(std::forward<_Args2>(std::get<_Indexes2>(__tuple2))...) - { } -# 1763 "/usr/include/c++/10/tuple" 3 - -} -# 38 "/usr/include/c++/10/bits/unique_ptr.h" 2 3 - - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - - - - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - template class auto_ptr; -#pragma GCC diagnostic pop - - - - template - struct default_delete - { - - constexpr default_delete() noexcept = default; - - - - - - - template>> - default_delete(const default_delete<_Up>&) noexcept { } - - - void - operator()(_Tp* __ptr) const - { - static_assert(!is_void<_Tp>::value, - "can't delete pointer to incomplete type"); - static_assert(sizeof(_Tp)>0, - "can't delete pointer to incomplete type"); - delete __ptr; - } - }; - - - - - - template - struct default_delete<_Tp[]> - { - public: - - constexpr default_delete() noexcept = default; -# 109 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template>> - default_delete(const default_delete<_Up[]>&) noexcept { } - - - template - typename enable_if::value>::type - operator()(_Up* __ptr) const - { - static_assert(sizeof(_Tp)>0, - "can't delete pointer to incomplete type"); - delete [] __ptr; - } - }; - - - - - template - class __uniq_ptr_impl - { - template - struct _Ptr - { - using type = _Up*; - }; - - template - struct - _Ptr<_Up, _Ep, __void_t::type::pointer>> - { - using type = typename remove_reference<_Ep>::type::pointer; - }; - - public: - using _DeleterConstraint = enable_if< - __and_<__not_>, - is_default_constructible<_Dp>>::value>; - - using pointer = typename _Ptr<_Tp, _Dp>::type; - - static_assert( !is_rvalue_reference<_Dp>::value, - "unique_ptr's deleter type must be a function object type" - " or an lvalue reference type" ); - - __uniq_ptr_impl() = default; - __uniq_ptr_impl(pointer __p) : _M_t() { _M_ptr() = __p; } - - template - __uniq_ptr_impl(pointer __p, _Del&& __d) - : _M_t(__p, std::forward<_Del>(__d)) { } - - __uniq_ptr_impl(__uniq_ptr_impl&& __u) noexcept - : _M_t(std::move(__u._M_t)) - { __u._M_ptr() = nullptr; } - - __uniq_ptr_impl& operator=(__uniq_ptr_impl&& __u) noexcept - { - reset(__u.release()); - _M_deleter() = std::forward<_Dp>(__u._M_deleter()); - return *this; - } - - pointer& _M_ptr() { return std::get<0>(_M_t); } - pointer _M_ptr() const { return std::get<0>(_M_t); } - _Dp& _M_deleter() { return std::get<1>(_M_t); } - const _Dp& _M_deleter() const { return std::get<1>(_M_t); } - - void reset(pointer __p) noexcept - { - const pointer __old_p = _M_ptr(); - _M_ptr() = __p; - if (__old_p) - _M_deleter()(__old_p); - } - - pointer release() noexcept - { - pointer __p = _M_ptr(); - _M_ptr() = nullptr; - return __p; - } - - void - swap(__uniq_ptr_impl& __rhs) noexcept - { - using std::swap; - swap(this->_M_ptr(), __rhs._M_ptr()); - swap(this->_M_deleter(), __rhs._M_deleter()); - } - - private: - tuple _M_t; - }; - - - template ::value, - bool = is_move_assignable<_Dp>::value> - struct __uniq_ptr_data : __uniq_ptr_impl<_Tp, _Dp> - { - using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; - __uniq_ptr_data(__uniq_ptr_data&&) = default; - __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; - }; - - template - struct __uniq_ptr_data<_Tp, _Dp, true, false> : __uniq_ptr_impl<_Tp, _Dp> - { - using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; - __uniq_ptr_data(__uniq_ptr_data&&) = default; - __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; - }; - - template - struct __uniq_ptr_data<_Tp, _Dp, false, true> : __uniq_ptr_impl<_Tp, _Dp> - { - using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; - __uniq_ptr_data(__uniq_ptr_data&&) = delete; - __uniq_ptr_data& operator=(__uniq_ptr_data&&) = default; - }; - - template - struct __uniq_ptr_data<_Tp, _Dp, false, false> : __uniq_ptr_impl<_Tp, _Dp> - { - using __uniq_ptr_impl<_Tp, _Dp>::__uniq_ptr_impl; - __uniq_ptr_data(__uniq_ptr_data&&) = delete; - __uniq_ptr_data& operator=(__uniq_ptr_data&&) = delete; - }; - - - - template > - class unique_ptr - { - template - using _DeleterConstraint = - typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; - - __uniq_ptr_data<_Tp, _Dp> _M_t; - - public: - using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; - using element_type = _Tp; - using deleter_type = _Dp; - - private: - - - template - using __safe_conversion_up = __and_< - is_convertible::pointer, pointer>, - __not_> - >; - - public: - - - - template> - constexpr unique_ptr() noexcept - : _M_t() - { } - - - - - - - - template> - explicit - unique_ptr(pointer __p) noexcept - : _M_t(__p) - { } -# 292 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template>> - unique_ptr(pointer __p, const deleter_type& __d) noexcept - : _M_t(__p, __d) { } -# 304 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template>> - unique_ptr(pointer __p, - __enable_if_t::value, - _Del&&> __d) noexcept - : _M_t(__p, std::move(__d)) - { } - - template::type> - unique_ptr(pointer, - __enable_if_t::value, - _DelUnref&&>) = delete; - - - template> - constexpr unique_ptr(nullptr_t) noexcept - : _M_t() - { } - - - - - unique_ptr(unique_ptr&&) = default; - - - - - - - - template, - typename conditional::value, - is_same<_Ep, _Dp>, - is_convertible<_Ep, _Dp>>::type>> - unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept - : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) - { } - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - - template, is_same<_Dp, default_delete<_Tp>>>> - unique_ptr(auto_ptr<_Up>&& __u) noexcept; -#pragma GCC diagnostic pop - - - - ~unique_ptr() noexcept - { - static_assert(__is_invocable::value, - "unique_ptr's deleter must be invocable with a pointer"); - auto& __ptr = _M_t._M_ptr(); - if (__ptr != nullptr) - get_deleter()(std::move(__ptr)); - __ptr = pointer(); - } - - - - - - - - unique_ptr& operator=(unique_ptr&&) = default; -# 380 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template - typename enable_if< __and_< - __safe_conversion_up<_Up, _Ep>, - is_assignable - >::value, - unique_ptr&>::type - operator=(unique_ptr<_Up, _Ep>&& __u) noexcept - { - reset(__u.release()); - get_deleter() = std::forward<_Ep>(__u.get_deleter()); - return *this; - } - - - unique_ptr& - operator=(nullptr_t) noexcept - { - reset(); - return *this; - } - - - - - typename add_lvalue_reference::type - operator*() const - { - ; - return *get(); - } - - - pointer - operator->() const noexcept - { - ; - return get(); - } - - - pointer - get() const noexcept - { return _M_t._M_ptr(); } - - - deleter_type& - get_deleter() noexcept - { return _M_t._M_deleter(); } - - - const deleter_type& - get_deleter() const noexcept - { return _M_t._M_deleter(); } - - - explicit operator bool() const noexcept - { return get() == pointer() ? false : true; } - - - - - pointer - release() noexcept - { return _M_t.release(); } - - - - - - - - void - reset(pointer __p = pointer()) noexcept - { - static_assert(__is_invocable::value, - "unique_ptr's deleter must be invocable with a pointer"); - _M_t.reset(std::move(__p)); - } - - - void - swap(unique_ptr& __u) noexcept - { - static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); - _M_t.swap(__u._M_t); - } - - - unique_ptr(const unique_ptr&) = delete; - unique_ptr& operator=(const unique_ptr&) = delete; - }; - - - - - - template - class unique_ptr<_Tp[], _Dp> - { - template - using _DeleterConstraint = - typename __uniq_ptr_impl<_Tp, _Up>::_DeleterConstraint::type; - - __uniq_ptr_data<_Tp, _Dp> _M_t; - - template - using __remove_cv = typename remove_cv<_Up>::type; - - - template - using __is_derived_Tp - = __and_< is_base_of<_Tp, _Up>, - __not_, __remove_cv<_Up>>> >; - - public: - using pointer = typename __uniq_ptr_impl<_Tp, _Dp>::pointer; - using element_type = _Tp; - using deleter_type = _Dp; - - - - template, - typename _UP_pointer = typename _UPtr::pointer, - typename _UP_element_type = typename _UPtr::element_type> - using __safe_conversion_up = __and_< - is_array<_Up>, - is_same, - is_same<_UP_pointer, _UP_element_type*>, - is_convertible<_UP_element_type(*)[], element_type(*)[]> - >; - - - template - using __safe_conversion_raw = __and_< - __or_<__or_, - is_same<_Up, nullptr_t>>, - __and_, - is_same, - is_convertible< - typename remove_pointer<_Up>::type(*)[], - element_type(*)[]> - > - > - >; - - - - - template> - constexpr unique_ptr() noexcept - : _M_t() - { } -# 541 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template, - typename = typename enable_if< - __safe_conversion_raw<_Up>::value, bool>::type> - explicit - unique_ptr(_Up __p) noexcept - : _M_t(__p) - { } -# 559 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template, - is_copy_constructible<_Del>>> - unique_ptr(_Up __p, const deleter_type& __d) noexcept - : _M_t(__p, __d) { } -# 573 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template, - is_move_constructible<_Del>>> - unique_ptr(_Up __p, - __enable_if_t::value, - _Del&&> __d) noexcept - : _M_t(std::move(__p), std::move(__d)) - { } - - template::type, - typename = _Require<__safe_conversion_raw<_Up>>> - unique_ptr(_Up, - __enable_if_t::value, - _DelUnref&&>) = delete; - - - unique_ptr(unique_ptr&&) = default; - - - template> - constexpr unique_ptr(nullptr_t) noexcept - : _M_t() - { } - - template, - typename conditional::value, - is_same<_Ep, _Dp>, - is_convertible<_Ep, _Dp>>::type>> - unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept - : _M_t(__u.release(), std::forward<_Ep>(__u.get_deleter())) - { } - - - ~unique_ptr() - { - auto& __ptr = _M_t._M_ptr(); - if (__ptr != nullptr) - get_deleter()(__ptr); - __ptr = pointer(); - } - - - - - - - - unique_ptr& - operator=(unique_ptr&&) = default; -# 632 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template - typename - enable_if<__and_<__safe_conversion_up<_Up, _Ep>, - is_assignable - >::value, - unique_ptr&>::type - operator=(unique_ptr<_Up, _Ep>&& __u) noexcept - { - reset(__u.release()); - get_deleter() = std::forward<_Ep>(__u.get_deleter()); - return *this; - } - - - unique_ptr& - operator=(nullptr_t) noexcept - { - reset(); - return *this; - } - - - - - typename std::add_lvalue_reference::type - operator[](size_t __i) const - { - ; - return get()[__i]; - } - - - pointer - get() const noexcept - { return _M_t._M_ptr(); } - - - deleter_type& - get_deleter() noexcept - { return _M_t._M_deleter(); } - - - const deleter_type& - get_deleter() const noexcept - { return _M_t._M_deleter(); } - - - explicit operator bool() const noexcept - { return get() == pointer() ? false : true; } - - - - - pointer - release() noexcept - { return _M_t.release(); } - - - - - - - - template , - __and_, - is_pointer<_Up>, - is_convertible< - typename remove_pointer<_Up>::type(*)[], - element_type(*)[] - > - > - > - >> - void - reset(_Up __p) noexcept - { _M_t.reset(std::move(__p)); } - - void reset(nullptr_t = nullptr) noexcept - { reset(pointer()); } - - - void - swap(unique_ptr& __u) noexcept - { - static_assert(__is_swappable<_Dp>::value, "deleter must be swappable"); - _M_t.swap(__u._M_t); - } - - - unique_ptr(const unique_ptr&) = delete; - unique_ptr& operator=(const unique_ptr&) = delete; - }; - - - - - template - inline - - - typename enable_if<__is_swappable<_Dp>::value>::type - - - - swap(unique_ptr<_Tp, _Dp>& __x, - unique_ptr<_Tp, _Dp>& __y) noexcept - { __x.swap(__y); } - - - template - typename enable_if::value>::type - swap(unique_ptr<_Tp, _Dp>&, - unique_ptr<_Tp, _Dp>&) = delete; - - - - template - inline bool - operator==(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { return __x.get() == __y.get(); } - - - template - inline bool - operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept - { return !__x; } - - - - template - inline bool - operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept - { return !__x; } - - - template - inline bool - operator!=(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { return __x.get() != __y.get(); } - - - template - inline bool - operator!=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept - { return (bool)__x; } - - - template - inline bool - operator!=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept - { return (bool)__x; } - - - - template - inline bool - operator<(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { - typedef typename - std::common_type::pointer, - typename unique_ptr<_Up, _Ep>::pointer>::type _CT; - return std::less<_CT>()(__x.get(), __y.get()); - } - - - template - inline bool - operator<(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) - { - return std::less::pointer>()(__x.get(), - nullptr); - } - - - template - inline bool - operator<(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) - { - return std::less::pointer>()(nullptr, - __x.get()); - } - - - template - inline bool - operator<=(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { return !(__y < __x); } - - - template - inline bool - operator<=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) - { return !(nullptr < __x); } - - - template - inline bool - operator<=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) - { return !(__x < nullptr); } - - - template - inline bool - operator>(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { return (__y < __x); } - - - template - inline bool - operator>(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) - { - return std::less::pointer>()(nullptr, - __x.get()); - } - - - template - inline bool - operator>(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) - { - return std::less::pointer>()(__x.get(), - nullptr); - } - - - template - inline bool - operator>=(const unique_ptr<_Tp, _Dp>& __x, - const unique_ptr<_Up, _Ep>& __y) - { return !(__x < __y); } - - - template - inline bool - operator>=(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) - { return !(__x < nullptr); } - - - template - inline bool - operator>=(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) - { return !(nullptr < __x); } -# 912 "/usr/include/c++/10/bits/unique_ptr.h" 3 - template::__enable_hash_call> - struct __uniq_ptr_hash - - : private __poison_hash<_Ptr> - - { - size_t - operator()(const _Up& __u) const - noexcept(noexcept(std::declval>()(std::declval<_Ptr>()))) - { return hash<_Ptr>()(__u.get()); } - }; - - template - struct __uniq_ptr_hash<_Up, _Ptr, false> - : private __poison_hash<_Ptr> - { }; - - - - template - struct hash> - : public __hash_base>, - public __uniq_ptr_hash> - { }; - - - - - - - - template - struct _MakeUniq - { typedef unique_ptr<_Tp> __single_object; }; - - template - struct _MakeUniq<_Tp[]> - { typedef unique_ptr<_Tp[]> __array; }; - - template - struct _MakeUniq<_Tp[_Bound]> - { struct __invalid_type { }; }; - - - - - template - inline typename _MakeUniq<_Tp>::__single_object - make_unique(_Args&&... __args) - { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); } - - - template - inline typename _MakeUniq<_Tp>::__array - make_unique(size_t __num) - { return unique_ptr<_Tp>(new remove_extent_t<_Tp>[__num]()); } - - - template - inline typename _MakeUniq<_Tp>::__invalid_type - make_unique(_Args&&...) = delete; -# 1008 "/usr/include/c++/10/bits/unique_ptr.h" 3 - -} -# 84 "/usr/include/c++/10/memory" 2 3 -# 1 "/usr/include/c++/10/bits/shared_ptr.h" 1 3 -# 52 "/usr/include/c++/10/bits/shared_ptr.h" 3 -# 1 "/usr/include/c++/10/bits/shared_ptr_base.h" 1 3 -# 53 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 -# 1 "/usr/include/c++/10/bits/allocated_ptr.h" 1 3 -# 40 "/usr/include/c++/10/bits/allocated_ptr.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - - template - struct __allocated_ptr - { - using pointer = typename allocator_traits<_Alloc>::pointer; - using value_type = typename allocator_traits<_Alloc>::value_type; - - - __allocated_ptr(_Alloc& __a, pointer __ptr) noexcept - : _M_alloc(std::__addressof(__a)), _M_ptr(__ptr) - { } - - - template>> - __allocated_ptr(_Alloc& __a, _Ptr __ptr) - : _M_alloc(std::__addressof(__a)), - _M_ptr(pointer_traits::pointer_to(*__ptr)) - { } - - - __allocated_ptr(__allocated_ptr&& __gd) noexcept - : _M_alloc(__gd._M_alloc), _M_ptr(__gd._M_ptr) - { __gd._M_ptr = nullptr; } - - - ~__allocated_ptr() - { - if (_M_ptr != nullptr) - std::allocator_traits<_Alloc>::deallocate(*_M_alloc, _M_ptr, 1); - } - - - __allocated_ptr& - operator=(std::nullptr_t) noexcept - { - _M_ptr = nullptr; - return *this; - } - - - value_type* get() { return std::__to_address(_M_ptr); } - - private: - _Alloc* _M_alloc; - pointer _M_ptr; - }; - - - template - __allocated_ptr<_Alloc> - __allocate_guarded(_Alloc& __a) - { - return { __a, std::allocator_traits<_Alloc>::allocate(__a, 1) }; - } - - -} -# 54 "/usr/include/c++/10/bits/shared_ptr_base.h" 2 3 -# 1 "/usr/include/c++/10/bits/refwrap.h" 1 3 -# 33 "/usr/include/c++/10/bits/refwrap.h" 3 - -# 34 "/usr/include/c++/10/bits/refwrap.h" 3 -# 43 "/usr/include/c++/10/bits/refwrap.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 54 "/usr/include/c++/10/bits/refwrap.h" 3 - template - struct _Maybe_unary_or_binary_function { }; - - - template - struct _Maybe_unary_or_binary_function<_Res, _T1> - : std::unary_function<_T1, _Res> { }; - - - template - struct _Maybe_unary_or_binary_function<_Res, _T1, _T2> - : std::binary_function<_T1, _T2, _Res> { }; - - template - struct _Mem_fn_traits; - - template - struct _Mem_fn_traits_base - { - using __result_type = _Res; - using __maybe_type - = _Maybe_unary_or_binary_function<_Res, _Class*, _ArgTypes...>; - using __arity = integral_constant; - }; -# 99 "/usr/include/c++/10/bits/refwrap.h" 3 -template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) > : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const > : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile > : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile > : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; -template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; -template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) &&> : _Mem_fn_traits_base<_Res, _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const &&> : _Mem_fn_traits_base<_Res, const _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) volatile &&> : _Mem_fn_traits_base<_Res, volatile _Class, _ArgTypes...> { using __vararg = true_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = false_type; }; template struct _Mem_fn_traits<_Res (_Class::*)(_ArgTypes... ...) const volatile &&> : _Mem_fn_traits_base<_Res, const volatile _Class, _ArgTypes...> { using __vararg = true_type; }; -# 113 "/usr/include/c++/10/bits/refwrap.h" 3 - template> - struct _Maybe_get_result_type - { }; - - template - struct _Maybe_get_result_type<_Functor, - __void_t> - { typedef typename _Functor::result_type result_type; }; - - - - - - template - struct _Weak_result_type_impl - : _Maybe_get_result_type<_Functor> - { }; - - - template - struct _Weak_result_type_impl<_Res(_ArgTypes...) > - { typedef _Res result_type; }; - - - template - struct _Weak_result_type_impl<_Res(_ArgTypes......) > - { typedef _Res result_type; }; - - - template - struct _Weak_result_type_impl<_Res(*)(_ArgTypes...) > - { typedef _Res result_type; }; - - - template - struct - _Weak_result_type_impl<_Res(*)(_ArgTypes......) > - { typedef _Res result_type; }; - - - template::value> - struct _Weak_result_type_memfun - : _Weak_result_type_impl<_Functor> - { }; - - - template - struct _Weak_result_type_memfun<_MemFunPtr, true> - { - using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; - }; - - - template - struct _Weak_result_type_memfun<_Func _Class::*, false> - { }; - - - - - - template - struct _Weak_result_type - : _Weak_result_type_memfun::type> - { }; - - - - template> - struct _Refwrap_base_arg1 - { }; - - - template - struct _Refwrap_base_arg1<_Tp, - __void_t> - { - typedef typename _Tp::argument_type argument_type; - }; - - - template> - struct _Refwrap_base_arg2 - { }; - - - template - struct _Refwrap_base_arg2<_Tp, - __void_t> - { - typedef typename _Tp::first_argument_type first_argument_type; - typedef typename _Tp::second_argument_type second_argument_type; - }; - - - - - - - - template - struct _Reference_wrapper_base - : _Weak_result_type<_Tp>, _Refwrap_base_arg1<_Tp>, _Refwrap_base_arg2<_Tp> - { }; - - - template - struct _Reference_wrapper_base<_Res(_T1) > - : unary_function<_T1, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1) const> - : unary_function<_T1, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1) volatile> - : unary_function<_T1, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1) const volatile> - : unary_function<_T1, _Res> - { }; - - - template - struct _Reference_wrapper_base<_Res(_T1, _T2) > - : binary_function<_T1, _T2, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1, _T2) const> - : binary_function<_T1, _T2, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1, _T2) volatile> - : binary_function<_T1, _T2, _Res> - { }; - - template - struct _Reference_wrapper_base<_Res(_T1, _T2) const volatile> - : binary_function<_T1, _T2, _Res> - { }; - - - template - struct _Reference_wrapper_base<_Res(*)(_T1) > - : unary_function<_T1, _Res> - { }; - - - template - struct _Reference_wrapper_base<_Res(*)(_T1, _T2) > - : binary_function<_T1, _T2, _Res> - { }; - - template::value> - struct _Reference_wrapper_base_memfun - : _Reference_wrapper_base<_Tp> - { }; - - template - struct _Reference_wrapper_base_memfun<_MemFunPtr, true> - : _Mem_fn_traits<_MemFunPtr>::__maybe_type - { - using result_type = typename _Mem_fn_traits<_MemFunPtr>::__result_type; - }; -# 293 "/usr/include/c++/10/bits/refwrap.h" 3 - template - class reference_wrapper - - - - : public _Reference_wrapper_base_memfun::type> - - { - _Tp* _M_data; - - - static _Tp* _S_fun(_Tp& __r) noexcept { return std::__addressof(__r); } - - static void _S_fun(_Tp&&) = delete; - - template> - using __not_same - = typename enable_if::value>::type; - - public: - typedef _Tp type; - - - - - template, typename - = decltype(reference_wrapper::_S_fun(std::declval<_Up>()))> - - reference_wrapper(_Up&& __uref) - noexcept(noexcept(reference_wrapper::_S_fun(std::declval<_Up>()))) - : _M_data(reference_wrapper::_S_fun(std::forward<_Up>(__uref))) - { } - - reference_wrapper(const reference_wrapper&) = default; - - reference_wrapper& - operator=(const reference_wrapper&) = default; - - - operator _Tp&() const noexcept - { return this->get(); } - - - _Tp& - get() const noexcept - { return *_M_data; } - - template - - typename result_of<_Tp&(_Args&&...)>::type - operator()(_Args&&... __args) const - { - - - - - return std::__invoke(get(), std::forward<_Args>(__args)...); - } - }; -# 361 "/usr/include/c++/10/bits/refwrap.h" 3 - template - - inline reference_wrapper<_Tp> - ref(_Tp& __t) noexcept - { return reference_wrapper<_Tp>(__t); } - - - template - - inline reference_wrapper - cref(const _Tp& __t) noexcept - { return reference_wrapper(__t); } - - template - void ref(const _Tp&&) = delete; - - template - void cref(const _Tp&&) = delete; - - - template - - inline reference_wrapper<_Tp> - ref(reference_wrapper<_Tp> __t) noexcept - { return __t; } - - - template - - inline reference_wrapper - cref(reference_wrapper<_Tp> __t) noexcept - { return { __t.get() }; } - - - - -} -# 55 "/usr/include/c++/10/bits/shared_ptr_base.h" 2 3 - -# 1 "/usr/include/c++/10/ext/aligned_buffer.h" 1 3 -# 32 "/usr/include/c++/10/ext/aligned_buffer.h" 3 - -# 33 "/usr/include/c++/10/ext/aligned_buffer.h" 3 - - - - - - - -namespace __gnu_cxx -{ - - - - - template - struct __aligned_membuf - { - - - - - - struct _Tp2 { _Tp _M_t; }; - - alignas(__alignof__(_Tp2::_M_t)) unsigned char _M_storage[sizeof(_Tp)]; - - __aligned_membuf() = default; - - - __aligned_membuf(std::nullptr_t) { } - - void* - _M_addr() noexcept - { return static_cast(&_M_storage); } - - const void* - _M_addr() const noexcept - { return static_cast(&_M_storage); } - - _Tp* - _M_ptr() noexcept - { return static_cast<_Tp*>(_M_addr()); } - - const _Tp* - _M_ptr() const noexcept - { return static_cast(_M_addr()); } - }; -# 89 "/usr/include/c++/10/ext/aligned_buffer.h" 3 - template - struct __aligned_buffer - : std::aligned_storage - { - typename - std::aligned_storage::type _M_storage; - - __aligned_buffer() = default; - - - __aligned_buffer(std::nullptr_t) { } - - void* - _M_addr() noexcept - { - return static_cast(&_M_storage); - } - - const void* - _M_addr() const noexcept - { - return static_cast(&_M_storage); - } - - _Tp* - _M_ptr() noexcept - { return static_cast<_Tp*>(_M_addr()); } - - const _Tp* - _M_ptr() const noexcept - { return static_cast(_M_addr()); } - }; - - -} -# 57 "/usr/include/c++/10/bits/shared_ptr_base.h" 2 3 - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - template class auto_ptr; -#pragma GCC diagnostic pop - - - - - - - class bad_weak_ptr : public std::exception - { - public: - virtual char const* what() const noexcept; - - virtual ~bad_weak_ptr() noexcept; - }; - - - inline void - __throw_bad_weak_ptr() - { (throw (bad_weak_ptr())); } - - using __gnu_cxx::_Lock_policy; - using __gnu_cxx::__default_lock_policy; - using __gnu_cxx::_S_single; - using __gnu_cxx::_S_mutex; - using __gnu_cxx::_S_atomic; - - - template<_Lock_policy _Lp> - class _Mutex_base - { - protected: - - enum { _S_need_barriers = 0 }; - }; - - template<> - class _Mutex_base<_S_mutex> - : public __gnu_cxx::__mutex - { - protected: - - - - enum { _S_need_barriers = 1 }; - }; - - template<_Lock_policy _Lp = __default_lock_policy> - class _Sp_counted_base - : public _Mutex_base<_Lp> - { - public: - _Sp_counted_base() noexcept - : _M_use_count(1), _M_weak_count(1) { } - - virtual - ~_Sp_counted_base() noexcept - { } - - - - virtual void - _M_dispose() noexcept = 0; - - - virtual void - _M_destroy() noexcept - { delete this; } - - virtual void* - _M_get_deleter(const std::type_info&) noexcept = 0; - - void - _M_add_ref_copy() - { __gnu_cxx::__atomic_add_dispatch(&_M_use_count, 1); } - - void - _M_add_ref_lock(); - - bool - _M_add_ref_lock_nothrow(); - - void - _M_release() noexcept - { - - ; - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, -1) == 1) - { - ; - _M_dispose(); - - - - - if (_Mutex_base<_Lp>::_S_need_barriers) - { - __atomic_thread_fence (4); - } - - - ; - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, - -1) == 1) - { - ; - _M_destroy(); - } - } - } - - void - _M_weak_add_ref() noexcept - { __gnu_cxx::__atomic_add_dispatch(&_M_weak_count, 1); } - - void - _M_weak_release() noexcept - { - - ; - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_weak_count, -1) == 1) - { - ; - if (_Mutex_base<_Lp>::_S_need_barriers) - { - - - __atomic_thread_fence (4); - } - _M_destroy(); - } - } - - long - _M_get_use_count() const noexcept - { - - - return __atomic_load_n(&_M_use_count, 0); - } - - private: - _Sp_counted_base(_Sp_counted_base const&) = delete; - _Sp_counted_base& operator=(_Sp_counted_base const&) = delete; - - _Atomic_word _M_use_count; - _Atomic_word _M_weak_count; - }; - - template<> - inline void - _Sp_counted_base<_S_single>:: - _M_add_ref_lock() - { - if (_M_use_count == 0) - __throw_bad_weak_ptr(); - ++_M_use_count; - } - - template<> - inline void - _Sp_counted_base<_S_mutex>:: - _M_add_ref_lock() - { - __gnu_cxx::__scoped_lock sentry(*this); - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) - { - _M_use_count = 0; - __throw_bad_weak_ptr(); - } - } - - template<> - inline void - _Sp_counted_base<_S_atomic>:: - _M_add_ref_lock() - { - - _Atomic_word __count = _M_get_use_count(); - do - { - if (__count == 0) - __throw_bad_weak_ptr(); - - - } - while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, - true, 4, - 0)); - } - - template<> - inline bool - _Sp_counted_base<_S_single>:: - _M_add_ref_lock_nothrow() - { - if (_M_use_count == 0) - return false; - ++_M_use_count; - return true; - } - - template<> - inline bool - _Sp_counted_base<_S_mutex>:: - _M_add_ref_lock_nothrow() - { - __gnu_cxx::__scoped_lock sentry(*this); - if (__gnu_cxx::__exchange_and_add_dispatch(&_M_use_count, 1) == 0) - { - _M_use_count = 0; - return false; - } - return true; - } - - template<> - inline bool - _Sp_counted_base<_S_atomic>:: - _M_add_ref_lock_nothrow() - { - - _Atomic_word __count = _M_get_use_count(); - do - { - if (__count == 0) - return false; - - - } - while (!__atomic_compare_exchange_n(&_M_use_count, &__count, __count + 1, - true, 4, - 0)); - return true; - } - - template<> - inline void - _Sp_counted_base<_S_single>::_M_add_ref_copy() - { ++_M_use_count; } - - template<> - inline void - _Sp_counted_base<_S_single>::_M_release() noexcept - { - if (--_M_use_count == 0) - { - _M_dispose(); - if (--_M_weak_count == 0) - _M_destroy(); - } - } - - template<> - inline void - _Sp_counted_base<_S_single>::_M_weak_add_ref() noexcept - { ++_M_weak_count; } - - template<> - inline void - _Sp_counted_base<_S_single>::_M_weak_release() noexcept - { - if (--_M_weak_count == 0) - _M_destroy(); - } - - template<> - inline long - _Sp_counted_base<_S_single>::_M_get_use_count() const noexcept - { return _M_use_count; } - - - - template - class __shared_ptr; - - template - class __weak_ptr; - - template - class __enable_shared_from_this; - - template - class shared_ptr; - - template - class weak_ptr; - - template - struct owner_less; - - template - class enable_shared_from_this; - - template<_Lock_policy _Lp = __default_lock_policy> - class __weak_count; - - template<_Lock_policy _Lp = __default_lock_policy> - class __shared_count; - - - - template - class _Sp_counted_ptr final : public _Sp_counted_base<_Lp> - { - public: - explicit - _Sp_counted_ptr(_Ptr __p) noexcept - : _M_ptr(__p) { } - - virtual void - _M_dispose() noexcept - { delete _M_ptr; } - - virtual void - _M_destroy() noexcept - { delete this; } - - virtual void* - _M_get_deleter(const std::type_info&) noexcept - { return nullptr; } - - _Sp_counted_ptr(const _Sp_counted_ptr&) = delete; - _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete; - - private: - _Ptr _M_ptr; - }; - - template<> - inline void - _Sp_counted_ptr::_M_dispose() noexcept { } - - template<> - inline void - _Sp_counted_ptr::_M_dispose() noexcept { } - - template<> - inline void - _Sp_counted_ptr::_M_dispose() noexcept { } - - template - struct _Sp_ebo_helper; - - - template - struct _Sp_ebo_helper<_Nm, _Tp, true> : private _Tp - { - explicit _Sp_ebo_helper(const _Tp& __tp) : _Tp(__tp) { } - explicit _Sp_ebo_helper(_Tp&& __tp) : _Tp(std::move(__tp)) { } - - static _Tp& - _S_get(_Sp_ebo_helper& __eboh) { return static_cast<_Tp&>(__eboh); } - }; - - - template - struct _Sp_ebo_helper<_Nm, _Tp, false> - { - explicit _Sp_ebo_helper(const _Tp& __tp) : _M_tp(__tp) { } - explicit _Sp_ebo_helper(_Tp&& __tp) : _M_tp(std::move(__tp)) { } - - static _Tp& - _S_get(_Sp_ebo_helper& __eboh) - { return __eboh._M_tp; } - - private: - _Tp _M_tp; - }; - - - template - class _Sp_counted_deleter final : public _Sp_counted_base<_Lp> - { - class _Impl : _Sp_ebo_helper<0, _Deleter>, _Sp_ebo_helper<1, _Alloc> - { - typedef _Sp_ebo_helper<0, _Deleter> _Del_base; - typedef _Sp_ebo_helper<1, _Alloc> _Alloc_base; - - public: - _Impl(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept - : _M_ptr(__p), _Del_base(std::move(__d)), _Alloc_base(__a) - { } - - _Deleter& _M_del() noexcept { return _Del_base::_S_get(*this); } - _Alloc& _M_alloc() noexcept { return _Alloc_base::_S_get(*this); } - - _Ptr _M_ptr; - }; - - public: - using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_deleter>; - - - _Sp_counted_deleter(_Ptr __p, _Deleter __d) noexcept - : _M_impl(__p, std::move(__d), _Alloc()) { } - - - _Sp_counted_deleter(_Ptr __p, _Deleter __d, const _Alloc& __a) noexcept - : _M_impl(__p, std::move(__d), __a) { } - - ~_Sp_counted_deleter() noexcept { } - - virtual void - _M_dispose() noexcept - { _M_impl._M_del()(_M_impl._M_ptr); } - - virtual void - _M_destroy() noexcept - { - __allocator_type __a(_M_impl._M_alloc()); - __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; - this->~_Sp_counted_deleter(); - } - - virtual void* - _M_get_deleter(const std::type_info& __ti) noexcept - { - - - - return __ti == typeid(_Deleter) - ? std::__addressof(_M_impl._M_del()) - : nullptr; - - - - } - - private: - _Impl _M_impl; - }; - - - - struct _Sp_make_shared_tag - { - private: - template - friend class _Sp_counted_ptr_inplace; - - static const type_info& - _S_ti() noexcept __attribute__ ((__visibility__ ("default"))) - { - alignas(type_info) static constexpr char __tag[sizeof(type_info)] = { }; - return reinterpret_cast(__tag); - } - - static bool _S_eq(const type_info&) noexcept; - }; - - template - struct _Sp_alloc_shared_tag - { - const _Alloc& _M_a; - }; - - template - class _Sp_counted_ptr_inplace final : public _Sp_counted_base<_Lp> - { - class _Impl : _Sp_ebo_helper<0, _Alloc> - { - typedef _Sp_ebo_helper<0, _Alloc> _A_base; - - public: - explicit _Impl(_Alloc __a) noexcept : _A_base(__a) { } - - _Alloc& _M_alloc() noexcept { return _A_base::_S_get(*this); } - - __gnu_cxx::__aligned_buffer<_Tp> _M_storage; - }; - - public: - using __allocator_type = __alloc_rebind<_Alloc, _Sp_counted_ptr_inplace>; - - - template - _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args) - : _M_impl(__a) - { - - - allocator_traits<_Alloc>::construct(__a, _M_ptr(), - std::forward<_Args>(__args)...); - } - - ~_Sp_counted_ptr_inplace() noexcept { } - - virtual void - _M_dispose() noexcept - { - allocator_traits<_Alloc>::destroy(_M_impl._M_alloc(), _M_ptr()); - } - - - virtual void - _M_destroy() noexcept - { - __allocator_type __a(_M_impl._M_alloc()); - __allocated_ptr<__allocator_type> __guard_ptr{ __a, this }; - this->~_Sp_counted_ptr_inplace(); - } - - private: - friend class __shared_count<_Lp>; - - - - virtual void* - _M_get_deleter(const std::type_info& __ti) noexcept override - { - auto __ptr = const_cast::type*>(_M_ptr()); - - - - - if (&__ti == &_Sp_make_shared_tag::_S_ti() - || - - __ti == typeid(_Sp_make_shared_tag) - - - - ) - return __ptr; - return nullptr; - } - - _Tp* _M_ptr() noexcept { return _M_impl._M_storage._M_ptr(); } - - _Impl _M_impl; - }; - - - struct __sp_array_delete - { - template - void operator()(_Yp* __p) const { delete[] __p; } - }; - - template<_Lock_policy _Lp> - class __shared_count - { - template - struct __not_alloc_shared_tag { using type = void; }; - - template - struct __not_alloc_shared_tag<_Sp_alloc_shared_tag<_Tp>> { }; - - public: - constexpr __shared_count() noexcept : _M_pi(0) - { } - - template - explicit - __shared_count(_Ptr __p) : _M_pi(0) - { - try - { - _M_pi = new _Sp_counted_ptr<_Ptr, _Lp>(__p); - } - catch(...) - { - delete __p; - throw; - } - } - - template - __shared_count(_Ptr __p, false_type) - : __shared_count(__p) - { } - - template - __shared_count(_Ptr __p, true_type) - : __shared_count(__p, __sp_array_delete{}, allocator()) - { } - - template::type> - __shared_count(_Ptr __p, _Deleter __d) - : __shared_count(__p, std::move(__d), allocator()) - { } - - template::type> - __shared_count(_Ptr __p, _Deleter __d, _Alloc __a) : _M_pi(0) - { - typedef _Sp_counted_deleter<_Ptr, _Deleter, _Alloc, _Lp> _Sp_cd_type; - try - { - typename _Sp_cd_type::__allocator_type __a2(__a); - auto __guard = std::__allocate_guarded(__a2); - _Sp_cd_type* __mem = __guard.get(); - ::new (__mem) _Sp_cd_type(__p, std::move(__d), std::move(__a)); - _M_pi = __mem; - __guard = nullptr; - } - catch(...) - { - __d(__p); - throw; - } - } - - template - __shared_count(_Tp*& __p, _Sp_alloc_shared_tag<_Alloc> __a, - _Args&&... __args) - { - typedef _Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp> _Sp_cp_type; - typename _Sp_cp_type::__allocator_type __a2(__a._M_a); - auto __guard = std::__allocate_guarded(__a2); - _Sp_cp_type* __mem = __guard.get(); - auto __pi = ::new (__mem) - _Sp_cp_type(__a._M_a, std::forward<_Args>(__args)...); - __guard = nullptr; - _M_pi = __pi; - __p = __pi->_M_ptr(); - } - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - - template - explicit - __shared_count(std::auto_ptr<_Tp>&& __r); -#pragma GCC diagnostic pop - - - - template - explicit - __shared_count(std::unique_ptr<_Tp, _Del>&& __r) : _M_pi(0) - { - - - if (__r.get() == nullptr) - return; - - using _Ptr = typename unique_ptr<_Tp, _Del>::pointer; - using _Del2 = typename conditional::value, - reference_wrapper::type>, - _Del>::type; - using _Sp_cd_type - = _Sp_counted_deleter<_Ptr, _Del2, allocator, _Lp>; - using _Alloc = allocator<_Sp_cd_type>; - using _Alloc_traits = allocator_traits<_Alloc>; - _Alloc __a; - _Sp_cd_type* __mem = _Alloc_traits::allocate(__a, 1); - _Alloc_traits::construct(__a, __mem, __r.release(), - __r.get_deleter()); - _M_pi = __mem; - } - - - explicit __shared_count(const __weak_count<_Lp>& __r); - - - explicit __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t); - - ~__shared_count() noexcept - { - if (_M_pi != nullptr) - _M_pi->_M_release(); - } - - __shared_count(const __shared_count& __r) noexcept - : _M_pi(__r._M_pi) - { - if (_M_pi != 0) - _M_pi->_M_add_ref_copy(); - } - - __shared_count& - operator=(const __shared_count& __r) noexcept - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != _M_pi) - { - if (__tmp != 0) - __tmp->_M_add_ref_copy(); - if (_M_pi != 0) - _M_pi->_M_release(); - _M_pi = __tmp; - } - return *this; - } - - void - _M_swap(__shared_count& __r) noexcept - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - __r._M_pi = _M_pi; - _M_pi = __tmp; - } - - long - _M_get_use_count() const noexcept - { return _M_pi != 0 ? _M_pi->_M_get_use_count() : 0; } - - bool - _M_unique() const noexcept - { return this->_M_get_use_count() == 1; } - - void* - _M_get_deleter(const std::type_info& __ti) const noexcept - { return _M_pi ? _M_pi->_M_get_deleter(__ti) : nullptr; } - - bool - _M_less(const __shared_count& __rhs) const noexcept - { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } - - bool - _M_less(const __weak_count<_Lp>& __rhs) const noexcept - { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } - - - friend inline bool - operator==(const __shared_count& __a, const __shared_count& __b) noexcept - { return __a._M_pi == __b._M_pi; } - - private: - friend class __weak_count<_Lp>; - - _Sp_counted_base<_Lp>* _M_pi; - }; - - - template<_Lock_policy _Lp> - class __weak_count - { - public: - constexpr __weak_count() noexcept : _M_pi(nullptr) - { } - - __weak_count(const __shared_count<_Lp>& __r) noexcept - : _M_pi(__r._M_pi) - { - if (_M_pi != nullptr) - _M_pi->_M_weak_add_ref(); - } - - __weak_count(const __weak_count& __r) noexcept - : _M_pi(__r._M_pi) - { - if (_M_pi != nullptr) - _M_pi->_M_weak_add_ref(); - } - - __weak_count(__weak_count&& __r) noexcept - : _M_pi(__r._M_pi) - { __r._M_pi = nullptr; } - - ~__weak_count() noexcept - { - if (_M_pi != nullptr) - _M_pi->_M_weak_release(); - } - - __weak_count& - operator=(const __shared_count<_Lp>& __r) noexcept - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != nullptr) - __tmp->_M_weak_add_ref(); - if (_M_pi != nullptr) - _M_pi->_M_weak_release(); - _M_pi = __tmp; - return *this; - } - - __weak_count& - operator=(const __weak_count& __r) noexcept - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - if (__tmp != nullptr) - __tmp->_M_weak_add_ref(); - if (_M_pi != nullptr) - _M_pi->_M_weak_release(); - _M_pi = __tmp; - return *this; - } - - __weak_count& - operator=(__weak_count&& __r) noexcept - { - if (_M_pi != nullptr) - _M_pi->_M_weak_release(); - _M_pi = __r._M_pi; - __r._M_pi = nullptr; - return *this; - } - - void - _M_swap(__weak_count& __r) noexcept - { - _Sp_counted_base<_Lp>* __tmp = __r._M_pi; - __r._M_pi = _M_pi; - _M_pi = __tmp; - } - - long - _M_get_use_count() const noexcept - { return _M_pi != nullptr ? _M_pi->_M_get_use_count() : 0; } - - bool - _M_less(const __weak_count& __rhs) const noexcept - { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } - - bool - _M_less(const __shared_count<_Lp>& __rhs) const noexcept - { return std::less<_Sp_counted_base<_Lp>*>()(this->_M_pi, __rhs._M_pi); } - - - friend inline bool - operator==(const __weak_count& __a, const __weak_count& __b) noexcept - { return __a._M_pi == __b._M_pi; } - - private: - friend class __shared_count<_Lp>; - - _Sp_counted_base<_Lp>* _M_pi; - }; - - - template<_Lock_policy _Lp> - inline - __shared_count<_Lp>::__shared_count(const __weak_count<_Lp>& __r) - : _M_pi(__r._M_pi) - { - if (_M_pi != nullptr) - _M_pi->_M_add_ref_lock(); - else - __throw_bad_weak_ptr(); - } - - - template<_Lock_policy _Lp> - inline - __shared_count<_Lp>:: - __shared_count(const __weak_count<_Lp>& __r, std::nothrow_t) - : _M_pi(__r._M_pi) - { - if (_M_pi != nullptr) - if (!_M_pi->_M_add_ref_lock_nothrow()) - _M_pi = nullptr; - } - - - - - - - - template - struct __sp_compatible_with - : false_type - { }; - - template - struct __sp_compatible_with<_Yp*, _Tp*> - : is_convertible<_Yp*, _Tp*>::type - { }; - - template - struct __sp_compatible_with<_Up(*)[_Nm], _Up(*)[]> - : true_type - { }; - - template - struct __sp_compatible_with<_Up(*)[_Nm], const _Up(*)[]> - : true_type - { }; - - template - struct __sp_compatible_with<_Up(*)[_Nm], volatile _Up(*)[]> - : true_type - { }; - - template - struct __sp_compatible_with<_Up(*)[_Nm], const volatile _Up(*)[]> - : true_type - { }; - - - template - struct __sp_is_constructible_arrN - : false_type - { }; - - template - struct __sp_is_constructible_arrN<_Up, _Nm, _Yp, __void_t<_Yp[_Nm]>> - : is_convertible<_Yp(*)[_Nm], _Up(*)[_Nm]>::type - { }; - - - template - struct __sp_is_constructible_arr - : false_type - { }; - - template - struct __sp_is_constructible_arr<_Up, _Yp, __void_t<_Yp[]>> - : is_convertible<_Yp(*)[], _Up(*)[]>::type - { }; - - - template - struct __sp_is_constructible; - - - template - struct __sp_is_constructible<_Up[_Nm], _Yp> - : __sp_is_constructible_arrN<_Up, _Nm, _Yp>::type - { }; - - - template - struct __sp_is_constructible<_Up[], _Yp> - : __sp_is_constructible_arr<_Up, _Yp>::type - { }; - - - template - struct __sp_is_constructible - : is_convertible<_Yp*, _Tp*>::type - { }; - - - - template::value, bool = is_void<_Tp>::value> - class __shared_ptr_access - { - public: - using element_type = _Tp; - - element_type& - operator*() const noexcept - { - ; - return *_M_get(); - } - - element_type* - operator->() const noexcept - { - ; - return _M_get(); - } - - private: - element_type* - _M_get() const noexcept - { return static_cast*>(this)->get(); } - }; - - - template - class __shared_ptr_access<_Tp, _Lp, false, true> - { - public: - using element_type = _Tp; - - element_type* - operator->() const noexcept - { - auto __ptr = static_cast*>(this)->get(); - ; - return __ptr; - } - }; - - - template - class __shared_ptr_access<_Tp, _Lp, true, false> - { - public: - using element_type = typename remove_extent<_Tp>::type; - - - [[__deprecated__("shared_ptr::operator* is absent from C++17")]] - element_type& - operator*() const noexcept - { - ; - return *_M_get(); - } - - [[__deprecated__("shared_ptr::operator-> is absent from C++17")]] - element_type* - operator->() const noexcept - { - ; - return _M_get(); - } - - - element_type& - operator[](ptrdiff_t __i) const - { - ; - ; - return _M_get()[__i]; - } - - private: - element_type* - _M_get() const noexcept - { return static_cast*>(this)->get(); } - }; - - template - class __shared_ptr - : public __shared_ptr_access<_Tp, _Lp> - { - public: - using element_type = typename remove_extent<_Tp>::type; - - private: - - template - using _SafeConv - = typename enable_if<__sp_is_constructible<_Tp, _Yp>::value>::type; - - - template - using _Compatible = typename - enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; - - - template - using _Assignable = _Compatible<_Yp, __shared_ptr&>; - - - template::pointer> - using _UniqCompatible = typename enable_if<__and_< - __sp_compatible_with<_Yp*, _Tp*>, is_convertible<_Ptr, element_type*> - >::value, _Res>::type; - - - template - using _UniqAssignable = _UniqCompatible<_Yp, _Del, __shared_ptr&>; - - public: - - - - - - constexpr __shared_ptr() noexcept - : _M_ptr(0), _M_refcount() - { } - - template> - explicit - __shared_ptr(_Yp* __p) - : _M_ptr(__p), _M_refcount(__p, typename is_array<_Tp>::type()) - { - static_assert( !is_void<_Yp>::value, "incomplete type" ); - static_assert( sizeof(_Yp) > 0, "incomplete type" ); - _M_enable_shared_from_this_with(__p); - } - - template> - __shared_ptr(_Yp* __p, _Deleter __d) - : _M_ptr(__p), _M_refcount(__p, std::move(__d)) - { - static_assert(__is_invocable<_Deleter&, _Yp*&>::value, - "deleter expression d(p) is well-formed"); - _M_enable_shared_from_this_with(__p); - } - - template> - __shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) - : _M_ptr(__p), _M_refcount(__p, std::move(__d), std::move(__a)) - { - static_assert(__is_invocable<_Deleter&, _Yp*&>::value, - "deleter expression d(p) is well-formed"); - _M_enable_shared_from_this_with(__p); - } - - template - __shared_ptr(nullptr_t __p, _Deleter __d) - : _M_ptr(0), _M_refcount(__p, std::move(__d)) - { } - - template - __shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) - : _M_ptr(0), _M_refcount(__p, std::move(__d), std::move(__a)) - { } - - - template - __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r, - element_type* __p) noexcept - : _M_ptr(__p), _M_refcount(__r._M_refcount) - { } - - - template - __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r, - element_type* __p) noexcept - : _M_ptr(__p), _M_refcount() - { - _M_refcount._M_swap(__r._M_refcount); - __r._M_ptr = 0; - } - - __shared_ptr(const __shared_ptr&) noexcept = default; - __shared_ptr& operator=(const __shared_ptr&) noexcept = default; - ~__shared_ptr() = default; - - template> - __shared_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept - : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) - { } - - __shared_ptr(__shared_ptr&& __r) noexcept - : _M_ptr(__r._M_ptr), _M_refcount() - { - _M_refcount._M_swap(__r._M_refcount); - __r._M_ptr = 0; - } - - template> - __shared_ptr(__shared_ptr<_Yp, _Lp>&& __r) noexcept - : _M_ptr(__r._M_ptr), _M_refcount() - { - _M_refcount._M_swap(__r._M_refcount); - __r._M_ptr = 0; - } - - template> - explicit __shared_ptr(const __weak_ptr<_Yp, _Lp>& __r) - : _M_refcount(__r._M_refcount) - { - - - _M_ptr = __r._M_ptr; - } - - - template> - __shared_ptr(unique_ptr<_Yp, _Del>&& __r) - : _M_ptr(__r.get()), _M_refcount() - { - auto __raw = __to_address(__r.get()); - _M_refcount = __shared_count<_Lp>(std::move(__r)); - _M_enable_shared_from_this_with(__raw); - } - - - protected: - - template>, is_array<_Tp1>, - is_convertible::pointer, _Tp*> - >::value, bool>::type = true> - __shared_ptr(unique_ptr<_Tp1, _Del>&& __r, __sp_array_delete) - : _M_ptr(__r.get()), _M_refcount() - { - auto __raw = __to_address(__r.get()); - _M_refcount = __shared_count<_Lp>(std::move(__r)); - _M_enable_shared_from_this_with(__raw); - } - public: - - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - - template> - __shared_ptr(auto_ptr<_Yp>&& __r); -#pragma GCC diagnostic pop - - - constexpr __shared_ptr(nullptr_t) noexcept : __shared_ptr() { } - - template - _Assignable<_Yp> - operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept - { - _M_ptr = __r._M_ptr; - _M_refcount = __r._M_refcount; - return *this; - } - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - template - _Assignable<_Yp> - operator=(auto_ptr<_Yp>&& __r) - { - __shared_ptr(std::move(__r)).swap(*this); - return *this; - } -#pragma GCC diagnostic pop - - - __shared_ptr& - operator=(__shared_ptr&& __r) noexcept - { - __shared_ptr(std::move(__r)).swap(*this); - return *this; - } - - template - _Assignable<_Yp> - operator=(__shared_ptr<_Yp, _Lp>&& __r) noexcept - { - __shared_ptr(std::move(__r)).swap(*this); - return *this; - } - - template - _UniqAssignable<_Yp, _Del> - operator=(unique_ptr<_Yp, _Del>&& __r) - { - __shared_ptr(std::move(__r)).swap(*this); - return *this; - } - - void - reset() noexcept - { __shared_ptr().swap(*this); } - - template - _SafeConv<_Yp> - reset(_Yp* __p) - { - - ; - __shared_ptr(__p).swap(*this); - } - - template - _SafeConv<_Yp> - reset(_Yp* __p, _Deleter __d) - { __shared_ptr(__p, std::move(__d)).swap(*this); } - - template - _SafeConv<_Yp> - reset(_Yp* __p, _Deleter __d, _Alloc __a) - { __shared_ptr(__p, std::move(__d), std::move(__a)).swap(*this); } - - - element_type* - get() const noexcept - { return _M_ptr; } - - - explicit operator bool() const - { return _M_ptr == 0 ? false : true; } - - - bool - unique() const noexcept - { return _M_refcount._M_unique(); } - - - long - use_count() const noexcept - { return _M_refcount._M_get_use_count(); } - - - void - swap(__shared_ptr<_Tp, _Lp>& __other) noexcept - { - std::swap(_M_ptr, __other._M_ptr); - _M_refcount._M_swap(__other._M_refcount); - } -# 1356 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 - template - bool - owner_before(__shared_ptr<_Tp1, _Lp> const& __rhs) const noexcept - { return _M_refcount._M_less(__rhs._M_refcount); } - - template - bool - owner_before(__weak_ptr<_Tp1, _Lp> const& __rhs) const noexcept - { return _M_refcount._M_less(__rhs._M_refcount); } - - - protected: - - template - __shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) - : _M_ptr(), _M_refcount(_M_ptr, __tag, std::forward<_Args>(__args)...) - { _M_enable_shared_from_this_with(_M_ptr); } - - template - friend __shared_ptr<_Tp1, _Lp1> - __allocate_shared(const _Alloc& __a, _Args&&... __args); - - - - __shared_ptr(const __weak_ptr<_Tp, _Lp>& __r, std::nothrow_t) - : _M_refcount(__r._M_refcount, std::nothrow) - { - _M_ptr = _M_refcount._M_get_use_count() ? __r._M_ptr : nullptr; - } - - friend class __weak_ptr<_Tp, _Lp>; - - private: - - template - using __esft_base_t = decltype(__enable_shared_from_this_base( - std::declval&>(), - std::declval<_Yp*>())); - - - template - struct __has_esft_base - : false_type { }; - - template - struct __has_esft_base<_Yp, __void_t<__esft_base_t<_Yp>>> - : __not_> { }; - - template::type> - typename enable_if<__has_esft_base<_Yp2>::value>::type - _M_enable_shared_from_this_with(_Yp* __p) noexcept - { - if (auto __base = __enable_shared_from_this_base(_M_refcount, __p)) - __base->_M_weak_assign(const_cast<_Yp2*>(__p), _M_refcount); - } - - template::type> - typename enable_if::value>::type - _M_enable_shared_from_this_with(_Yp*) noexcept - { } - - void* - _M_get_deleter(const std::type_info& __ti) const noexcept - { return _M_refcount._M_get_deleter(__ti); } - - template friend class __shared_ptr; - template friend class __weak_ptr; - - template - friend _Del* get_deleter(const __shared_ptr<_Tp1, _Lp1>&) noexcept; - - template - friend _Del* get_deleter(const shared_ptr<_Tp1>&) noexcept; - - element_type* _M_ptr; - __shared_count<_Lp> _M_refcount; - }; - - - - template - inline bool - operator==(const __shared_ptr<_Tp1, _Lp>& __a, - const __shared_ptr<_Tp2, _Lp>& __b) noexcept - { return __a.get() == __b.get(); } - - template - inline bool - operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { return !__a; } -# 1463 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 - template - inline bool - operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { return !__a; } - - template - inline bool - operator!=(const __shared_ptr<_Tp1, _Lp>& __a, - const __shared_ptr<_Tp2, _Lp>& __b) noexcept - { return __a.get() != __b.get(); } - - template - inline bool - operator!=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { return (bool)__a; } - - template - inline bool - operator!=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { return (bool)__a; } - - template - inline bool - operator<(const __shared_ptr<_Tp, _Lp>& __a, - const __shared_ptr<_Up, _Lp>& __b) noexcept - { - using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; - using _Up_elt = typename __shared_ptr<_Up, _Lp>::element_type; - using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; - return less<_Vp>()(__a.get(), __b.get()); - } - - template - inline bool - operator<(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { - using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; - return less<_Tp_elt*>()(__a.get(), nullptr); - } - - template - inline bool - operator<(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { - using _Tp_elt = typename __shared_ptr<_Tp, _Lp>::element_type; - return less<_Tp_elt*>()(nullptr, __a.get()); - } - - template - inline bool - operator<=(const __shared_ptr<_Tp1, _Lp>& __a, - const __shared_ptr<_Tp2, _Lp>& __b) noexcept - { return !(__b < __a); } - - template - inline bool - operator<=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { return !(nullptr < __a); } - - template - inline bool - operator<=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { return !(__a < nullptr); } - - template - inline bool - operator>(const __shared_ptr<_Tp1, _Lp>& __a, - const __shared_ptr<_Tp2, _Lp>& __b) noexcept - { return (__b < __a); } - - template - inline bool - operator>(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { return nullptr < __a; } - - template - inline bool - operator>(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { return __a < nullptr; } - - template - inline bool - operator>=(const __shared_ptr<_Tp1, _Lp>& __a, - const __shared_ptr<_Tp2, _Lp>& __b) noexcept - { return !(__a < __b); } - - template - inline bool - operator>=(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept - { return !(__a < nullptr); } - - template - inline bool - operator>=(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept - { return !(nullptr < __a); } - - - - template - inline void - swap(__shared_ptr<_Tp, _Lp>& __a, __shared_ptr<_Tp, _Lp>& __b) noexcept - { __a.swap(__b); } -# 1573 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 - template - inline __shared_ptr<_Tp, _Lp> - static_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept - { - using _Sp = __shared_ptr<_Tp, _Lp>; - return _Sp(__r, static_cast(__r.get())); - } - - - - - - - template - inline __shared_ptr<_Tp, _Lp> - const_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept - { - using _Sp = __shared_ptr<_Tp, _Lp>; - return _Sp(__r, const_cast(__r.get())); - } - - - - - - - template - inline __shared_ptr<_Tp, _Lp> - dynamic_pointer_cast(const __shared_ptr<_Tp1, _Lp>& __r) noexcept - { - using _Sp = __shared_ptr<_Tp, _Lp>; - if (auto* __p = dynamic_cast(__r.get())) - return _Sp(__r, __p); - return _Sp(); - } -# 1619 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 - template - class __weak_ptr - { - template - using _Compatible = typename - enable_if<__sp_compatible_with<_Yp*, _Tp*>::value, _Res>::type; - - - template - using _Assignable = _Compatible<_Yp, __weak_ptr&>; - - public: - using element_type = typename remove_extent<_Tp>::type; - - constexpr __weak_ptr() noexcept - : _M_ptr(nullptr), _M_refcount() - { } - - __weak_ptr(const __weak_ptr&) noexcept = default; - - ~__weak_ptr() = default; -# 1655 "/usr/include/c++/10/bits/shared_ptr_base.h" 3 - template> - __weak_ptr(const __weak_ptr<_Yp, _Lp>& __r) noexcept - : _M_refcount(__r._M_refcount) - { _M_ptr = __r.lock().get(); } - - template> - __weak_ptr(const __shared_ptr<_Yp, _Lp>& __r) noexcept - : _M_ptr(__r._M_ptr), _M_refcount(__r._M_refcount) - { } - - __weak_ptr(__weak_ptr&& __r) noexcept - : _M_ptr(__r._M_ptr), _M_refcount(std::move(__r._M_refcount)) - { __r._M_ptr = nullptr; } - - template> - __weak_ptr(__weak_ptr<_Yp, _Lp>&& __r) noexcept - : _M_ptr(__r.lock().get()), _M_refcount(std::move(__r._M_refcount)) - { __r._M_ptr = nullptr; } - - __weak_ptr& - operator=(const __weak_ptr& __r) noexcept = default; - - template - _Assignable<_Yp> - operator=(const __weak_ptr<_Yp, _Lp>& __r) noexcept - { - _M_ptr = __r.lock().get(); - _M_refcount = __r._M_refcount; - return *this; - } - - template - _Assignable<_Yp> - operator=(const __shared_ptr<_Yp, _Lp>& __r) noexcept - { - _M_ptr = __r._M_ptr; - _M_refcount = __r._M_refcount; - return *this; - } - - __weak_ptr& - operator=(__weak_ptr&& __r) noexcept - { - _M_ptr = __r._M_ptr; - _M_refcount = std::move(__r._M_refcount); - __r._M_ptr = nullptr; - return *this; - } - - template - _Assignable<_Yp> - operator=(__weak_ptr<_Yp, _Lp>&& __r) noexcept - { - _M_ptr = __r.lock().get(); - _M_refcount = std::move(__r._M_refcount); - __r._M_ptr = nullptr; - return *this; - } - - __shared_ptr<_Tp, _Lp> - lock() const noexcept - { return __shared_ptr(*this, std::nothrow); } - - long - use_count() const noexcept - { return _M_refcount._M_get_use_count(); } - - bool - expired() const noexcept - { return _M_refcount._M_get_use_count() == 0; } - - template - bool - owner_before(const __shared_ptr<_Tp1, _Lp>& __rhs) const noexcept - { return _M_refcount._M_less(__rhs._M_refcount); } - - template - bool - owner_before(const __weak_ptr<_Tp1, _Lp>& __rhs) const noexcept - { return _M_refcount._M_less(__rhs._M_refcount); } - - void - reset() noexcept - { __weak_ptr().swap(*this); } - - void - swap(__weak_ptr& __s) noexcept - { - std::swap(_M_ptr, __s._M_ptr); - _M_refcount._M_swap(__s._M_refcount); - } - - private: - - void - _M_assign(_Tp* __ptr, const __shared_count<_Lp>& __refcount) noexcept - { - if (use_count() == 0) - { - _M_ptr = __ptr; - _M_refcount = __refcount; - } - } - - template friend class __shared_ptr; - template friend class __weak_ptr; - friend class __enable_shared_from_this<_Tp, _Lp>; - friend class enable_shared_from_this<_Tp>; - - element_type* _M_ptr; - __weak_count<_Lp> _M_refcount; - }; - - - template - inline void - swap(__weak_ptr<_Tp, _Lp>& __a, __weak_ptr<_Tp, _Lp>& __b) noexcept - { __a.swap(__b); } - - template - struct _Sp_owner_less : public binary_function<_Tp, _Tp, bool> - { - bool - operator()(const _Tp& __lhs, const _Tp& __rhs) const noexcept - { return __lhs.owner_before(__rhs); } - - bool - operator()(const _Tp& __lhs, const _Tp1& __rhs) const noexcept - { return __lhs.owner_before(__rhs); } - - bool - operator()(const _Tp1& __lhs, const _Tp& __rhs) const noexcept - { return __lhs.owner_before(__rhs); } - }; - - template<> - struct _Sp_owner_less - { - template - auto - operator()(const _Tp& __lhs, const _Up& __rhs) const noexcept - -> decltype(__lhs.owner_before(__rhs)) - { return __lhs.owner_before(__rhs); } - - using is_transparent = void; - }; - - template - struct owner_less<__shared_ptr<_Tp, _Lp>> - : public _Sp_owner_less<__shared_ptr<_Tp, _Lp>, __weak_ptr<_Tp, _Lp>> - { }; - - template - struct owner_less<__weak_ptr<_Tp, _Lp>> - : public _Sp_owner_less<__weak_ptr<_Tp, _Lp>, __shared_ptr<_Tp, _Lp>> - { }; - - - template - class __enable_shared_from_this - { - protected: - constexpr __enable_shared_from_this() noexcept { } - - __enable_shared_from_this(const __enable_shared_from_this&) noexcept { } - - __enable_shared_from_this& - operator=(const __enable_shared_from_this&) noexcept - { return *this; } - - ~__enable_shared_from_this() { } - - public: - __shared_ptr<_Tp, _Lp> - shared_from_this() - { return __shared_ptr<_Tp, _Lp>(this->_M_weak_this); } - - __shared_ptr - shared_from_this() const - { return __shared_ptr(this->_M_weak_this); } - - - __weak_ptr<_Tp, _Lp> - weak_from_this() noexcept - { return this->_M_weak_this; } - - __weak_ptr - weak_from_this() const noexcept - { return this->_M_weak_this; } - - - private: - template - void - _M_weak_assign(_Tp1* __p, const __shared_count<_Lp>& __n) const noexcept - { _M_weak_this._M_assign(__p, __n); } - - friend const __enable_shared_from_this* - __enable_shared_from_this_base(const __shared_count<_Lp>&, - const __enable_shared_from_this* __p) - { return __p; } - - template - friend class __shared_ptr; - - mutable __weak_ptr<_Tp, _Lp> _M_weak_this; - }; - - template - inline __shared_ptr<_Tp, _Lp> - __allocate_shared(const _Alloc& __a, _Args&&... __args) - { - return __shared_ptr<_Tp, _Lp>(_Sp_alloc_shared_tag<_Alloc>{__a}, - std::forward<_Args>(__args)...); - } - - template - inline __shared_ptr<_Tp, _Lp> - __make_shared(_Args&&... __args) - { - typedef typename std::remove_const<_Tp>::type _Tp_nc; - return std::__allocate_shared<_Tp, _Lp>(std::allocator<_Tp_nc>(), - std::forward<_Args>(__args)...); - } - - - template - struct hash<__shared_ptr<_Tp, _Lp>> - : public __hash_base> - { - size_t - operator()(const __shared_ptr<_Tp, _Lp>& __s) const noexcept - { - return hash::element_type*>()( - __s.get()); - } - }; - - -} -# 53 "/usr/include/c++/10/bits/shared_ptr.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 67 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline std::basic_ostream<_Ch, _Tr>& - operator<<(std::basic_ostream<_Ch, _Tr>& __os, - const __shared_ptr<_Tp, _Lp>& __p) - { - __os << __p.get(); - return __os; - } - - template - inline _Del* - get_deleter(const __shared_ptr<_Tp, _Lp>& __p) noexcept - { - - return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); - - - - } - - - - - - template - inline _Del* - get_deleter(const shared_ptr<_Tp>& __p) noexcept - { - - return static_cast<_Del*>(__p._M_get_deleter(typeid(_Del))); - - - - } -# 120 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - class shared_ptr : public __shared_ptr<_Tp> - { - template - using _Constructible = typename enable_if< - is_constructible<__shared_ptr<_Tp>, _Args...>::value - >::type; - - template - using _Assignable = typename enable_if< - is_assignable<__shared_ptr<_Tp>&, _Arg>::value, shared_ptr& - >::type; - - public: - - - using element_type = typename __shared_ptr<_Tp>::element_type; -# 147 "/usr/include/c++/10/bits/shared_ptr.h" 3 - constexpr shared_ptr() noexcept : __shared_ptr<_Tp>() { } - - shared_ptr(const shared_ptr&) noexcept = default; - - - - - - - - template> - explicit - shared_ptr(_Yp* __p) : __shared_ptr<_Tp>(__p) { } -# 174 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template> - shared_ptr(_Yp* __p, _Deleter __d) - : __shared_ptr<_Tp>(__p, std::move(__d)) { } -# 192 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - shared_ptr(nullptr_t __p, _Deleter __d) - : __shared_ptr<_Tp>(__p, std::move(__d)) { } -# 211 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template> - shared_ptr(_Yp* __p, _Deleter __d, _Alloc __a) - : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } -# 231 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - shared_ptr(nullptr_t __p, _Deleter __d, _Alloc __a) - : __shared_ptr<_Tp>(__p, std::move(__d), std::move(__a)) { } -# 255 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept - : __shared_ptr<_Tp>(__r, __p) { } -# 293 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template&>> - shared_ptr(const shared_ptr<_Yp>& __r) noexcept - : __shared_ptr<_Tp>(__r) { } - - - - - - - shared_ptr(shared_ptr&& __r) noexcept - : __shared_ptr<_Tp>(std::move(__r)) { } - - - - - - - template>> - shared_ptr(shared_ptr<_Yp>&& __r) noexcept - : __shared_ptr<_Tp>(std::move(__r)) { } -# 323 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template&>> - explicit shared_ptr(const weak_ptr<_Yp>& __r) - : __shared_ptr<_Tp>(__r) { } - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - template>> - shared_ptr(auto_ptr<_Yp>&& __r); -#pragma GCC diagnostic pop - - - - - template>> - shared_ptr(unique_ptr<_Yp, _Del>&& __r) - : __shared_ptr<_Tp>(std::move(__r)) { } - - - - - - template, __sp_array_delete>* = 0> - shared_ptr(unique_ptr<_Yp, _Del>&& __r) - : __shared_ptr<_Tp>(std::move(__r), __sp_array_delete()) { } - - - - - - - constexpr shared_ptr(nullptr_t) noexcept : shared_ptr() { } - - shared_ptr& operator=(const shared_ptr&) noexcept = default; - - template - _Assignable&> - operator=(const shared_ptr<_Yp>& __r) noexcept - { - this->__shared_ptr<_Tp>::operator=(__r); - return *this; - } - - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - template - _Assignable> - operator=(auto_ptr<_Yp>&& __r) - { - this->__shared_ptr<_Tp>::operator=(std::move(__r)); - return *this; - } -#pragma GCC diagnostic pop - - - shared_ptr& - operator=(shared_ptr&& __r) noexcept - { - this->__shared_ptr<_Tp>::operator=(std::move(__r)); - return *this; - } - - template - _Assignable> - operator=(shared_ptr<_Yp>&& __r) noexcept - { - this->__shared_ptr<_Tp>::operator=(std::move(__r)); - return *this; - } - - template - _Assignable> - operator=(unique_ptr<_Yp, _Del>&& __r) - { - this->__shared_ptr<_Tp>::operator=(std::move(__r)); - return *this; - } - - private: - - template - shared_ptr(_Sp_alloc_shared_tag<_Alloc> __tag, _Args&&... __args) - : __shared_ptr<_Tp>(__tag, std::forward<_Args>(__args)...) - { } - - template - friend shared_ptr<_Yp> - allocate_shared(const _Alloc& __a, _Args&&... __args); - - - shared_ptr(const weak_ptr<_Tp>& __r, std::nothrow_t) - : __shared_ptr<_Tp>(__r, std::nothrow) { } - - friend class weak_ptr<_Tp>; - }; -# 434 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline bool - operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { return __a.get() == __b.get(); } - - - template - inline bool - operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { return !__a; } -# 461 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline bool - operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { return !__a; } - - - template - inline bool - operator!=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { return __a.get() != __b.get(); } - - - template - inline bool - operator!=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { return (bool)__a; } - - - template - inline bool - operator!=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { return (bool)__a; } - - - template - inline bool - operator<(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { - using _Tp_elt = typename shared_ptr<_Tp>::element_type; - using _Up_elt = typename shared_ptr<_Up>::element_type; - using _Vp = typename common_type<_Tp_elt*, _Up_elt*>::type; - return less<_Vp>()(__a.get(), __b.get()); - } - - - template - inline bool - operator<(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { - using _Tp_elt = typename shared_ptr<_Tp>::element_type; - return less<_Tp_elt*>()(__a.get(), nullptr); - } - - - template - inline bool - operator<(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { - using _Tp_elt = typename shared_ptr<_Tp>::element_type; - return less<_Tp_elt*>()(nullptr, __a.get()); - } - - - template - inline bool - operator<=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { return !(__b < __a); } - - - template - inline bool - operator<=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { return !(nullptr < __a); } - - - template - inline bool - operator<=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { return !(__a < nullptr); } - - - template - inline bool - operator>(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { return (__b < __a); } - - - template - inline bool - operator>(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { return nullptr < __a; } - - - template - inline bool - operator>(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { return __a < nullptr; } - - - template - inline bool - operator>=(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept - { return !(__a < __b); } - - - template - inline bool - operator>=(const shared_ptr<_Tp>& __a, nullptr_t) noexcept - { return !(__a < nullptr); } - - - template - inline bool - operator>=(nullptr_t, const shared_ptr<_Tp>& __a) noexcept - { return !(nullptr < __a); } - - - - - - template - inline void - swap(shared_ptr<_Tp>& __a, shared_ptr<_Tp>& __b) noexcept - { __a.swap(__b); } - - - - - template - inline shared_ptr<_Tp> - static_pointer_cast(const shared_ptr<_Up>& __r) noexcept - { - using _Sp = shared_ptr<_Tp>; - return _Sp(__r, static_cast(__r.get())); - } - - - template - inline shared_ptr<_Tp> - const_pointer_cast(const shared_ptr<_Up>& __r) noexcept - { - using _Sp = shared_ptr<_Tp>; - return _Sp(__r, const_cast(__r.get())); - } - - - template - inline shared_ptr<_Tp> - dynamic_pointer_cast(const shared_ptr<_Up>& __r) noexcept - { - using _Sp = shared_ptr<_Tp>; - if (auto* __p = dynamic_cast(__r.get())) - return _Sp(__r, __p); - return _Sp(); - } -# 684 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - class weak_ptr : public __weak_ptr<_Tp> - { - template - using _Constructible = typename enable_if< - is_constructible<__weak_ptr<_Tp>, _Arg>::value - >::type; - - template - using _Assignable = typename enable_if< - is_assignable<__weak_ptr<_Tp>&, _Arg>::value, weak_ptr& - >::type; - - public: - constexpr weak_ptr() noexcept = default; - - template&>> - weak_ptr(const shared_ptr<_Yp>& __r) noexcept - : __weak_ptr<_Tp>(__r) { } - - weak_ptr(const weak_ptr&) noexcept = default; - - template&>> - weak_ptr(const weak_ptr<_Yp>& __r) noexcept - : __weak_ptr<_Tp>(__r) { } - - weak_ptr(weak_ptr&&) noexcept = default; - - template>> - weak_ptr(weak_ptr<_Yp>&& __r) noexcept - : __weak_ptr<_Tp>(std::move(__r)) { } - - weak_ptr& - operator=(const weak_ptr& __r) noexcept = default; - - template - _Assignable&> - operator=(const weak_ptr<_Yp>& __r) noexcept - { - this->__weak_ptr<_Tp>::operator=(__r); - return *this; - } - - template - _Assignable&> - operator=(const shared_ptr<_Yp>& __r) noexcept - { - this->__weak_ptr<_Tp>::operator=(__r); - return *this; - } - - weak_ptr& - operator=(weak_ptr&& __r) noexcept = default; - - template - _Assignable> - operator=(weak_ptr<_Yp>&& __r) noexcept - { - this->__weak_ptr<_Tp>::operator=(std::move(__r)); - return *this; - } - - shared_ptr<_Tp> - lock() const noexcept - { return shared_ptr<_Tp>(*this, std::nothrow); } - }; -# 760 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline void - swap(weak_ptr<_Tp>& __a, weak_ptr<_Tp>& __b) noexcept - { __a.swap(__b); } - - - - template - struct owner_less; - - - template<> - struct owner_less : _Sp_owner_less - { }; - - - template - struct owner_less> - : public _Sp_owner_less, weak_ptr<_Tp>> - { }; - - - template - struct owner_less> - : public _Sp_owner_less, shared_ptr<_Tp>> - { }; - - - - - template - class enable_shared_from_this - { - protected: - constexpr enable_shared_from_this() noexcept { } - - enable_shared_from_this(const enable_shared_from_this&) noexcept { } - - enable_shared_from_this& - operator=(const enable_shared_from_this&) noexcept - { return *this; } - - ~enable_shared_from_this() { } - - public: - shared_ptr<_Tp> - shared_from_this() - { return shared_ptr<_Tp>(this->_M_weak_this); } - - shared_ptr - shared_from_this() const - { return shared_ptr(this->_M_weak_this); } - - - - weak_ptr<_Tp> - weak_from_this() noexcept - { return this->_M_weak_this; } - - weak_ptr - weak_from_this() const noexcept - { return this->_M_weak_this; } - - - private: - template - void - _M_weak_assign(_Tp1* __p, const __shared_count<>& __n) const noexcept - { _M_weak_this._M_assign(__p, __n); } - - - friend const enable_shared_from_this* - __enable_shared_from_this_base(const __shared_count<>&, - const enable_shared_from_this* __p) - { return __p; } - - template - friend class __shared_ptr; - - mutable weak_ptr<_Tp> _M_weak_this; - }; -# 855 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline shared_ptr<_Tp> - allocate_shared(const _Alloc& __a, _Args&&... __args) - { - return shared_ptr<_Tp>(_Sp_alloc_shared_tag<_Alloc>{__a}, - std::forward<_Args>(__args)...); - } -# 870 "/usr/include/c++/10/bits/shared_ptr.h" 3 - template - inline shared_ptr<_Tp> - make_shared(_Args&&... __args) - { - typedef typename std::remove_cv<_Tp>::type _Tp_nc; - return std::allocate_shared<_Tp>(std::allocator<_Tp_nc>(), - std::forward<_Args>(__args)...); - } - - - template - struct hash> - : public __hash_base> - { - size_t - operator()(const shared_ptr<_Tp>& __s) const noexcept - { - return std::hash::element_type*>()(__s.get()); - } - }; -# 915 "/usr/include/c++/10/bits/shared_ptr.h" 3 - -} -# 85 "/usr/include/c++/10/memory" 2 3 -# 1 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 1 3 -# 33 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 -# 1 "/usr/include/c++/10/bits/atomic_base.h" 1 3 -# 33 "/usr/include/c++/10/bits/atomic_base.h" 3 - -# 34 "/usr/include/c++/10/bits/atomic_base.h" 3 - - - -# 1 "/usr/include/c++/10/bits/atomic_lockfree_defines.h" 1 3 -# 33 "/usr/include/c++/10/bits/atomic_lockfree_defines.h" 3 - -# 34 "/usr/include/c++/10/bits/atomic_lockfree_defines.h" 3 -# 38 "/usr/include/c++/10/bits/atomic_base.h" 2 3 - - - - - - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 74 "/usr/include/c++/10/bits/atomic_base.h" 3 - typedef enum memory_order - { - memory_order_relaxed, - memory_order_consume, - memory_order_acquire, - memory_order_release, - memory_order_acq_rel, - memory_order_seq_cst - } memory_order; - - - enum __memory_order_modifier - { - __memory_order_mask = 0x0ffff, - __memory_order_modifier_mask = 0xffff0000, - __memory_order_hle_acquire = 0x10000, - __memory_order_hle_release = 0x20000 - }; - - constexpr memory_order - operator|(memory_order __m, __memory_order_modifier __mod) - { - return memory_order(int(__m) | int(__mod)); - } - - constexpr memory_order - operator&(memory_order __m, __memory_order_modifier __mod) - { - return memory_order(int(__m) & int(__mod)); - } - - - constexpr memory_order - __cmpexch_failure_order2(memory_order __m) noexcept - { - return __m == memory_order_acq_rel ? memory_order_acquire - : __m == memory_order_release ? memory_order_relaxed : __m; - } - - constexpr memory_order - __cmpexch_failure_order(memory_order __m) noexcept - { - return memory_order(__cmpexch_failure_order2(__m & __memory_order_mask) - | __memory_order_modifier(__m & __memory_order_modifier_mask)); - } - - inline __attribute__((__always_inline__)) void - atomic_thread_fence(memory_order __m) noexcept - { __atomic_thread_fence(int(__m)); } - - inline __attribute__((__always_inline__)) void - atomic_signal_fence(memory_order __m) noexcept - { __atomic_signal_fence(int(__m)); } - - - template - inline _Tp - kill_dependency(_Tp __y) noexcept - { - _Tp __ret(__y); - return __ret; - } - - - - template - struct __atomic_base; -# 151 "/usr/include/c++/10/bits/atomic_base.h" 3 - template - struct atomic; - - template - struct atomic<_Tp*>; - - - - typedef bool __atomic_flag_data_type; -# 174 "/usr/include/c++/10/bits/atomic_base.h" 3 - extern "C" { - - struct __atomic_flag_base - { - __atomic_flag_data_type _M_i ; - }; - - } - - - - - struct atomic_flag : public __atomic_flag_base - { - atomic_flag() noexcept = default; - ~atomic_flag() noexcept = default; - atomic_flag(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) = delete; - atomic_flag& operator=(const atomic_flag&) volatile = delete; - - - constexpr atomic_flag(bool __i) noexcept - : __atomic_flag_base{ _S_init(__i) } - { } - - inline __attribute__((__always_inline__)) bool - test_and_set(memory_order __m = memory_order_seq_cst) noexcept - { - return __atomic_test_and_set (&_M_i, int(__m)); - } - - inline __attribute__((__always_inline__)) bool - test_and_set(memory_order __m = memory_order_seq_cst) volatile noexcept - { - return __atomic_test_and_set (&_M_i, int(__m)); - } - - inline __attribute__((__always_inline__)) void - clear(memory_order __m = memory_order_seq_cst) noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - ; - - __atomic_clear (&_M_i, int(__m)); - } - - inline __attribute__((__always_inline__)) void - clear(memory_order __m = memory_order_seq_cst) volatile noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - ; - - __atomic_clear (&_M_i, int(__m)); - } - - private: - static constexpr __atomic_flag_data_type - _S_init(bool __i) - { return __i ? 1 : 0; } - }; -# 264 "/usr/include/c++/10/bits/atomic_base.h" 3 - template - struct __atomic_base - { - using value_type = _ITp; - using difference_type = value_type; - - private: - typedef _ITp __int_type; - - static constexpr int _S_alignment = - sizeof(_ITp) > alignof(_ITp) ? sizeof(_ITp) : alignof(_ITp); - - alignas(_S_alignment) __int_type _M_i ; - - public: - __atomic_base() noexcept = default; - ~__atomic_base() noexcept = default; - __atomic_base(const __atomic_base&) = delete; - __atomic_base& operator=(const __atomic_base&) = delete; - __atomic_base& operator=(const __atomic_base&) volatile = delete; - - - constexpr __atomic_base(__int_type __i) noexcept : _M_i (__i) { } - - operator __int_type() const noexcept - { return load(); } - - operator __int_type() const volatile noexcept - { return load(); } - - __int_type - operator=(__int_type __i) noexcept - { - store(__i); - return __i; - } - - __int_type - operator=(__int_type __i) volatile noexcept - { - store(__i); - return __i; - } - - __int_type - operator++(int) noexcept - { return fetch_add(1); } - - __int_type - operator++(int) volatile noexcept - { return fetch_add(1); } - - __int_type - operator--(int) noexcept - { return fetch_sub(1); } - - __int_type - operator--(int) volatile noexcept - { return fetch_sub(1); } - - __int_type - operator++() noexcept - { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } - - __int_type - operator++() volatile noexcept - { return __atomic_add_fetch(&_M_i, 1, int(memory_order_seq_cst)); } - - __int_type - operator--() noexcept - { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } - - __int_type - operator--() volatile noexcept - { return __atomic_sub_fetch(&_M_i, 1, int(memory_order_seq_cst)); } - - __int_type - operator+=(__int_type __i) noexcept - { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator+=(__int_type __i) volatile noexcept - { return __atomic_add_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator-=(__int_type __i) noexcept - { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator-=(__int_type __i) volatile noexcept - { return __atomic_sub_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator&=(__int_type __i) noexcept - { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator&=(__int_type __i) volatile noexcept - { return __atomic_and_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator|=(__int_type __i) noexcept - { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator|=(__int_type __i) volatile noexcept - { return __atomic_or_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator^=(__int_type __i) noexcept - { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - __int_type - operator^=(__int_type __i) volatile noexcept - { return __atomic_xor_fetch(&_M_i, __i, int(memory_order_seq_cst)); } - - bool - is_lock_free() const noexcept - { - - return __atomic_is_lock_free(sizeof(_M_i), - reinterpret_cast(-_S_alignment)); - } - - bool - is_lock_free() const volatile noexcept - { - - return __atomic_is_lock_free(sizeof(_M_i), - reinterpret_cast(-_S_alignment)); - } - - inline __attribute__((__always_inline__)) void - store(__int_type __i, memory_order __m = memory_order_seq_cst) noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - ; - - __atomic_store_n(&_M_i, __i, int(__m)); - } - - inline __attribute__((__always_inline__)) void - store(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - ; - - __atomic_store_n(&_M_i, __i, int(__m)); - } - - inline __attribute__((__always_inline__)) __int_type - load(memory_order __m = memory_order_seq_cst) const noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - - return __atomic_load_n(&_M_i, int(__m)); - } - - inline __attribute__((__always_inline__)) __int_type - load(memory_order __m = memory_order_seq_cst) const volatile noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - - return __atomic_load_n(&_M_i, int(__m)); - } - - inline __attribute__((__always_inline__)) __int_type - exchange(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { - return __atomic_exchange_n(&_M_i, __i, int(__m)); - } - - - inline __attribute__((__always_inline__)) __int_type - exchange(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - return __atomic_exchange_n(&_M_i, __i, int(__m)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_weak(__int_type& __i1, __int_type __i2, - memory_order __m1, memory_order __m2) noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_weak(__int_type& __i1, __int_type __i2, - memory_order __m1, - memory_order __m2) volatile noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 1, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_weak(__int_type& __i1, __int_type __i2, - memory_order __m = memory_order_seq_cst) noexcept - { - return compare_exchange_weak(__i1, __i2, __m, - __cmpexch_failure_order(__m)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_weak(__int_type& __i1, __int_type __i2, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - return compare_exchange_weak(__i1, __i2, __m, - __cmpexch_failure_order(__m)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__int_type& __i1, __int_type __i2, - memory_order __m1, memory_order __m2) noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__int_type& __i1, __int_type __i2, - memory_order __m1, - memory_order __m2) volatile noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_i, &__i1, __i2, 0, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__int_type& __i1, __int_type __i2, - memory_order __m = memory_order_seq_cst) noexcept - { - return compare_exchange_strong(__i1, __i2, __m, - __cmpexch_failure_order(__m)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__int_type& __i1, __int_type __i2, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - return compare_exchange_strong(__i1, __i2, __m, - __cmpexch_failure_order(__m)); - } - - inline __attribute__((__always_inline__)) __int_type - fetch_add(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_add(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_add(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_add(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_sub(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_sub(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_sub(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_and(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_and(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_and(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_and(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_or(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_or(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_or(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_or(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_xor(__int_type __i, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } - - inline __attribute__((__always_inline__)) __int_type - fetch_xor(__int_type __i, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_xor(&_M_i, __i, int(__m)); } - }; - - - - template - struct __atomic_base<_PTp*> - { - private: - typedef _PTp* __pointer_type; - - __pointer_type _M_p ; - - - constexpr ptrdiff_t - _M_type_size(ptrdiff_t __d) const { return __d * sizeof(_PTp); } - - constexpr ptrdiff_t - _M_type_size(ptrdiff_t __d) const volatile { return __d * sizeof(_PTp); } - - public: - __atomic_base() noexcept = default; - ~__atomic_base() noexcept = default; - __atomic_base(const __atomic_base&) = delete; - __atomic_base& operator=(const __atomic_base&) = delete; - __atomic_base& operator=(const __atomic_base&) volatile = delete; - - - constexpr __atomic_base(__pointer_type __p) noexcept : _M_p (__p) { } - - operator __pointer_type() const noexcept - { return load(); } - - operator __pointer_type() const volatile noexcept - { return load(); } - - __pointer_type - operator=(__pointer_type __p) noexcept - { - store(__p); - return __p; - } - - __pointer_type - operator=(__pointer_type __p) volatile noexcept - { - store(__p); - return __p; - } - - __pointer_type - operator++(int) noexcept - { return fetch_add(1); } - - __pointer_type - operator++(int) volatile noexcept - { return fetch_add(1); } - - __pointer_type - operator--(int) noexcept - { return fetch_sub(1); } - - __pointer_type - operator--(int) volatile noexcept - { return fetch_sub(1); } - - __pointer_type - operator++() noexcept - { return __atomic_add_fetch(&_M_p, _M_type_size(1), - int(memory_order_seq_cst)); } - - __pointer_type - operator++() volatile noexcept - { return __atomic_add_fetch(&_M_p, _M_type_size(1), - int(memory_order_seq_cst)); } - - __pointer_type - operator--() noexcept - { return __atomic_sub_fetch(&_M_p, _M_type_size(1), - int(memory_order_seq_cst)); } - - __pointer_type - operator--() volatile noexcept - { return __atomic_sub_fetch(&_M_p, _M_type_size(1), - int(memory_order_seq_cst)); } - - __pointer_type - operator+=(ptrdiff_t __d) noexcept - { return __atomic_add_fetch(&_M_p, _M_type_size(__d), - int(memory_order_seq_cst)); } - - __pointer_type - operator+=(ptrdiff_t __d) volatile noexcept - { return __atomic_add_fetch(&_M_p, _M_type_size(__d), - int(memory_order_seq_cst)); } - - __pointer_type - operator-=(ptrdiff_t __d) noexcept - { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), - int(memory_order_seq_cst)); } - - __pointer_type - operator-=(ptrdiff_t __d) volatile noexcept - { return __atomic_sub_fetch(&_M_p, _M_type_size(__d), - int(memory_order_seq_cst)); } - - bool - is_lock_free() const noexcept - { - - return __atomic_is_lock_free(sizeof(_M_p), - reinterpret_cast(-__alignof(_M_p))); - } - - bool - is_lock_free() const volatile noexcept - { - - return __atomic_is_lock_free(sizeof(_M_p), - reinterpret_cast(-__alignof(_M_p))); - } - - inline __attribute__((__always_inline__)) void - store(__pointer_type __p, - memory_order __m = memory_order_seq_cst) noexcept - { - memory_order __b = __m & __memory_order_mask; - - ; - ; - ; - - __atomic_store_n(&_M_p, __p, int(__m)); - } - - inline __attribute__((__always_inline__)) void - store(__pointer_type __p, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - ; - - __atomic_store_n(&_M_p, __p, int(__m)); - } - - inline __attribute__((__always_inline__)) __pointer_type - load(memory_order __m = memory_order_seq_cst) const noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - - return __atomic_load_n(&_M_p, int(__m)); - } - - inline __attribute__((__always_inline__)) __pointer_type - load(memory_order __m = memory_order_seq_cst) const volatile noexcept - { - memory_order __b = __m & __memory_order_mask; - ; - ; - - return __atomic_load_n(&_M_p, int(__m)); - } - - inline __attribute__((__always_inline__)) __pointer_type - exchange(__pointer_type __p, - memory_order __m = memory_order_seq_cst) noexcept - { - return __atomic_exchange_n(&_M_p, __p, int(__m)); - } - - - inline __attribute__((__always_inline__)) __pointer_type - exchange(__pointer_type __p, - memory_order __m = memory_order_seq_cst) volatile noexcept - { - return __atomic_exchange_n(&_M_p, __p, int(__m)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, - memory_order __m1, - memory_order __m2) noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) bool - compare_exchange_strong(__pointer_type& __p1, __pointer_type __p2, - memory_order __m1, - memory_order __m2) volatile noexcept - { - memory_order __b2 = __m2 & __memory_order_mask; - memory_order __b1 = __m1 & __memory_order_mask; - - ; - ; - ; - - return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, - int(__m1), int(__m2)); - } - - inline __attribute__((__always_inline__)) __pointer_type - fetch_add(ptrdiff_t __d, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } - - inline __attribute__((__always_inline__)) __pointer_type - fetch_add(ptrdiff_t __d, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_add(&_M_p, _M_type_size(__d), int(__m)); } - - inline __attribute__((__always_inline__)) __pointer_type - fetch_sub(ptrdiff_t __d, - memory_order __m = memory_order_seq_cst) noexcept - { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } - - inline __attribute__((__always_inline__)) __pointer_type - fetch_sub(ptrdiff_t __d, - memory_order __m = memory_order_seq_cst) volatile noexcept - { return __atomic_fetch_sub(&_M_p, _M_type_size(__d), int(__m)); } - }; -# 1700 "/usr/include/c++/10/bits/atomic_base.h" 3 - -} -# 34 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 2 3 - -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 47 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - struct _Sp_locker - { - _Sp_locker(const _Sp_locker&) = delete; - _Sp_locker& operator=(const _Sp_locker&) = delete; - - - explicit - _Sp_locker(const void*) noexcept; - _Sp_locker(const void*, const void*) noexcept; - ~_Sp_locker(); - - private: - unsigned char _M_key1; - unsigned char _M_key2; - - - - }; -# 74 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - template - inline bool - atomic_is_lock_free(const __shared_ptr<_Tp, _Lp>* __p) - { - - return __gthread_active_p() == 0; - - - - } - - template - inline bool - atomic_is_lock_free(const shared_ptr<_Tp>* __p) - { return std::atomic_is_lock_free<_Tp, __default_lock_policy>(__p); } -# 101 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - template - inline shared_ptr<_Tp> - atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order) - { - _Sp_locker __lock{__p}; - return *__p; - } - - template - inline shared_ptr<_Tp> - atomic_load(const shared_ptr<_Tp>* __p) - { return std::atomic_load_explicit(__p, memory_order_seq_cst); } - - template - inline __shared_ptr<_Tp, _Lp> - atomic_load_explicit(const __shared_ptr<_Tp, _Lp>* __p, memory_order) - { - _Sp_locker __lock{__p}; - return *__p; - } - - template - inline __shared_ptr<_Tp, _Lp> - atomic_load(const __shared_ptr<_Tp, _Lp>* __p) - { return std::atomic_load_explicit(__p, memory_order_seq_cst); } -# 137 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - template - inline void - atomic_store_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, - memory_order) - { - _Sp_locker __lock{__p}; - __p->swap(__r); - } - - template - inline void - atomic_store(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) - { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } - - template - inline void - atomic_store_explicit(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp> __r, - memory_order) - { - _Sp_locker __lock{__p}; - __p->swap(__r); - } - - template - inline void - atomic_store(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) - { std::atomic_store_explicit(__p, std::move(__r), memory_order_seq_cst); } -# 174 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - template - inline shared_ptr<_Tp> - atomic_exchange_explicit(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r, - memory_order) - { - _Sp_locker __lock{__p}; - __p->swap(__r); - return __r; - } - - template - inline shared_ptr<_Tp> - atomic_exchange(shared_ptr<_Tp>* __p, shared_ptr<_Tp> __r) - { - return std::atomic_exchange_explicit(__p, std::move(__r), - memory_order_seq_cst); - } - - template - inline __shared_ptr<_Tp, _Lp> - atomic_exchange_explicit(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp> __r, - memory_order) - { - _Sp_locker __lock{__p}; - __p->swap(__r); - return __r; - } - - template - inline __shared_ptr<_Tp, _Lp> - atomic_exchange(__shared_ptr<_Tp, _Lp>* __p, __shared_ptr<_Tp, _Lp> __r) - { - return std::atomic_exchange_explicit(__p, std::move(__r), - memory_order_seq_cst); - } -# 223 "/usr/include/c++/10/bits/shared_ptr_atomic.h" 3 - template - bool - atomic_compare_exchange_strong_explicit(shared_ptr<_Tp>* __p, - shared_ptr<_Tp>* __v, - shared_ptr<_Tp> __w, - memory_order, - memory_order) - { - shared_ptr<_Tp> __x; - _Sp_locker __lock{__p, __v}; - owner_less> __less; - if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) - { - __x = std::move(*__p); - *__p = std::move(__w); - return true; - } - __x = std::move(*__v); - *__v = *__p; - return false; - } - - template - inline bool - atomic_compare_exchange_strong(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, - shared_ptr<_Tp> __w) - { - return std::atomic_compare_exchange_strong_explicit(__p, __v, - std::move(__w), memory_order_seq_cst, memory_order_seq_cst); - } - - template - inline bool - atomic_compare_exchange_weak_explicit(shared_ptr<_Tp>* __p, - shared_ptr<_Tp>* __v, - shared_ptr<_Tp> __w, - memory_order __success, - memory_order __failure) - { - return std::atomic_compare_exchange_strong_explicit(__p, __v, - std::move(__w), __success, __failure); - } - - template - inline bool - atomic_compare_exchange_weak(shared_ptr<_Tp>* __p, shared_ptr<_Tp>* __v, - shared_ptr<_Tp> __w) - { - return std::atomic_compare_exchange_weak_explicit(__p, __v, - std::move(__w), memory_order_seq_cst, memory_order_seq_cst); - } - - template - bool - atomic_compare_exchange_strong_explicit(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp>* __v, - __shared_ptr<_Tp, _Lp> __w, - memory_order, - memory_order) - { - __shared_ptr<_Tp, _Lp> __x; - _Sp_locker __lock{__p, __v}; - owner_less<__shared_ptr<_Tp, _Lp>> __less; - if (*__p == *__v && !__less(*__p, *__v) && !__less(*__v, *__p)) - { - __x = std::move(*__p); - *__p = std::move(__w); - return true; - } - __x = std::move(*__v); - *__v = *__p; - return false; - } - - template - inline bool - atomic_compare_exchange_strong(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp>* __v, - __shared_ptr<_Tp, _Lp> __w) - { - return std::atomic_compare_exchange_strong_explicit(__p, __v, - std::move(__w), memory_order_seq_cst, memory_order_seq_cst); - } - - template - inline bool - atomic_compare_exchange_weak_explicit(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp>* __v, - __shared_ptr<_Tp, _Lp> __w, - memory_order __success, - memory_order __failure) - { - return std::atomic_compare_exchange_strong_explicit(__p, __v, - std::move(__w), __success, __failure); - } - - template - inline bool - atomic_compare_exchange_weak(__shared_ptr<_Tp, _Lp>* __p, - __shared_ptr<_Tp, _Lp>* __v, - __shared_ptr<_Tp, _Lp> __w) - { - return std::atomic_compare_exchange_weak_explicit(__p, __v, - std::move(__w), memory_order_seq_cst, memory_order_seq_cst); - } - - - - - - -} -# 86 "/usr/include/c++/10/memory" 2 3 - -# 1 "/usr/include/c++/10/backward/auto_ptr.h" 1 3 -# 36 "/usr/include/c++/10/backward/auto_ptr.h" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 47 "/usr/include/c++/10/backward/auto_ptr.h" 3 - template - struct auto_ptr_ref - { - _Tp1* _M_ptr; - - explicit - auto_ptr_ref(_Tp1* __p): _M_ptr(__p) { } - } __attribute__ ((__deprecated__)); - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# 88 "/usr/include/c++/10/backward/auto_ptr.h" 3 - template - class auto_ptr - { - private: - _Tp* _M_ptr; - - public: - - typedef _Tp element_type; - - - - - - - - explicit - auto_ptr(element_type* __p = 0) throw() : _M_ptr(__p) { } -# 114 "/usr/include/c++/10/backward/auto_ptr.h" 3 - auto_ptr(auto_ptr& __a) throw() : _M_ptr(__a.release()) { } -# 126 "/usr/include/c++/10/backward/auto_ptr.h" 3 - template - auto_ptr(auto_ptr<_Tp1>& __a) throw() : _M_ptr(__a.release()) { } -# 137 "/usr/include/c++/10/backward/auto_ptr.h" 3 - auto_ptr& - operator=(auto_ptr& __a) throw() - { - reset(__a.release()); - return *this; - } -# 154 "/usr/include/c++/10/backward/auto_ptr.h" 3 - template - auto_ptr& - operator=(auto_ptr<_Tp1>& __a) throw() - { - reset(__a.release()); - return *this; - } -# 172 "/usr/include/c++/10/backward/auto_ptr.h" 3 - ~auto_ptr() { delete _M_ptr; } -# 182 "/usr/include/c++/10/backward/auto_ptr.h" 3 - element_type& - operator*() const throw() - { - ; - return *_M_ptr; - } - - - - - - - - element_type* - operator->() const throw() - { - ; - return _M_ptr; - } -# 212 "/usr/include/c++/10/backward/auto_ptr.h" 3 - element_type* - get() const throw() { return _M_ptr; } -# 226 "/usr/include/c++/10/backward/auto_ptr.h" 3 - element_type* - release() throw() - { - element_type* __tmp = _M_ptr; - _M_ptr = 0; - return __tmp; - } -# 241 "/usr/include/c++/10/backward/auto_ptr.h" 3 - void - reset(element_type* __p = 0) throw() - { - if (__p != _M_ptr) - { - delete _M_ptr; - _M_ptr = __p; - } - } -# 266 "/usr/include/c++/10/backward/auto_ptr.h" 3 - auto_ptr(auto_ptr_ref __ref) throw() - : _M_ptr(__ref._M_ptr) { } - - auto_ptr& - operator=(auto_ptr_ref __ref) throw() - { - if (__ref._M_ptr != this->get()) - { - delete _M_ptr; - _M_ptr = __ref._M_ptr; - } - return *this; - } - - template - operator auto_ptr_ref<_Tp1>() throw() - { return auto_ptr_ref<_Tp1>(this->release()); } - - template - operator auto_ptr<_Tp1>() throw() - { return auto_ptr<_Tp1>(this->release()); } - } __attribute__ ((__deprecated__)); - - - - template<> - class auto_ptr - { - public: - typedef void element_type; - } __attribute__ ((__deprecated__)); - - - template<_Lock_policy _Lp> - template - inline - __shared_count<_Lp>::__shared_count(std::auto_ptr<_Tp>&& __r) - : _M_pi(new _Sp_counted_ptr<_Tp*, _Lp>(__r.get())) - { __r.release(); } - - template - template - inline - __shared_ptr<_Tp, _Lp>::__shared_ptr(std::auto_ptr<_Tp1>&& __r) - : _M_ptr(__r.get()), _M_refcount() - { - - static_assert( sizeof(_Tp1) > 0, "incomplete type" ); - _Tp1* __tmp = __r.get(); - _M_refcount = __shared_count<_Lp>(std::move(__r)); - _M_enable_shared_from_this_with(__tmp); - } - - template - template - inline - shared_ptr<_Tp>::shared_ptr(std::auto_ptr<_Tp1>&& __r) - : __shared_ptr<_Tp>(std::move(__r)) { } - - template - template - inline - unique_ptr<_Tp, _Dp>::unique_ptr(auto_ptr<_Up>&& __u) noexcept - : _M_t(__u.release(), deleter_type()) { } - - -#pragma GCC diagnostic pop - - -} -# 88 "/usr/include/c++/10/memory" 2 3 -# 100 "/usr/include/c++/10/memory" 3 -namespace std __attribute__ ((__visibility__ ("default"))) -{ - -# 122 "/usr/include/c++/10/memory" 3 -inline void* -align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept -{ - - const auto __intptr = reinterpret_cast(__ptr); - - - - - - - const auto __aligned = (__intptr - 1u + __align) & -__align; - const auto __diff = __aligned - __intptr; - if ((__size + __diff) > __space) - return nullptr; - else - { - __space -= __diff; - return __ptr = reinterpret_cast(__aligned); - } -} -# 158 "/usr/include/c++/10/memory" 3 -enum class pointer_safety { relaxed, preferred, strict }; - - -inline void -declare_reachable(void*) { } - - -template - inline _Tp* - undeclare_reachable(_Tp* __p) { return __p; } - - -inline void -declare_no_pointers(char*, size_t) { } - - -inline void -undeclare_no_pointers(char*, size_t) { } - - -inline pointer_safety -get_pointer_safety() noexcept { return pointer_safety::relaxed; } -# 411 "/usr/include/c++/10/memory" 3 - -} -# 13 "lib/Ray/sources/Model/ModelAnimation.hpp" 2 - - -# 14 "lib/Ray/sources/Model/ModelAnimation.hpp" -namespace RAY { - - class ModelAnimation { - public: - - - ModelAnimation(::ModelAnimation &animationPtr); - - - ModelAnimation(const ModelAnimation &) = default; - - - ModelAnimation &operator=(const ModelAnimation &) = default; - - - size_t getFrameCounter() const; - - - size_t getFrameCount() const; - - - ModelAnimation &setFrameCounter(size_t frameCounter); - - - ModelAnimation &incrementFrameCounter(); - - - ~ModelAnimation() = default; - - private: - ::ModelAnimation &_animation; - - size_t _frameCounter; - INTERNAL: - - operator ::ModelAnimation *(); - - - operator ::ModelAnimation() const; - }; -} -# 15 "lib/Ray/sources/Model/Model.hpp" 2 - - - -namespace RAY { - - class Model: public IRessource { - public: - - typedef ::MaterialMapIndex MaterialType; - - - - Model(const std::string &filePath); - - - - Model(const Mesh &mesh); - - - Model(const Model &model) = default; - - - Model& operator=(const Model &model) = default; - - - ~Model(); - - - bool load(const std::string &filePath); - - - bool load(const Mesh &mesh); - - - bool unload() override; - - - bool unloadKeepMeshes(); - - - bool setAnimation(const RAY::ModelAnimation &animation); - - - - - bool setTextureToMaterial(MaterialType materialType, const RAY::Texture &texture); - - - int getBoneCount() const; - private: - - ::Model _model; - - INTERNAL: - - operator ::Model() const; - - }; -}; -# 21 "lib/Ray/sources/Window.hpp" 2 - -namespace RAY { - class Model; - - namespace Drawables { - class ADrawable3D; - } - class Window { - public: - - static Window &getInstance(int width, int height, const std::string &title, unsigned flags = 0, bool openNow = true); - - - Window(const Window &window) = delete; - - - Window &operator=(const Window &window) = delete; - - - ~Window() = default; - - - bool open(void); - - - bool shouldClose(void) const; - - - void close(void); - - - bool isFocused(void) const; - - - const RAY::Vector2 &getDimensions(void) const; - - - - void setVisibleCursor(bool visible); - - - - void enableCursor(bool enable); - - - bool cursorIsVisible(void) const; - - - void setIcon(Image &img); - - - Vector2 getCursorPosition() const; - - - void setFPS(unsigned int fps); - - - - void clear(const Color &color = Color{ 0, 0, 0, 255 }); - - - enum drawingState { - - IDLE, - - DRAWING, - }; - - - enum displayState { - - TWO_DIMENSIONNAL, - - THREE_DIMENSIONNAL, - - NONE, - }; - - - void setDrawingState(enum drawingState); - - - void useCamera(Camera::Camera2D &camera); - - - void useCamera(Camera::Camera3D &camera); - - - void unuseCamera(void); - - - void setTitle(const std::string &title); - - - - - void draw(RAY::Drawables::ADrawable2D &drawable); - - - - void draw(RAY::Drawables::ADrawable3D &drawable); - - - - - - void draw(const Texture &texture, const Vector2 &position, const Color &tint); - - - void draw(const Mesh &mesh, const Material &material, const Matrix &transform); - - - void draw(const Model &model, const Vector3 &position, const Vector3 &rotationAxis = Vector3(0, 0, 0), - float rotationAngle = 0, const Vector3 &scale = Vector3(1, 1, 1), const Color &tint = Color{ 255, 255, 255, 255 }); - - - private: - - Window(int width, int height, std::string title, unsigned flags = 0, bool openNow = true); - - - RAY::Vector2 _dimensions; - - - std::string _title; - - - bool _isOpen; - - - unsigned int _flags; - - - enum drawingState _drawingState; - - - enum displayState _displayState; - }; -} -# 9 "lib/Ray/sources/Window.cpp" 2 - -# 1 "lib/Ray/sources/Controllers/Mouse.hpp" 1 -# 15 "lib/Ray/sources/Controllers/Mouse.hpp" -namespace RAY::Controller { - - class Mouse { - public: - typedef ::MouseButton Button; - - - - static bool isPressed(Button); - - - - static bool isDown(Button); - - - - static bool isReleased(Button); - - - - static bool isUp(Button); - - - static RAY::Vector2 getCursorPosition(void); - }; -} -# 11 "lib/Ray/sources/Window.cpp" 2 -# 1 "lib/Ray/sources/Drawables/ADrawable2D.hpp" 1 -# 14 "lib/Ray/sources/Drawables/ADrawable2D.hpp" -# 1 "lib/Ray/sources/Color.hpp" 1 -# 15 "lib/Ray/sources/Drawables/ADrawable2D.hpp" 2 - -namespace RAY::Drawables::Drawables2D { - - class ADrawable2D: public IDrawable - { - public: - - - - ADrawable2D(const Vector2 &position, const RAY::Color &color); - - - - - ADrawable2D(int x, int y, const RAY::Color &color); - - - ADrawable2D(const ADrawable2D &) = default; - - - ~ADrawable2D() override = default; - - - const RAY::Vector2 &getPosition(void) const; - - - const RAY::Color &getColor(void) const; - - - ADrawable2D &setPosition(const Vector2 &position); - - - ADrawable2D &setPosition(int x, int y); - - - ADrawable2D &setColor(const Color &color); - - - void drawOn(RAY::Window &) override = 0; - - - virtual void drawOn(RAY::Image &image) = 0; - - protected: - - Vector2 _position; - - Color _color; - - }; -}; -# 12 "lib/Ray/sources/Window.cpp" 2 -# 1 "lib/Ray/sources/Drawables/ADrawable3D.hpp" 1 -# 15 "lib/Ray/sources/Drawables/ADrawable3D.hpp" -namespace RAY::Drawables::Drawables3D { - - class ADrawable3D: public IDrawable - { - public: - - - ADrawable3D(const RAY::Vector3 &position, const RAY::Color &color); - - - ADrawable3D(const ADrawable3D &) = default; - - - ~ADrawable3D() override = default; - - - void drawOn(RAY::Window &) override = 0; - - - const RAY::Color &getColor(void) const; - - - ADrawable3D &setColor(const RAY::Color &color); - - - virtual const RAY::Vector3 &getPosition(void) const; - - - virtual ADrawable3D &setPosition(const Vector3 &position); - - protected: - - Vector3 _position; - - - Color _color; - - }; -}; -# 13 "lib/Ray/sources/Window.cpp" 2 - -RAY::Window &RAY::Window::getInstance(int width, int height, const std::string &title, unsigned flags, bool openNow) -{ - static RAY::Window window(width, height, title, flags, openNow); - - return window; -} - -RAY::Window::Window(int width, int height, std::string title, unsigned flags, bool openNow): - _dimensions(width, height), - _title(std::move(title)), - _isOpen(openNow), - _flags(flags), - _drawingState(IDLE), _displayState(NONE) -{ - if (openNow) - this->open(); -} - -bool RAY::Window::open(void) -{ - if (this->_flags) { - SetConfigFlags(this->_flags); - } - InitWindow(this->_dimensions.x, this->_dimensions.y, this->_title.c_str()); - this->_isOpen = true; - return true; -} - -bool RAY::Window::shouldClose(void) const -{ - return WindowShouldClose(); -} - -void RAY::Window::close(void) -{ - CloseWindow(); -} - -bool RAY::Window::isFocused(void) const -{ - return IsWindowFocused(); -} - -const RAY::Vector2 &RAY::Window::getDimensions(void) const -{ - return this->_dimensions; -} - -void RAY::Window::setVisibleCursor(bool visible) -{ - if (visible) - ShowCursor(); - else - HideCursor(); -} - -void RAY::Window::enableCursor(bool enable) -{ - if (enable) - EnableCursor(); - else - DisableCursor(); -} - -bool RAY::Window::cursorIsVisible(void) const -{ - return !IsCursorHidden(); -} - -RAY::Vector2 RAY::Window::getCursorPosition(void) const -{ - return RAY::Controller::Mouse::getCursorPosition(); -} - -void RAY::Window::setFPS(unsigned int fps) -{ - SetTargetFPS(fps); -} - -void RAY::Window::clear(const RAY::Color &color) -{ - ClearBackground(color); -} - -void RAY::Window::setDrawingState(enum RAY::Window::drawingState state) -{ - if (state == this->_drawingState) - return; - switch (state) - { - case DRAWING: - BeginDrawing(); - break; - case IDLE: - EndDrawing(); - break; - } - this->_drawingState = state; -} - -void RAY::Window::useCamera(RAY::Camera::Camera2D &camera) -{ - this->unuseCamera(); - this->_displayState = RAY::Window::TWO_DIMENSIONNAL; - BeginMode2D(camera); -} - -void RAY::Window::useCamera(RAY::Camera::Camera3D &camera) -{ - this->unuseCamera(); - this->_displayState = RAY::Window::THREE_DIMENSIONNAL; - BeginMode3D(camera); -} - -void RAY::Window::unuseCamera(void) -{ - switch (this->_displayState) - { - case THREE_DIMENSIONNAL: - EndMode3D(); - break; - case TWO_DIMENSIONNAL: - EndMode2D(); - break; - default: - break; - } - this->_displayState = NONE; -} - -void RAY::Window::setTitle(const std::string &title) -{ - this->_title = title; -} - -void RAY::Window::draw(RAY::Drawables::ADrawable2D &drawable) -{ - drawable.drawOn(*this); -} - -void RAY::Window::draw(RAY::Drawables::ADrawable3D &drawable) -{ - drawable.drawOn(*this); -} - -void RAY::Window::draw(const RAY::Texture &texture, const Vector2 &position, const Color &tint) -{ - DrawTexture(texture, position.x, position.y, tint); -} - -void RAY::Window::draw(const Mesh &mesh, const Material &material, const Matrix &transform) -{ - DrawMesh(mesh, material, transform); -} - -void RAY::Window::draw(const RAY::Model &model, const RAY::Vector3 &position, const RAY::Vector3 &rotationAxis, float rotationAngle, const RAY::Vector3 &scale, const RAY::Color &tint) -{ - DrawModelEx(model, position, rotationAxis, rotationAngle, scale, tint); -} - -void RAY::Window::setIcon(RAY::Image &img) -{ - SetWindowIcon(img); -}