{"action":"created","comment":{"url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/comments/69488655","id":69488655,"diff_hunk":"@@ -0,0 +1,781 @@\n+\n+#pragma once\n+\n+#include \"astronomy/date.hpp\"\n+\n+#include <array>\n+#include <cstdint>\n+\n+#include \"astronomy/epoch.hpp\"\n+#include \"geometry/named_quantities.hpp\"\n+#include \"glog/logging.h\"\n+#include \"quantities/si.hpp\"\n+\n+// A macro to allow glog checking within C++11 constexpr code.  If |condition|,\n+// evaluates to |expression|.  Otherwise, results in a CHECK failure at runtime\n+// and a compilation error due to a call to non-constexpr code at compile time.\n+#define CHECKING(condition, expression) \\\n+  ((condition) ? (expression) : (CHECK(condition), (expression)))\n+\n+namespace principia {\n+namespace astronomy {\n+namespace internal_date {\n+\n+using quantities::Time;\n+using quantities::si::Day;\n+using quantities::si::Second;\n+\n+// The following is horrendous in part because written in C++11, thus\n+// functionally; it should perhaps be reworked once MSVC offers proper C++14\n+// constexpr.\n+\n+// Calendar classes.\n+\n+class Date {\n+ public:\n+  static constexpr Date YYYYMMDD(std::int64_t digits);\n+  static constexpr Date YYYYwwD(std::int64_t digits);\n+  static constexpr Date YYYYDDD(std::int64_t digits);\n+\n+  static constexpr Date Calendar(int const year,\n+                                 int const month,\n+                                 int const day);\n+  static constexpr Date Ordinal(int const year, int const day);\n+  static constexpr Date Week(int const year, int const week, int const day);\n+\n+  constexpr int year() const;\n+  constexpr int month() const;\n+  constexpr int day() const;\n+\n+  constexpr int ordinal() const;\n+\n+  constexpr Date next_day() const;\n+\n+ private:\n+  constexpr Date(int const year,\n+                 std::int8_t const month,\n+                 std::int8_t const day);\n+\n+  int const year_;\n+  int const month_;\n+  int const day_;\n+};\n+\n+class TimeOfDay {\n+ public:\n+  static constexpr TimeOfDay hhmmss_ns(int const hhmmss, int ns);\n+\n+  constexpr int hour() const;\n+  constexpr int minute() const;\n+  constexpr int second() const;\n+  constexpr int nanosecond() const;\n+\n+  constexpr bool is_leap_second() const;\n+  // Whether |*this| is 24:00:00.\n+  constexpr bool is_end_of_day() const;\n+\n+ private:\n+  constexpr TimeOfDay(int const hour,\n+                      int const minute,\n+                      int const second,\n+                      int const nanosecond);\n+\n+  // Checks that this represents a valid time of day as per ISO 8601, thus\n+  // that the components are in the normal range, or that the object represents\n+  // a time in a leap second, or that it represents the end of the day.\n+  constexpr TimeOfDay const& checked() const;\n+\n+  int const hour_;\n+  int const minute_;\n+  int const second_;\n+  int const nanosecond_;\n+};\n+\n+class DateTime {\n+ public:\n+  constexpr Date const& date() const;\n+  constexpr TimeOfDay const& time() const;\n+\n+  // If |time()| is 24:00:00, returns an equivalent DateTime where midnight is\n+  // expressed as 00:00:00 on the next day; otherwise, returns *this.\n+  constexpr DateTime normalized_end_of_day() const;\n+\n+ private:\n+  constexpr DateTime(Date const date, TimeOfDay const time);\n+\n+  // Checks that |time| does not represent a leap second unless |date| is the\n+  // last day of June, December, March, or September.\n+  constexpr DateTime const& checked() const;\n+\n+  Date const date_;\n+  TimeOfDay const time_;\n+\n+  friend constexpr DateTime operator\"\"_DateTime(char const* string,\n+                                                 std::size_t size);","path":"astronomy/date_body.hpp","position":114,"original_position":114,"commit_id":"e634d8f6cd92fb60038561d356d9bb19f200f63f","original_commit_id":"e634d8f6cd92fb60038561d356d9bb19f200f63f","user":{"login":"pleroy","id":7423020,"avatar_url":"https://avatars.githubusercontent.com/u/7423020?v=3","gravatar_id":"","url":"https://api.github.com/users/pleroy","html_url":"https://github.com/pleroy","followers_url":"https://api.github.com/users/pleroy/followers","following_url":"https://api.github.com/users/pleroy/following{/other_user}","gists_url":"https://api.github.com/users/pleroy/gists{/gist_id}","starred_url":"https://api.github.com/users/pleroy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pleroy/subscriptions","organizations_url":"https://api.github.com/users/pleroy/orgs","repos_url":"https://api.github.com/users/pleroy/repos","events_url":"https://api.github.com/users/pleroy/events{/privacy}","received_events_url":"https://api.github.com/users/pleroy/received_events","type":"User","site_admin":false},"body":"Bad indent.","created_at":"2016-07-04T20:02:55Z","updated_at":"2016-07-04T20:02:55Z","html_url":"https://github.com/mockingbirdnest/Principia/pull/1087#discussion_r69488655","pull_request_url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087","_links":{"self":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/comments/69488655"},"html":{"href":"https://github.com/mockingbirdnest/Principia/pull/1087#discussion_r69488655"},"pull_request":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087"}}},"pull_request":{"url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087","id":76194463,"html_url":"https://github.com/mockingbirdnest/Principia/pull/1087","diff_url":"https://github.com/mockingbirdnest/Principia/pull/1087.diff","patch_url":"https://github.com/mockingbirdnest/Principia/pull/1087.patch","issue_url":"https://api.github.com/repos/mockingbirdnest/Principia/issues/1087","number":1087,"state":"open","locked":false,"title":"Dates","user":{"login":"eggrobin","id":2284290,"avatar_url":"https://avatars.githubusercontent.com/u/2284290?v=3","gravatar_id":"","url":"https://api.github.com/users/eggrobin","html_url":"https://github.com/eggrobin","followers_url":"https://api.github.com/users/eggrobin/followers","following_url":"https://api.github.com/users/eggrobin/following{/other_user}","gists_url":"https://api.github.com/users/eggrobin/gists{/gist_id}","starred_url":"https://api.github.com/users/eggrobin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eggrobin/subscriptions","organizations_url":"https://api.github.com/users/eggrobin/orgs","repos_url":"https://api.github.com/users/eggrobin/repos","events_url":"https://api.github.com/users/eggrobin/events{/privacy}","received_events_url":"https://api.github.com/users/eggrobin/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-07-04T19:07:05Z","updated_at":"2016-07-04T20:02:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f1f225d4bf594a6ff3e7f4563ca679827d8ab308","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087/commits","review_comments_url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087/comments","review_comment_url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/comments{/number}","comments_url":"https://api.github.com/repos/mockingbirdnest/Principia/issues/1087/comments","statuses_url":"https://api.github.com/repos/mockingbirdnest/Principia/statuses/e634d8f6cd92fb60038561d356d9bb19f200f63f","head":{"label":"eggrobin:dates","ref":"dates","sha":"e634d8f6cd92fb60038561d356d9bb19f200f63f","user":{"login":"eggrobin","id":2284290,"avatar_url":"https://avatars.githubusercontent.com/u/2284290?v=3","gravatar_id":"","url":"https://api.github.com/users/eggrobin","html_url":"https://github.com/eggrobin","followers_url":"https://api.github.com/users/eggrobin/followers","following_url":"https://api.github.com/users/eggrobin/following{/other_user}","gists_url":"https://api.github.com/users/eggrobin/gists{/gist_id}","starred_url":"https://api.github.com/users/eggrobin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eggrobin/subscriptions","organizations_url":"https://api.github.com/users/eggrobin/orgs","repos_url":"https://api.github.com/users/eggrobin/repos","events_url":"https://api.github.com/users/eggrobin/events{/privacy}","received_events_url":"https://api.github.com/users/eggrobin/received_events","type":"User","site_admin":false},"repo":{"id":19360849,"name":"Principia","full_name":"eggrobin/Principia","owner":{"login":"eggrobin","id":2284290,"avatar_url":"https://avatars.githubusercontent.com/u/2284290?v=3","gravatar_id":"","url":"https://api.github.com/users/eggrobin","html_url":"https://github.com/eggrobin","followers_url":"https://api.github.com/users/eggrobin/followers","following_url":"https://api.github.com/users/eggrobin/following{/other_user}","gists_url":"https://api.github.com/users/eggrobin/gists{/gist_id}","starred_url":"https://api.github.com/users/eggrobin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eggrobin/subscriptions","organizations_url":"https://api.github.com/users/eggrobin/orgs","repos_url":"https://api.github.com/users/eggrobin/repos","events_url":"https://api.github.com/users/eggrobin/events{/privacy}","received_events_url":"https://api.github.com/users/eggrobin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eggrobin/Principia","description":"N-Body Gravitation and Better Integrators for Kerbal Space Program","fork":true,"url":"https://api.github.com/repos/eggrobin/Principia","forks_url":"https://api.github.com/repos/eggrobin/Principia/forks","keys_url":"https://api.github.com/repos/eggrobin/Principia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eggrobin/Principia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eggrobin/Principia/teams","hooks_url":"https://api.github.com/repos/eggrobin/Principia/hooks","issue_events_url":"https://api.github.com/repos/eggrobin/Principia/issues/events{/number}","events_url":"https://api.github.com/repos/eggrobin/Principia/events","assignees_url":"https://api.github.com/repos/eggrobin/Principia/assignees{/user}","branches_url":"https://api.github.com/repos/eggrobin/Principia/branches{/branch}","tags_url":"https://api.github.com/repos/eggrobin/Principia/tags","blobs_url":"https://api.github.com/repos/eggrobin/Principia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eggrobin/Principia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eggrobin/Principia/git/refs{/sha}","trees_url":"https://api.github.com/repos/eggrobin/Principia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eggrobin/Principia/statuses/{sha}","languages_url":"https://api.github.com/repos/eggrobin/Principia/languages","stargazers_url":"https://api.github.com/repos/eggrobin/Principia/stargazers","contributors_url":"https://api.github.com/repos/eggrobin/Principia/contributors","subscribers_url":"https://api.github.com/repos/eggrobin/Principia/subscribers","subscription_url":"https://api.github.com/repos/eggrobin/Principia/subscription","commits_url":"https://api.github.com/repos/eggrobin/Principia/commits{/sha}","git_commits_url":"https://api.github.com/repos/eggrobin/Principia/git/commits{/sha}","comments_url":"https://api.github.com/repos/eggrobin/Principia/comments{/number}","issue_comment_url":"https://api.github.com/repos/eggrobin/Principia/issues/comments{/number}","contents_url":"https://api.github.com/repos/eggrobin/Principia/contents/{+path}","compare_url":"https://api.github.com/repos/eggrobin/Principia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eggrobin/Principia/merges","archive_url":"https://api.github.com/repos/eggrobin/Principia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eggrobin/Principia/downloads","issues_url":"https://api.github.com/repos/eggrobin/Principia/issues{/number}","pulls_url":"https://api.github.com/repos/eggrobin/Principia/pulls{/number}","milestones_url":"https://api.github.com/repos/eggrobin/Principia/milestones{/number}","notifications_url":"https://api.github.com/repos/eggrobin/Principia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eggrobin/Principia/labels{/name}","releases_url":"https://api.github.com/repos/eggrobin/Principia/releases{/id}","deployments_url":"https://api.github.com/repos/eggrobin/Principia/deployments","created_at":"2014-05-01T23:29:34Z","updated_at":"2016-02-06T17:41:10Z","pushed_at":"2016-07-04T19:05:50Z","git_url":"git://github.com/eggrobin/Principia.git","ssh_url":"git@github.com:eggrobin/Principia.git","clone_url":"https://github.com/eggrobin/Principia.git","svn_url":"https://github.com/eggrobin/Principia","homepage":"http://forum.kerbalspaceprogram.com/threads/68502-WIP-Principia-N-Body-Gravitation-and-Better-Integrators-for-Kerbal-Space-Program","size":25396,"stargazers_count":2,"watchers_count":2,"language":"C++","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":2,"default_branch":"master"}},"base":{"label":"mockingbirdnest:master","ref":"master","sha":"e461f4a8592bee1e83ee5a4f8143a0796d6b84d3","user":{"login":"mockingbirdnest","id":7462691,"avatar_url":"https://avatars.githubusercontent.com/u/7462691?v=3","gravatar_id":"","url":"https://api.github.com/users/mockingbirdnest","html_url":"https://github.com/mockingbirdnest","followers_url":"https://api.github.com/users/mockingbirdnest/followers","following_url":"https://api.github.com/users/mockingbirdnest/following{/other_user}","gists_url":"https://api.github.com/users/mockingbirdnest/gists{/gist_id}","starred_url":"https://api.github.com/users/mockingbirdnest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mockingbirdnest/subscriptions","organizations_url":"https://api.github.com/users/mockingbirdnest/orgs","repos_url":"https://api.github.com/users/mockingbirdnest/repos","events_url":"https://api.github.com/users/mockingbirdnest/events{/privacy}","received_events_url":"https://api.github.com/users/mockingbirdnest/received_events","type":"Organization","site_admin":false},"repo":{"id":16634370,"name":"Principia","full_name":"mockingbirdnest/Principia","owner":{"login":"mockingbirdnest","id":7462691,"avatar_url":"https://avatars.githubusercontent.com/u/7462691?v=3","gravatar_id":"","url":"https://api.github.com/users/mockingbirdnest","html_url":"https://github.com/mockingbirdnest","followers_url":"https://api.github.com/users/mockingbirdnest/followers","following_url":"https://api.github.com/users/mockingbirdnest/following{/other_user}","gists_url":"https://api.github.com/users/mockingbirdnest/gists{/gist_id}","starred_url":"https://api.github.com/users/mockingbirdnest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mockingbirdnest/subscriptions","organizations_url":"https://api.github.com/users/mockingbirdnest/orgs","repos_url":"https://api.github.com/users/mockingbirdnest/repos","events_url":"https://api.github.com/users/mockingbirdnest/events{/privacy}","received_events_url":"https://api.github.com/users/mockingbirdnest/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/mockingbirdnest/Principia","description":"N-Body Gravitation and Better Integrators for Kerbal Space Program","fork":false,"url":"https://api.github.com/repos/mockingbirdnest/Principia","forks_url":"https://api.github.com/repos/mockingbirdnest/Principia/forks","keys_url":"https://api.github.com/repos/mockingbirdnest/Principia/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mockingbirdnest/Principia/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mockingbirdnest/Principia/teams","hooks_url":"https://api.github.com/repos/mockingbirdnest/Principia/hooks","issue_events_url":"https://api.github.com/repos/mockingbirdnest/Principia/issues/events{/number}","events_url":"https://api.github.com/repos/mockingbirdnest/Principia/events","assignees_url":"https://api.github.com/repos/mockingbirdnest/Principia/assignees{/user}","branches_url":"https://api.github.com/repos/mockingbirdnest/Principia/branches{/branch}","tags_url":"https://api.github.com/repos/mockingbirdnest/Principia/tags","blobs_url":"https://api.github.com/repos/mockingbirdnest/Principia/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mockingbirdnest/Principia/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mockingbirdnest/Principia/git/refs{/sha}","trees_url":"https://api.github.com/repos/mockingbirdnest/Principia/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mockingbirdnest/Principia/statuses/{sha}","languages_url":"https://api.github.com/repos/mockingbirdnest/Principia/languages","stargazers_url":"https://api.github.com/repos/mockingbirdnest/Principia/stargazers","contributors_url":"https://api.github.com/repos/mockingbirdnest/Principia/contributors","subscribers_url":"https://api.github.com/repos/mockingbirdnest/Principia/subscribers","subscription_url":"https://api.github.com/repos/mockingbirdnest/Principia/subscription","commits_url":"https://api.github.com/repos/mockingbirdnest/Principia/commits{/sha}","git_commits_url":"https://api.github.com/repos/mockingbirdnest/Principia/git/commits{/sha}","comments_url":"https://api.github.com/repos/mockingbirdnest/Principia/comments{/number}","issue_comment_url":"https://api.github.com/repos/mockingbirdnest/Principia/issues/comments{/number}","contents_url":"https://api.github.com/repos/mockingbirdnest/Principia/contents/{+path}","compare_url":"https://api.github.com/repos/mockingbirdnest/Principia/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mockingbirdnest/Principia/merges","archive_url":"https://api.github.com/repos/mockingbirdnest/Principia/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mockingbirdnest/Principia/downloads","issues_url":"https://api.github.com/repos/mockingbirdnest/Principia/issues{/number}","pulls_url":"https://api.github.com/repos/mockingbirdnest/Principia/pulls{/number}","milestones_url":"https://api.github.com/repos/mockingbirdnest/Principia/milestones{/number}","notifications_url":"https://api.github.com/repos/mockingbirdnest/Principia/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mockingbirdnest/Principia/labels{/name}","releases_url":"https://api.github.com/repos/mockingbirdnest/Principia/releases{/id}","deployments_url":"https://api.github.com/repos/mockingbirdnest/Principia/deployments","created_at":"2014-02-08T02:55:32Z","updated_at":"2016-06-24T13:15:54Z","pushed_at":"2016-07-04T19:07:06Z","git_url":"git://github.com/mockingbirdnest/Principia.git","ssh_url":"git@github.com:mockingbirdnest/Principia.git","clone_url":"https://github.com/mockingbirdnest/Principia.git","svn_url":"https://github.com/mockingbirdnest/Principia","homepage":"http://forum.kerbalspaceprogram.com/threads/68502-WIP-Principia-N-Body-Gravitation-and-Better-Integrators-for-Kerbal-Space-Program","size":27564,"stargazers_count":121,"watchers_count":121,"language":"C++","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":16,"mirror_url":null,"open_issues_count":49,"forks":16,"open_issues":49,"watchers":121,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087"},"html":{"href":"https://github.com/mockingbirdnest/Principia/pull/1087"},"issue":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/issues/1087"},"comments":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/issues/1087/comments"},"review_comments":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087/comments"},"review_comment":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/pulls/1087/commits"},"statuses":{"href":"https://api.github.com/repos/mockingbirdnest/Principia/statuses/e634d8f6cd92fb60038561d356d9bb19f200f63f"}}}}
{"actor":{"display_login":"pleroy"}}