Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FC updates to support Tanks and Taps #191

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

nathanielhourt
Copy link

These are the updates I've made to FC to support Tanks and Taps. There's some interesting stuff in here:

  • John's hash160
  • Updates to static_variant
  • Updates to my typelist
  • New object_reflection to create instrumented pseudo-references to reflected types (see e1ed222)

jmjatlanta and others added 14 commits March 18, 2020 18:40
A helper function to check if a supplied type T can be stored in the
static_variant
Add support to FC reflection for reflecting a class's members from within
the class itself, i.e.:

struct Foo {
   int x;
   char y;
   FC_REFLECT_INTERNAL(Foo, (x)(y))
};

The reflection must still be declared to FC from within the global
namespace using FC_COMPLETE_INTERNAL_REFLECTION(Foo).

This is particularly useful for reflecting SFINAE template classes where
the members vary depending on the template parameters, i.e.:

template<typename T, typename = void>
struct Foo { int x; FC_REFLECT_INTERNAL(Foo, (x)) };
template<typename T>
struct Foo<T, std::enable_if_t<std::is_same<T, char>{}>> {
   int x; char y; FC_REFLECT_INTERNAL(Foo, (x)(y))
};
Add some new features around filters, transforms, and a new
runtime::make_array to convert a typelist to a runtime std::array
This template transforms a typelist by transforming each element to the
application of that element to a provided template.

Also, fix a bug in typelist::slice, where slice<list<void>, 1> did not
compile.
C++ does not allow derived classes to inherit parent class constructors
and assignment operators, which makes the static_variant<list<...>>
shortcut create a somewhat crippled type. Remove the shortcut and
require client code to use the more syntax-heavy
typelist::apply<list<...>, static_variant>
This commit introduces a new fc::object_reflection<T> template which can
be used to generate instrumentable mirror types which simulate reference
access to reflected objects via methods, but these methods can be
reconfigured by client code to do additional checking, logging, or
recording of what data is read and written.

Also add some new mutators for typelists: append, prepend, insert
nathanielhourt added a commit to nathanielhourt/bitshares-2 that referenced this pull request Mar 23, 2020
This adds compatibility to bitshares/hardfork for bitshares/bitshares-fc#191
nathanielhourt added a commit to nathanielhourt/bitshares-2 that referenced this pull request Mar 23, 2020
This adds compatibility to bitshares/hardfork for bitshares/bitshares-fc#191
@nathanielhourt
Copy link
Author

I've just realized that while I can build bitshares' develop branch against this, I can't build hardfork unless I add my TNT updates.

See bitshares/bitshares-core#2118 for updates to bitshares/hardfork to allow building against this version of FC.

@abitmore abitmore added this to the core release 5.0.0 milestone Mar 24, 2020
nathanielhourt added a commit to nathanielhourt/bitshares-2 that referenced this pull request Apr 4, 2020
This adds compatibility to bitshares/hardfork for bitshares/bitshares-fc#191
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
3 participants