This is an automated email from the ASF dual-hosted git repository.

bbender pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6c1cf0c  Updates README.md, CONTRIBUTING.md and BUILDING.md (#755)
6c1cf0c is described below

commit 6c1cf0c9c5de4bad6733d2e0e9fa850a56d33393
Author: Jacob Barrett <[email protected]>
AuthorDate: Tue Mar 2 10:41:18 2021 -0800

    Updates README.md, CONTRIBUTING.md and BUILDING.md (#755)
    
    * Updates README.md with established versioning rules.
    * Updates CONTRIBUTING.md and BUILDING.md.
    * Updates OS versions
    * updates tooling
    * Moves contributing details from BUILDING.md to CONTRIBUTING.md
---
 BUILDING.md     | 113 ++++-------------
 CONTRIBUTING.md | 376 ++++++++++++++++++++++++++++++++++----------------------
 README.md       |  52 +++++---
 3 files changed, 294 insertions(+), 247 deletions(-)

diff --git a/BUILDING.md b/BUILDING.md
index 63aabd3..6536b41 100644
--- a/BUILDING.md
+++ b/BUILDING.md
@@ -2,7 +2,7 @@
 
 ## Prerequisites (All Platforms)
 
-* [CMake 3.12](https://cmake.org/) or newer
+* [CMake 3.18](https://cmake.org/) or newer
 * C++11 compiler *(see platform specific requirements)*
 * [Doxygen 1.8.11 or greater](https://sourceforge.net/projects/doxygen/) *(for 
building source documentation)*
 * [OpenSSL](https://www.openssl.org) *(for building source documentation)*
@@ -72,7 +72,7 @@ Install XCode from the App Store
 Install the required dependencies through homebrew. If you use another package 
manager for your mac feel free to use
 that.
 
-```bash
+```console
 $ brew install geode
 $ brew install openssl
 $ brew install doxygen
@@ -82,7 +82,7 @@ $ brew install cmake
 You will need to provide the path to the brew installed OpenSSL headers since 
macOS already has a system installed
 version but without the required headers.
 
-```bash
+```console
 $ cmake .. -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl
 ```
 
@@ -130,73 +130,6 @@ IPv6 support can be enabled by adding `-DWITH_IPV6=ON` to 
the CMake [Generator](
 $ cmake … -DWITH_IPV6=ON …
 ```
 
-#### Code Coverage
-
-If building with GCC or Clang you can enable C++ code coverage by adding 
`-DUSE_CPP_COVERAGE=ON` to the
-CMake [Generator](#generator) command.
-
-```console
-$ cmake … -DUSE_CPP_COVERAGE=ON …
-```
-
-You can then generate a C++ code coverage report by downloading 
[lcov](http://ltp.sourceforge.net/coverage/lcov.php).
-After acquiring lcov, finish the [Steps to build](#Steps-to-build) section 
above. Then, run the tests as described in
-the [CONTRIBUTING.md](CONTRIBUTING.md). Finally, run the following commands 
from the `build` directory:
-
-```console
-$ lcov --capture --directory . --output-file coverage.info
-$ genhtml coverage.info --output-directory coverage_report
-```
-
-You can then open the `index.html` file in the `coverage_report` directory 
using any browser.
-
-#### Clang-Tidy
-
-To enable `clang-tidy`:
-
-```console
-$ cmake … -DCMAKE_CXX_CLANG_TIDY=clang-tidy …
-```
-
-To use specific `clang-tidy`:
-
-```console
-$ cmake … -DCMAKE_CXX_CLANG_TIDY=/path/to/clang-tidy …
-```
-
-By default `clang-tidy` uses the configuration found in `.clang-tidy`
-To override `clang-tidy` options:
-
-```console
-$ cmake … -DCMAKE_CXX_CLANG_TIDY=clang-tidy;<options> …
-```
-
-#### Clang-format
-
-Individual targets in the build tree have their own dependency of the form 
`<<targetName>>-clangformat`, which uses
-the `clang-format` executable, wherever it is found, to format and modified 
files according to the rules specfied in the
-.clang-format file. This is helpful when submitting changes to geode-native, 
because an improperly formatted file will
-fail Travis-CI and have to be fixed prior to merging any pull request. If 
clang-format is not installed on your system,
-clangformat targets will not be added to your project files, and geode-native 
should build normally. Under some
-circumstances, however, it may become necessary to disable `clang-format` on a 
system where it _is_ installed.
-
-To disable `clang-format` in the build:
-
-```
-$ cmake … -DClangFormat_EXECUTABLE='' …
-```
-
-On the other hand, it may also be desirable to run clang-format on the entire 
source tree. This is also easily done via
-the `all-clangformat` _in a build with clang-format enabled_. If clang-format 
has been disabled in the cmake
-configuration step, as above, the `all-clangformat` target will not exist, and 
the cmake configuration step will have to
-be re-run with clang-format enabled.
-
-To run clang-format on the entire source tree:
-
-```
-$ cmake --build . --target all-clangformat
-```
-
 ## Installing
 
 By default a system-specific location is used by CMake as the destination of 
the `install` target, e.g., `/usr/local` on
@@ -218,27 +151,27 @@ $ cmake --build . --target install
 
 # Platform-Specific Prerequisites
 
-## <a id="windows"></a>Windows
+## Windows
 
-* Windows 8.1 64-bit
 * Windows 10 64-bit
-* Windows Server 2012 R2 64-bit
 * Windows Server 2016 64-bit
-* NUnit 2.6.4 (to run clicache tests)
+* Windows Server 2019 64-bit
 
 ### Required Tools
 
-* [Visual Studio 2015](https://www.visualstudio.com) or newer
-* .NET 4.5.2 or later
-* Chocolatey
-* [Other dependencies installed via 
Powershell](packer/windows/install-dependencies.ps1)
+* [Visual Studio](https://www.visualstudio.com) 2017 or newer
+* [.NET](https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet-framework) 
4.5.2 or later
+* Other dependencies installed by 
[Packer](packer/build-windows-2016-vs-2017.json) scripts
 
-## <a id="linux"></a>Linux
+## Linux
 
-* RHEL/CentOS 6
 * RHEL/CentOS 7
-* SLES 11
-* SLES 12
+* RHEL/CentOS 8
+* Ubuntu 2016.04 (Xenial)
+* Ubuntu 2018.04 (Bionic)
+* Ubuntu 2020.04 (Focal)
+
+Other distributions and versions may be supported given C++11 compatible 
compiler and runtime library.
 
 ### Required Tools
 
@@ -246,13 +179,15 @@ $ cmake --build . --target install
 
 ### Optional Tools
 
-* [Eclipse CDT 8.8](https://eclipse.org/cdt/) or newer
+* [CLion](https://www.jetbrains.com/clion/)
 
-## <a id="mac-os-x"></a>Mac OS X
+## macOS
 
-* Mac OS X 10.12 (Sierra) or newer
-* Xcode 8.2 or newer
+* macOS X 10.15 (Catalina) or newer
+* Xcode 11 or newer
 
+Older versions of macOS or Mac OS X and Xcode may work but are not regularly 
tested or developed on.
+  
 ### Required Tools
 
 * [Xcode](https://developer.apple.com/xcode/download/)
@@ -268,11 +203,13 @@ $ xcode-select --install
 * [Doxygen GUI](http://ftp.stack.nl/pub/users/dimitri/Doxygen-1.8.11.dmg)
 * [CLion](https://www.jetbrains.com/clion/)
 
-## <a id="solaris"></a>Solaris
-
+## Solaris
 * Solaris 11 SPARC
 * Solaris 11 x86
 
+Solaris is not actively developed or tested. While no effort has been made to 
remove Solaris support it is likely
+broken.
+
 ### Required Tools
 
 * [Solaris Studio 
12.6](http://www.oracle.com/technetwork/server-storage/developerstudio/downloads/index.html)
 or newer
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ac090d4..52bd8e9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,192 +6,278 @@ see [BUILDING.md](BUILDING.md)
 
 ## Next steps
 * Make your changes/add your feature/fix a bug.
-* Test your feature branch changes.
-* Check your formatting.
+* Conform to established [versioning requirements](README.md#versioning).
+* [Test](#testing) your feature branch changes.
+* Check your [formatting](#clang-format) and [style](#clang-tidy).
 * Submit a pull request.
 
 ## Testing
-Before submitting a pull request all tests must pass. This includes all unit 
tests, integration tests, and acceptance tests. We are using CTest for running 
tests (please see [the CTest 
documentation](https://cmake.org/Wiki/CMake/Testing_With_CTest) for further 
information) and [Google Test](https://github.com/google/googletest) as testing 
framework.
+Before submitting a pull request all tests must pass. This includes all unit 
tests, integration tests, and acceptance 
+tests. We are using CTest for running tests (please see [the CTest 
documentation](https://cmake.org/Wiki/CMake/Testing_With_CTest)
+for further information) and [Google 
Test](https://github.com/google/googletest) as testing framework.
 
 ### Running unit tests
-```bash
-$ cd <clone>
-$ cd build
-$ cd cppcache/test/<Debug|Release|if needed>
+```console
+$ cd build/cppcache/test/<Debug|Release|if needed>
 $ ./apache-geode_unittests
 ```
 
 ### Running integration tests
-There are two test suites of integration tests based on different testing 
frameworks. The old integration tests (stored in 
`geode-native/cppcache/integration-test`) are based on a custom testing 
framework, and the newer ones (stored in 
`geode-native/cppcache/integration/test`) are based on [Google 
Test](https://github.com/google/googletest).
+There are two test suites of integration tests based on different testing 
frameworks. The old integration tests (stored
+in `geode-native/cppcache/integration-test`) are based on a custom testing 
framework, and the newer ones (stored in 
+`geode-native/cppcache/integration/test`) are based on [Google 
Test](https://github.com/google/googletest).
 
-Old integration tests are deprecated. If your changes include the 
implementation of new integration test/s to be verified, they should be written 
using Google Test. If your change implies a significant change in one or more 
old test cases, you should create the equivalent test case/s using Google Test 
to substitute the old one/s instead of adapting them.
+Old integration tests are deprecated. If your changes include the 
implementation of new integration test/s to be
+verified, they should be written using Google Test. If your change implies a 
significant change in one or more old test
+cases, you should create the equivalent test case/s using Google Test to 
substitute the old one/s instead of adapting
+them.
 
-Both integration test suites can be executed together using CTest.
+Both integration test suites can be executed using CTest.
 
-#### Running old integration test suite
-```bash
+#### Running heritage integration test suite
+```console
 $ cd build/cppcache/integration-test
-$ ctest --timeout 2000 -L STABLE -C <Debug|Release> -j1
+$ ctest -C <Debug|RelWithDebInfo> --timeout 300 -j1
 ```
-Execution will take 2 hours approximately. It is possible to increase the 
number of jobs changing the value of `-j` parameter (up to `4`) for running 
tests in parallel, although it may end up with failed tests that will need to 
be re-run sequentially. Standalone tests can also be run as follows:
+Execution will take 2 hours approximately. It is possible to increase the 
number of jobs changing the value of `-j`
+parameter (up to `4`) for running tests in parallel, although it may end up 
with failed tests that will need to be
+re-run sequentially.
 
-```bash
+Standalone tests can also be run as follows:
+```console
 $ cd build/cppcache/integration-test
-$ ctest -R <test_name> -C <Debug|Release>
+$ ctest -C <Debug|RelWithDebInfo> -R <test_name>
+```
+For example:
+```console
+$ ctest -C RelWithDebInfo -R testCacheless
 ```
-For example: `$ ctest --timeout 2000 -L STABLE -C Release -R testCacheless -j1`
 
 .NET integration tests can be executed similarly from 
`build/clicache/integration-test`.
 
-#### Running Google Test integration test suite
+#### Running new Google Test integration test suite
 Make sure Docker is installed as it is required for SNI Tests
-```bash
-$ cd <clone>
+```console
 $ cd build/cppcache/integration/test
-$ ctest -j1
+$ ctest -C <Debug|RelWithDebInfo> -j1
 ```
-It is possible to increase the number of jobs changing the value of `-j` 
parameter for running tests in parallel, although it may end up with failed 
tests that will need to be re-run sequentially. Standalone tests can also be 
run as follows:
 
-```bash
-$ cd <clone>
+It is possible to increase the number of jobs changing the value of `-j` 
parameter for running tests in parallel,
+although it may end up with failed tests that will need to be re-run 
sequentially. Standalone tests can also be run as
+follows:
+```console
 $ cd build/cppcache/integration/test
-$ ctest -R <test_name> -j1
+$ ctest -C <Debug|RelWithDebInfo> -R <test_name> -j1
+```
+For example:
+```console
+$ ctest -C RelWithDebInfo -R AuthInitializeTest.putGetWithBasicAuth -j1
 ```
-For example: `$ ctest -R AuthInitializeTest.putGetWithBasicAuth -j1`
 
-Notice that `BasicIPv6Test` test is expected to fail due to IPv6 support is 
disabled by default. [BUILDING.md](BUILDING.md) explains how to enable it.
+Notice that `BasicIPv6Test` test is expected to fail due to IPv6 support is 
disabled by default. [BUILDING.md](BUILDING.md)
+explains how to enable it.
 
 ### Running acceptance tests
-Acceptance tests is a new category of tests that are designed to test end to 
end connectivity of a geode-native client with a cloud based geode cluster that 
sits behind a proxy server.
+Acceptance tests is a new category of tests that are designed to test end to 
end connectivity of a geode-native client
+with a cloud based geode cluster that sits behind a proxy server.
 
-These tests are stored in `geode-native/cppcache/acceptance-test` and 
`geode-native/clicache/acceptance-test` for C++ and .NET clients respectively. 
They utilize docker containers for the proxy server and geode servers. They are 
enabled during cmake configuration only if docker and docker-compose are found. 
+These tests are stored in `geode-native/cppcache/acceptance-test` and 
`geode-native/clicache/acceptance-test` for C++
+and .NET clients respectively. They utilize docker containers for the proxy 
server and geode servers. They are enabled
+during cmake configuration only if docker and docker-compose are found. 
 
-The acceptance tests can be run using ctest as follows. Note: Currently, the 
tests can only be run sequentially, hence the -j1 flag below.
+The acceptance tests can be run using ctest as follows. Note: Currently, the 
tests can only be run sequentially, hence
+the -j1 flag below.
 
 For C++ clients:
-```bash
-$ cd <clone>
+```console
 $ cd build/cppcache/acceptance-test
-$ ctest -R <test_name> -j1
+$ ctest -C <Debug|RelWithDebInfo> -R <test_name> -j1
 ```
 For .NET clients:
-```bash
-$ cd <clone>
+```console
 $ cd build/clicache/acceptance-test
-$ ctest -R <test_name> -j1
+$ ctest -C <Debug|RelWithDebInfo> -R <test_name> -j1
 ```
 
 ## Style
 
 ### Formatting C++
-For C++ it is required to follow the [Google C++ Style 
Guide](https://google.github.io/styleguide/cppguide.html) and have a build 
target that uses [clang-format](https://clang.llvm.org/docs/ClangFormat.html) 
to achieve compliance.
-```bash
-$ clang-format -i --style=file <PATH_TO_FILES>
+For C++ it is required to follow the [Google C++ Style 
Guide](https://google.github.io/styleguide/cppguide.html) and
+have a build target that uses 
[clang-format](https://clang.llvm.org/docs/ClangFormat.html) to achieve 
compliance.
+
+#### Clang-format
+
+Individual targets in the build tree have their own dependency of the form 
`<<targetName>>-clangformat`, which uses
+the `clang-format` executable, wherever it is found, to format and modified 
files according to the rules specfied in the
+.clang-format file. This is helpful when submitting changes to geode-native, 
because an improperly formatted file will
+fail Travis-CI and have to be fixed prior to merging any pull request. If 
clang-format is not installed on your system,
+clangformat targets will not be added to your project files, and geode-native 
should build normally. Under some
+circumstances, however, it may become necessary to disable `clang-format` on a 
system where it _is_ installed. The
+clang-format rules are defined in the `.clang-format` files.
+
+To enable `clang-tidy` if CMake does not find `clang-format`:
+
+```console
+$ cmake … -DClangFormat_EXECUTABLE=/path/to/clang-format …
+```
+
+To disable `clang-format` in the build:
+
+```console
+$ cmake … -DClangFormat_EXECUTABLE='' …
+```
+
+On the other hand, it may also be desirable to run clang-format on the entire 
source tree. This is also easily done via
+the `all-clangformat` _in a build with clang-format enabled_. If clang-format 
has been disabled in the cmake
+configuration step, as above, the `all-clangformat` target will not exist, and 
the cmake configuration step will have to
+be re-run with clang-format enabled.
+
+To run clang-format on the entire source tree:
+
+```console
+$ cmake --build . --target all-clangformat
+```
+
+#### Clang-Tidy
+
+Code style and conventions are enforced with clang-tidy. The clang-tidy rules 
can be found in the `.clang-tidy` files.
+
+To enable `clang-tidy`:
+
+```console
+$ cmake … -DCMAKE_CXX_CLANG_TIDY=/path/to/clang-tidy …
+```
+
+### Code Cleanup
+When editing old code please make the following changes.
+
+* Prefer the use of [`auto`](http://en.cppreference.com/w/cpp/language/auto) 
C++ or 
[`var`](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var)
+  in C# where applicable.
+  ```c++
+  std::vector<Cars> cars = lot.getCars();
+  ```
+  should be changed to
+  ```c++
+  auto cars = lot.getCars();
+  ```
+
+* Prefer [range for](http://en.cppreference.com/w/cpp/language/range-for) 
loops over traditional for loops where
+  applicable.
+  ```c++
+  for (std::vector<Car>::iterator i = cars.begin(); i != cars.end(), ++i) {
+    Car car = *i;
+    std::cout << car.getName();
+  }
+  ```
+  should be changed to
+  ```c++
+  for (const auto& car : cars) {
+    std::cout << car.getName();
+  }
+  ```
+
+* Fix bad variable names. Variable names should be expressive.
+  ```c++
+  double i = car.getFuelLevel();
+  ```
+  should be changed to
+  ```c++
+  auto fuelLevel = car.getFuelLevel();
+  ```
+
+* Use [`override`](http://en.cppreference.com/w/cpp/language/override) on all 
method overrides.
+
+  Given a base class
+  ```c++
+  class Base {
+   public:
+    Base();
+    virtual ~Base();
+    virtual virtualMethod();
+    virtual pureVirtualMethod() = 0;
+  }
+  ```
+  the derived class
+  ```c++
+  class Derived : public Base {
+   public:
+    virtual ~Derived();
+    virtual virtualMethod();
+    virtual pureVirtualMethod();
+  }
+  ```
+  should be changed to
+  ```c++
+  class Derived : public Base {
+   public:
+    Derived();
+    ~Derived() override;
+    virtualMethod() override;
+    pureVirtualMethod() override;
+  }
+  ```
+
+* Fix 
[`std::string::c_str()`](http://en.cppreference.com/w/cpp/string/basic_string/c_str)
 calls where passed to 
+  [`std::string`](http://en.cppreference.com/w/cpp/string/basic_string) 
parameters.
+  ```c++
+  auto name = std::string("Delorean");
+  ...
+  car.setName(name.c_str());
+  ```
+  should be changed to
+  ```c++
+  auto name = std::string("Delorean");
+  ...
+  car.setName(name);
+  ```
+
+* Replace [`sprintf`](http://en.cppreference.com/w/cpp/io/c/fprintf) for 
logging messages with 
[`std::string`](http://en.cppreference.com/w/cpp/string/basic_string)
+  or 
[`std::stringstream`](http://en.cppreference.com/w/cpp/io/basic_stringstream).
+  ```c++
+  char[1024] buffer;
+  sprintf(buffer, "Car::crashed: name=%s", car.getName().c_str());
+  LOG(buffer);
+  ```
+  should be changed to
+  ```c++
+  LOG("Car::crashed: name=" + car.getName());
+  ```
+
+* Replace 
[`dynamic_cast`](http://en.cppreference.com/w/cpp/language/dynamic_cast) on 
[`std::shared_ptr`](http://en.cppreference.com/w/cpp/memory/shared_ptr)
+  with 
[`std::dynamic_pointer_cast`](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast).
 Same goes for
+  [`static_cast`](http://en.cppreference.com/w/cpp/language/static_cast) to 
[`std::static_pointer_cast`](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast),
+  etc.
+  ```c++
+  std::shared_ptr<Car> car = garage.getCar();
+  Delorean* delorean = dynamic_cast<Delorean*>(car.get());
+  if (nullptr != delorean) {
+    delorean->setSpeed(88);
+  }
+  ```
+  should be changed to
+  ```c++
+  auto car = garage.getCar();
+  if (auto delorean = std::dynamic_pointer_cast<Delorean>(car)) {
+    delorean->setSpeed(88);
+  }
+  ```
+
+## Code Coverage
+
+If building with GCC or Clang you can enable C++ code coverage by adding 
`-DUSE_CPP_COVERAGE=ON` to the CMake generator
+command.
+
+```console
+$ cmake .. -DUSE_CPP_COVERAGE=ON …
+```
+
+You can then generate a C++ code coverage report by downloading 
[lcov](http://ltp.sourceforge.net/coverage/lcov.php).
+After acquiring lcov, finish the [Steps to build](BUILDING.md#Steps-to-build) 
section above. Then, run the tests as 
+described in the this document. Finally, run the following commands from the 
`build` directory:
+
+```console
+$ lcov --capture --directory . --output-file coverage.info
+$ genhtml coverage.info --output-directory coverage_report
 ```
 
-### Code
-When writing new or refactoring old code please make the following changes.
-
- * Prefer the use of [`auto`](http://en.cppreference.com/w/cpp/language/auto) 
C++ or 
[`var`](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/var)
 in C# where applicable.
-   ```c++
-   std::vector<Cars> cars = lot.getCars();
-   ```
-   should be changed to
-   ```c++
-   auto cars = lot.getCars();
-   ```
-
- * Prefer [range for](http://en.cppreference.com/w/cpp/language/range-for) 
loops over traditional for loops where applicable.
-   ```c++
-   for (std::vector<Car>::iterator i = cars.begin(); i != cars.end(), ++i) {
-     Car car = *i;
-     std::cout << car.getName();
-   }
-   ```
-   should be changed to
-   ```c++
-   for (const auto& car : cars) {
-     std::cout << car.getName();
-   }
-   ```
-
-  * Fix bad variable names. Variable names should be expressive.
-    ```c++
-    double i = car.getFuelLevel();
-    ```
-    should be changed to
-    ```c++
-    auto fuelLevel = car.getFuelLevel();
-    ```
-
-  * Use [`override`](http://en.cppreference.com/w/cpp/language/override) on 
all method overrides.
-
-    Given a base class
-    ```c++
-    class Base {
-     public:
-      Base();
-      virtual ~Base();
-      virtual virtualMethod();
-      virtual pureVirtualMethod() = 0;
-    }
-    ```
-    the derived class
-    ```c++
-    class Derived : public Base {
-     public:
-      virtual ~Derived();
-      virtual virtualMethod();
-      virtual pureVirtualMethod();
-    }
-    ```
-    should be changed to
-    ```c++
-    class Derived : public Base {
-     public:
-      Derived();
-      ~Derived() override;
-      virtualMethod() override;
-      pureVirtualMethod() override;
-    }
-    ```
-
-  * Fix 
[`std::string::c_str()`](http://en.cppreference.com/w/cpp/string/basic_string/c_str)
 calls where passed to 
[`std::string`](http://en.cppreference.com/w/cpp/string/basic_string) 
parameters.
-    ```c++
-    auto name = std::string("Delorean");
-    ...
-    car.setName(name.c_str());
-    ```
-    should be changed to
-    ```c++
-    auto name = std::string("Delorean");
-    ...
-    car.setName(name);
-    ```
-
-  * Replace [`sprintf`](http://en.cppreference.com/w/cpp/io/c/fprintf) for 
logging messages with 
[`std::string`](http://en.cppreference.com/w/cpp/string/basic_string) or 
[`std::stringstream`](http://en.cppreference.com/w/cpp/io/basic_stringstream).
-    ```c++
-    char[1024] buffer;
-    sprintf(buffer, "Car::crashed: name=%s", car.getName().c_str());
-    LOG(buffer);
-    ```
-    should be changed to
-    ```c++
-    LOG("Car::crashed: name=" + car.getName());
-    ```
-
-  * Replace 
[`dynamic_cast`](http://en.cppreference.com/w/cpp/language/dynamic_cast) on 
[`std::shared_ptr`](http://en.cppreference.com/w/cpp/memory/shared_ptr) with 
[`std::dynamic_pointer_cast`](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast).
 Same goes for 
[`static_cast`](http://en.cppreference.com/w/cpp/language/static_cast) to 
[`std::static_pointer_cast`](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast),
 etc.
-    ```c++
-    std::shared_ptr<Car> car = garage.getCar();
-    Delorean* delorean = dynamic_cast<Delorean*>(car.get());
-    if (nullptr != delorean) {
-      delorean->setSpeed(88);
-    }
-    ```
-    should be changed to
-    ```c++
-    auto car = garage.getCar();
-    if (auto delorean = std::dynamic_pointer_cast<Delorean>(car)) {
-      delorean->setSpeed(88);
-    }
-    ```
+You can then open the `index.html` file in the `coverage_report` directory 
using any browser.
diff --git a/README.md b/README.md
index f333bef..741c23f 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,53 @@
-[<img src="https://geode.apache.org/img/Apache_Geode_logo.png"; 
align="center"/>](http://geode.apache.org)
+[![Apache 
Geode](https://geode.apache.org/img/Apache_Geode_logo.png)](http://geode.apache.org)
 
-[![Build 
Status](https://travis-ci.org/apache/geode-native.svg?branch=develop)](https://travis-ci.org/apache/geode-native)
 
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
 [![Total 
alerts](https://img.shields.io/lgtm/alerts/g/apache/geode-native.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/apache/geode-native/alerts/)
 [![Language grade: 
C/C++](https://img.shields.io/lgtm/grade/cpp/g/apache/geode-native.svg?l [...]
+[![Build 
Status](https://concourse.apachegeode-ci.info/api/v1/teams/main/pipelines/geode-native-develop/badge)](https://concourse.apachegeode-ci.info/teams/main/pipelines/geode-native-develop)
+[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
+[![LGTM Total 
Alerts](https://img.shields.io/lgtm/alerts/g/apache/geode-native.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/apache/geode-native/alerts/)
+[![Language grade: 
C/C++](https://img.shields.io/lgtm/grade/cpp/g/apache/geode-native.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/apache/geode-native/context:cpp)
+[![Language grade: 
C#](https://img.shields.io/lgtm/grade/csharp/g/apache/geode-native.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/apache/geode-native/context:csharp)
+[![Language grade: 
JavaScript](https://img.shields.io/lgtm/grade/javascript/g/apache/geode-native.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/apache/geode-native/context:javascript)
 
-**[Overview](#overview)**  
-**[Building from Source](#building)**  
-**[Application Development](#development)**  
+Table of Contents
+=================
+* [Overview](#overview)
+* [Building from Source](#building-from-source)
+* [Application Development](#application-development)
+* [Versioning](#versioning)
+* [Export Control](#export-control)
 
-## <a name="overview"></a>Overview
+# Overview
 
-Native Client is a client implementation for [Apache 
Geode](http://geode.apache.org/) that does not require the Java server JARs.
+Native Client is a client implementation for [Apache 
Geode](http://geode.apache.org/) that does not require the Java
+server JARs.
 
-## <a name="building"></a>Building from Source
+# Building from Source
 
 Directions to build Native Client from source can be found in the source 
distribution in [BUILDING.md](BUILDING.md).
 
-## <a name="development"></a>Application Development
+# Application Development
 
 Native Client applications can be written in these client technologies:
 
-* [C++] (https://isocpp.org)
-* [C#] (https://msdn.microsoft.com/en-us/library/ms228593.aspx)
+* [C++](https://isocpp.org)
+* [.NET 
Framework](https://dotnet.microsoft.com/learn/dotnet/what-is-dotnet-framework)
 
-## Export Control
+# Versioning
+
+Geode Native follows the [Semantic Versioning 
2.0.0](https://semver.org/spec/v2.0.0.html) specification (semver). This
+specification only addresses the [API](https://en.wikipedia.org/wiki/API) 
compatibility with libraries and does not
+cover [ABI](https://en.wikipedia.org/wiki/Application_binary_interface) 
compatibility.
+
+## C++
+
+ABI compatibility is not preserved similarly to the API compatibility. ABI 
compatibility is only guaranteed between
+patch releases. Recompilation is required for both minor and major releases.
+
+## .NET
+
+ABI compatibility is preserved similarly to the API compatibility. ABI 
compatibility is guaranteed between patch and
+minor releases. Recompilation is only require for major releases or to utilize 
new APIs added in minor releases.
+
+# Export Control
 
 This distribution includes cryptographic software.
 The country in which you currently reside may have restrictions
@@ -45,5 +71,3 @@ for both object code and source code.
 The following provides more details on the included cryptographic software:
 
 * Apache Geode links to and uses [OpenSSL](https://www.openssl.org/) ciphers.
-
-

Reply via email to