1*3f982cf4SFabien Sanglard# Abseil - C++ Common Libraries 2*3f982cf4SFabien Sanglard 3*3f982cf4SFabien SanglardThe repository contains the Abseil C++ library code. Abseil is an open-source 4*3f982cf4SFabien Sanglardcollection of C++ code (compliant to C++11) designed to augment the C++ 5*3f982cf4SFabien Sanglardstandard library. 6*3f982cf4SFabien Sanglard 7*3f982cf4SFabien Sanglard## Table of Contents 8*3f982cf4SFabien Sanglard 9*3f982cf4SFabien Sanglard- [About Abseil](#about) 10*3f982cf4SFabien Sanglard- [Quickstart](#quickstart) 11*3f982cf4SFabien Sanglard- [Building Abseil](#build) 12*3f982cf4SFabien Sanglard- [Codemap](#codemap) 13*3f982cf4SFabien Sanglard- [License](#license) 14*3f982cf4SFabien Sanglard- [Links](#links) 15*3f982cf4SFabien Sanglard 16*3f982cf4SFabien Sanglard<a name="about"></a> 17*3f982cf4SFabien Sanglard## About Abseil 18*3f982cf4SFabien Sanglard 19*3f982cf4SFabien SanglardAbseil is an open-source collection of C++ library code designed to augment 20*3f982cf4SFabien Sanglardthe C++ standard library. The Abseil library code is collected from Google's 21*3f982cf4SFabien Sanglardown C++ code base, has been extensively tested and used in production, and 22*3f982cf4SFabien Sanglardis the same code we depend on in our daily coding lives. 23*3f982cf4SFabien Sanglard 24*3f982cf4SFabien SanglardIn some cases, Abseil provides pieces missing from the C++ standard; in 25*3f982cf4SFabien Sanglardothers, Abseil provides alternatives to the standard for special needs 26*3f982cf4SFabien Sanglardwe've found through usage in the Google code base. We denote those cases 27*3f982cf4SFabien Sanglardclearly within the library code we provide you. 28*3f982cf4SFabien Sanglard 29*3f982cf4SFabien SanglardAbseil is not meant to be a competitor to the standard library; we've 30*3f982cf4SFabien Sanglardjust found that many of these utilities serve a purpose within our code 31*3f982cf4SFabien Sanglardbase, and we now want to provide those resources to the C++ community as 32*3f982cf4SFabien Sanglarda whole. 33*3f982cf4SFabien Sanglard 34*3f982cf4SFabien Sanglard<a name="quickstart"></a> 35*3f982cf4SFabien Sanglard## Quickstart 36*3f982cf4SFabien Sanglard 37*3f982cf4SFabien SanglardIf you want to just get started, make sure you at least run through the 38*3f982cf4SFabien Sanglard[Abseil Quickstart](https://abseil.io/docs/cpp/quickstart). The Quickstart 39*3f982cf4SFabien Sanglardcontains information about setting up your development environment, downloading 40*3f982cf4SFabien Sanglardthe Abseil code, running tests, and getting a simple binary working. 41*3f982cf4SFabien Sanglard 42*3f982cf4SFabien Sanglard<a name="build"></a> 43*3f982cf4SFabien Sanglard## Building Abseil 44*3f982cf4SFabien Sanglard 45*3f982cf4SFabien Sanglard[Bazel](https://bazel.build) is the official build system for Abseil, 46*3f982cf4SFabien Sanglardwhich is supported on most major platforms (Linux, Windows, macOS, for example) 47*3f982cf4SFabien Sanglardand compilers. See the [quickstart](https://abseil.io/docs/cpp/quickstart) for 48*3f982cf4SFabien Sanglardmore information on building Abseil using the Bazel build system. 49*3f982cf4SFabien Sanglard 50*3f982cf4SFabien Sanglard<a name="cmake"></a> 51*3f982cf4SFabien SanglardIf you require CMake support, please check the 52*3f982cf4SFabien Sanglard[CMake build instructions](CMake/README.md). 53*3f982cf4SFabien Sanglard 54*3f982cf4SFabien Sanglard## Codemap 55*3f982cf4SFabien Sanglard 56*3f982cf4SFabien SanglardAbseil contains the following C++ library components: 57*3f982cf4SFabien Sanglard 58*3f982cf4SFabien Sanglard* [`base`](absl/base/) Abseil Fundamentals 59*3f982cf4SFabien Sanglard <br /> The `base` library contains initialization code and other code which 60*3f982cf4SFabien Sanglard all other Abseil code depends on. Code within `base` may not depend on any 61*3f982cf4SFabien Sanglard other code (other than the C++ standard library). 62*3f982cf4SFabien Sanglard* [`algorithm`](absl/algorithm/) 63*3f982cf4SFabien Sanglard <br /> The `algorithm` library contains additions to the C++ `<algorithm>` 64*3f982cf4SFabien Sanglard library and container-based versions of such algorithms. 65*3f982cf4SFabien Sanglard* [`container`](absl/container/) 66*3f982cf4SFabien Sanglard <br /> The `container` library contains additional STL-style containers, 67*3f982cf4SFabien Sanglard including Abseil's unordered "Swiss table" containers. 68*3f982cf4SFabien Sanglard* [`debugging`](absl/debugging/) 69*3f982cf4SFabien Sanglard <br /> The `debugging` library contains code useful for enabling leak 70*3f982cf4SFabien Sanglard checks, and stacktrace and symbolization utilities. 71*3f982cf4SFabien Sanglard* [`hash`](absl/hash/) 72*3f982cf4SFabien Sanglard <br /> The `hash` library contains the hashing framework and default hash 73*3f982cf4SFabien Sanglard functor implementations for hashable types in Abseil. 74*3f982cf4SFabien Sanglard* [`memory`](absl/memory/) 75*3f982cf4SFabien Sanglard <br /> The `memory` library contains C++11-compatible versions of 76*3f982cf4SFabien Sanglard `std::make_unique()` and related memory management facilities. 77*3f982cf4SFabien Sanglard* [`meta`](absl/meta/) 78*3f982cf4SFabien Sanglard <br /> The `meta` library contains C++11-compatible versions of type checks 79*3f982cf4SFabien Sanglard available within C++14 and C++17 versions of the C++ `<type_traits>` library. 80*3f982cf4SFabien Sanglard* [`numeric`](absl/numeric/) 81*3f982cf4SFabien Sanglard <br /> The `numeric` library contains C++11-compatible 128-bit integers. 82*3f982cf4SFabien Sanglard* [`strings`](absl/strings/) 83*3f982cf4SFabien Sanglard <br /> The `strings` library contains a variety of strings routines and 84*3f982cf4SFabien Sanglard utilities, including a C++11-compatible version of the C++17 85*3f982cf4SFabien Sanglard `std::string_view` type. 86*3f982cf4SFabien Sanglard* [`synchronization`](absl/synchronization/) 87*3f982cf4SFabien Sanglard <br /> The `synchronization` library contains concurrency primitives (Abseil's 88*3f982cf4SFabien Sanglard `absl::Mutex` class, an alternative to `std::mutex`) and a variety of 89*3f982cf4SFabien Sanglard synchronization abstractions. 90*3f982cf4SFabien Sanglard* [`time`](absl/time/) 91*3f982cf4SFabien Sanglard <br /> The `time` library contains abstractions for computing with absolute 92*3f982cf4SFabien Sanglard points in time, durations of time, and formatting and parsing time within 93*3f982cf4SFabien Sanglard time zones. 94*3f982cf4SFabien Sanglard* [`types`](absl/types/) 95*3f982cf4SFabien Sanglard <br /> The `types` library contains non-container utility types, like a 96*3f982cf4SFabien Sanglard C++11-compatible version of the C++17 `std::optional` type. 97*3f982cf4SFabien Sanglard* [`utility`](absl/utility/) 98*3f982cf4SFabien Sanglard <br /> The `utility` library contains utility and helper code. 99*3f982cf4SFabien Sanglard 100*3f982cf4SFabien Sanglard## License 101*3f982cf4SFabien Sanglard 102*3f982cf4SFabien SanglardThe Abseil C++ library is licensed under the terms of the Apache 103*3f982cf4SFabien Sanglardlicense. See [LICENSE](LICENSE) for more information. 104*3f982cf4SFabien Sanglard 105*3f982cf4SFabien Sanglard## Links 106*3f982cf4SFabien Sanglard 107*3f982cf4SFabien SanglardFor more information about Abseil: 108*3f982cf4SFabien Sanglard 109*3f982cf4SFabien Sanglard* Consult our [Abseil Introduction](https://abseil.io/about/intro) 110*3f982cf4SFabien Sanglard* Read [Why Adopt Abseil](https://abseil.io/about/philosophy) to understand our 111*3f982cf4SFabien Sanglard design philosophy. 112*3f982cf4SFabien Sanglard* Peruse our 113*3f982cf4SFabien Sanglard [Abseil Compatibility Guarantees](https://abseil.io/about/compatibility) to 114*3f982cf4SFabien Sanglard understand both what we promise to you, and what we expect of you in return. 115