diff --git a/docs/images/carbon_snippet.svg b/docs/images/carbon_snippet.svg
index 9631bfb4b07c..80c089c7682b 100644
--- a/docs/images/carbon_snippet.svg
+++ b/docs/images/carbon_snippet.svg
@@ -1 +1 @@
-
+
diff --git a/docs/images/cpp_snippet.svg b/docs/images/cpp_snippet.svg
index 37f30f695d74..26226fc2f560 100644
--- a/docs/images/cpp_snippet.svg
+++ b/docs/images/cpp_snippet.svg
@@ -1 +1 @@
-
+
diff --git a/docs/images/mixed_snippet.svg b/docs/images/mixed_snippet.svg
index 3acacbbc8481..45800c22b0df 100644
--- a/docs/images/mixed_snippet.svg
+++ b/docs/images/mixed_snippet.svg
@@ -1 +1 @@
-
+
diff --git a/docs/images/quicksort_snippet.svg b/docs/images/quicksort_snippet.svg
index 39c933f119e2..3f7806be983c 100644
--- a/docs/images/quicksort_snippet.svg
+++ b/docs/images/quicksort_snippet.svg
@@ -1 +1 @@
-
+
diff --git a/docs/images/snippets.md b/docs/images/snippets.md
index 8e9f8a73d383..513616d54da5 100644
--- a/docs/images/snippets.md
+++ b/docs/images/snippets.md
@@ -6,6 +6,11 @@ Exceptions. See /LICENSE for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-->
+## Images
+
+Images are managed in
+[Google Drive](https://drive.google.com/corp/drive/folders/1CsbHo3vamrxmBwHkoyz1kU0sGFqAh688).
+
## Quicksort
A sample of quicksort in Carbon.
@@ -13,20 +18,20 @@ A sample of quicksort in Carbon.
```cpp
package Sorting api;
-fn Partition[T:! Comparable & Movable](s: Span(T))
+fn Partition[T:! Comparable & Movable](s: Slice(T))
-> i64 {
var i: i64 = -1;
- for (element: T in s) {
- if (element <= s.Last()) {
+ for (e: T in s) {
+ if (e <= s.Last()) {
++i;
- Swap(&s[i], &element);
+ Swap(&s[i], &e);
}
}
return i;
}
-fn QuickSort[T:! Comparable & Movable](s: Span(T)) {
+fn QuickSort[T:! Comparable & Movable](s: Slice(T)) {
if (s.Size() <= 1) {
return;
}
@@ -41,21 +46,28 @@ fn QuickSort[T:! Comparable & Movable](s: Span(T)) {
### C++
```cpp
-// C++
+// C++:
+#include
#include
+#include
#include
-void WriteWithTotal(const std::vector& v) {
- uint64_t sum = 0;
- for (uint64_t e : v) {
- sum += e;
- std::cout << e << "\n";
+struct Circle {
+ float r;
+};
+
+void WriteTotalArea(std::span circles) {
+ float area = 0;
+ for (const Circle& c : circles) {
+ area += M_PI * c.r * c.r;
}
- std::cout << "Total: " << sum << "\n";
+ std::cout << "Total area: " << area << "\n";
}
auto main(int argc, char** argv) -> int {
- WriteWithTotal({1, 2, 3});
+ std::vector circles = {{1.0}, {2.0}};
+ // Implicitly constructors `span` from `vector`.
+ WriteTotalArea(circles);
return 0;
}
```
@@ -63,20 +75,27 @@ auto main(int argc, char** argv) -> int {
### Carbon
```cpp
-// Carbon
-package Summing api;
+// Carbon:
+package Geometry api;
+import Math;
-fn WriteWithTotal(v: Vector(u64)) {
- var sum: u64 = 0;
- for (e: u64 in v) {
- sum += e;
- Console.WriteLine(e);
- }
- Console.WriteLine(f"Total: {0}", sum);
+class Circle {
+ var r: f32;
}
-fn Main() -> i64 {
- WriteWithTotal((1, 2, 3));
+fn WriteTotalArea(circles: Slice(Circle)) {
+ var area: f32 = 0;
+ for (c: Circle in circles) {
+ area += Math.Pi * c.r * c.r;
+ }
+ Console.WriteLine("Total area: {0}", area);
+}
+
+fn Main() -> i32 {
+ // A dynamically sized array, like `std::vector`.
+ var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
+ // Implicitly constructs `Slice` from `Array`.
+ WriteTotalArea(circles);
return 0;
}
```
@@ -84,24 +103,34 @@ fn Main() -> i64 {
### Mixed
```cpp
-// Carbon using C++'s vector
-package Summing api;
-import Cpp library "";
+// C++ code used in both Carbon and C++:
+struct Circle {
+ float r;
+};
-fn WriteWithTotal(v: Cpp.std.vector(u64)) {
- var sum: u64 = 0;
- for (e: u64 in v) {
- sum += e;
- Console.WriteLine(e);
+// Carbon exposing a function for C++:
+package Geometry api;
+import Cpp library "circle.h";
+import Math;
+
+fn WriteTotalArea(circles: Slice(Cpp.Circle)) {
+ var area: f32 = 0;
+ for (c: Cpp.Circle in circles) {
+ area += Math.Pi * c.r * c.r;
}
- Console.WriteLine("Total: {0}", sum);
+ Console.WriteLine("Total area: {0}", area);
}
-// C++ calling Carbon
-#include "summing.carbon.h"
+// C++ calling Carbon:
+#include
+#include "circle.h"
+#include "geometry.carbon.h"
auto main(int argc, char** argv) -> int {
- Summing::WriteWithTotal({1, 2, 3});
+ std::vector circles = {{1.0}, {2.0}};
+ // Carbon's `Slice` supports implicit construction from `std::vector`,
+ // similar to `std::span`.
+ Geometry::WriteTotalArea(circles);
return 0;
}
```