diff --git a/Builds/VisualStudio2013/RippleD.vcxproj b/Builds/VisualStudio2013/RippleD.vcxproj
index 55af21cfad..c827853341 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj
+++ b/Builds/VisualStudio2013/RippleD.vcxproj
@@ -121,72 +121,75 @@
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
+
True
-
+
-
+
+
+
+
+
+
+
True
-
+
+
+
+
+
+
+
+
+
+
+
True
@@ -198,25 +201,106 @@
True
-
+
-
-
-
+
True
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
True
+
+ True
+
+
+
+
+
True
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
+
+
True
@@ -229,6 +313,21 @@
True
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
True
@@ -238,31 +337,131 @@
True
+
+ True
+
+
+
True
True
+
+
+
+
+
+ True
+
+
+
+
+
+
+
True
-
+
+
+
+
+
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
-
- True
-
True
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
True
-
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
True
@@ -285,6 +484,25 @@
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
True
@@ -300,15 +518,90 @@
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
True
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
True
@@ -324,18 +617,62 @@
True
+
+
True
True
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
True
@@ -354,6 +691,19 @@
True
+
+
+
+
+
+
+
+
+
+
+
+ True
+
True
@@ -363,127 +713,248 @@
True
-
- True
-
-
+
+
+
+
+
True
+
+
True
+
+
+
+
+
+ True
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
+
+
True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
+
+
+
+
True
+
+
+
+
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
+
+
True
+
+ True
+
+
+
+
+
+
+
+
+
+
+
True
+
+
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
+
+
True
+
+
+
+
True
+
+
+
+
True
+
+
+
+
@@ -533,50 +1004,133 @@
True
+
+
+
+
True
+
+
True
+
+
True
+
+
+
+
+
+
True
+
+
+
+
+
+
+
+
True
+
+
True
+
+
True
+
+
True
+
+
True
+
+
+
+
True
+
+
+
+
+
+
+
+
+
+
True
+
+
True
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
True
@@ -613,588 +1167,708 @@
True
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
True
-
-
-
-
-
-
-
-
-
-
-
+
True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
+ True
+
+
-
+
-
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
+ True
+
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
+ True
+
+
+ True
+
+
-
+
+ True
+
+
+ True
+
+
-
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
-
+
+ True
+
+
-
+
+ True
+
+
-
+
+ True
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
- True
-
-
+
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
+
-
-
-
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
+
-
+
+ True
+
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
True
-
-
True
@@ -1204,28 +1878,16 @@
True
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
@@ -1240,6 +1902,647 @@
+
+ True
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ Document
+ protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
+ ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc.
+ protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
+ false
+ Document
+ protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
+ ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc.
+ protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
+ false
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
@@ -1270,600 +2573,72 @@
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
+
-
- True
-
-
- True
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
-
-
- Document
- protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
- ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc.
- protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
- false
- Document
- protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
- ..\..\build\proto\ripple.pb.h;..\..\build\proto\ripple.pb.cc.
- protoc --cpp_out=..\..\build\proto --proto_path=%(RelativeDir) %(Identity)
- false
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
-
-
+
-
-
-
-
+
+
True
-
-
True
+
+
True
-
+
True
@@ -1873,454 +2648,15 @@
True
-
+
-
- True
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
-
-
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
-
-
+
True
+
+
True
@@ -2329,140 +2665,590 @@
True
-
-
-
+
-
-
-
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
- True
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
True
+
+
True
-
-
-
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
True
@@ -2489,210 +3275,450 @@
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
True
@@ -2802,6 +3828,9 @@
True
+
+ True
+
True
@@ -2811,9 +3840,6 @@
True
-
- True
-
True
@@ -2874,1159 +3900,174 @@
True
+
+
True
+
+
True
+
+
+
+
+
+ True
+
True
+
+
+
+ True
+
True
+
+
True
+
+
+
+ True
+
True
+
+
True
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
-
-
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
-
- True
-
-
- True
-
-
- True
-
-
-
-
-
-
-
-
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
+
True
-
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
- ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+ True
+
+
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
+
-
+
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+ ..\..\build\proto;..\..\src;..\..\src\leveldb;..\..\src\leveldb\include;..\..\src\leveldb\port;..\..\src\protobuf\src;..\..\src\protobuf\src;..\..\src\protobuf\vsprojects;..\..\src\snappy\config;..\..\src\snappy\snappy;%(AdditionalIncludeDirectories)
+
+
+
+
True
-
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
diff --git a/Builds/VisualStudio2013/RippleD.vcxproj.filters b/Builds/VisualStudio2013/RippleD.vcxproj.filters
index 51580618bc..8d04b75b8b 100644
--- a/Builds/VisualStudio2013/RippleD.vcxproj.filters
+++ b/Builds/VisualStudio2013/RippleD.vcxproj.filters
@@ -73,6 +73,9 @@
{3F4BB48F-19E3-683D-5CE8-6043F7F2FA9B}
+
+ {4AA88C73-8446-0811-2E52-7EA040221CE1}
+
{627A5FB2-88DD-EB14-691C-9E4B4EBA0E39}
@@ -442,6 +445,9 @@
{1E50BDC0-914E-94FC-318A-4C4EB88D743D}
+
+ {5B8E8FD8-8D39-7028-71D6-00E374F77656}
+
{C465F623-0A46-21B8-59A9-98F1628172B1}
@@ -633,75 +639,105 @@
-
- src\ripple\beast
+
+ build\proto
+
+ build\proto
+
+
+ src
+
+
+ src\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
+
+ src\beast\beast
+
src\beast\beast\asio
-
- src\beast\beast\boost
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\container
-
-
- src\beast\beast\crypto
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\http
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\net
-
-
- src\beast\beast\streams
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\utility
-
-
- src\beast\modules\beast_asio
-
-
- src\beast\modules\beast_core
-
-
- src\beast\modules\beast_sqdb
-
-
- src
+
+ src\beast\beast\asio
src\beast\beast\asio
-
- src\beast
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio\impl
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\asio
src\beast\beast\asio\tests
-
- src\beast\beast\asio\impl
-
src\beast\beast\asio\tests
@@ -711,27 +747,144 @@
src\beast\beast\asio\tests
+
+ src\beast\beast\asio
+
+
+ src\beast\beast\boost
+
src\beast\beast\boost
-
- src\beast\beast
+
+ src\beast\beast\boost
-
- src\beast\beast\chrono\impl
+
+ src\beast\beast\chrono
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
src\beast\beast\chrono\impl
+
+ src\beast\beast\chrono\impl
+
+
+ src\beast\beast\chrono
+
+
+ src\beast\beast\chrono
+
src\beast\beast\chrono\tests
src\beast\beast\chrono\tests
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\config
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container\detail
+
+
+ src\beast\beast\container\detail
+
+
+ src\beast\beast\container\detail
+
+
+ src\beast\beast\container\detail
+
+
+ src\beast\beast\container
+
+
+ src\beast\beast\container
+
src\beast\beast\container\impl
+
+ src\beast\beast\container\impl
+
src\beast\beast\container\tests
@@ -744,6 +897,27 @@
src\beast\beast\container\tests
+
+ src\beast\beast\container\tests
+
+
+ src\beast\beast\crypto
+
+
+ src\beast\beast\crypto
+
+
+ src\beast\beast\crypto
+
+
+ src\beast\beast\crypto
+
+
+ src\beast\beast\crypto
+
+
+ src\beast\beast\crypto
+
src\beast\beast\crypto\impl
@@ -753,32 +927,167 @@
src\beast\beast\crypto\impl
+
+ src\beast\beast\crypto\impl\sha2
+
+
+ src\beast\beast\crypto\impl\sha2
+
src\beast\beast\crypto\tests
src\beast\beast\crypto\tests
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
src\beast\beast\cxx14\tests
-
- src\beast\beast\http\impl
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\cxx14
+
+
+ src\beast\beast\http
+
+ src\beast\beast\http
+
+
+ src\beast\beast\http
+
+
+ src\beast\beast\http
+
+
+ src\beast\beast\http
+
+
+ src\beast\beast\http
+
+
+ src\beast\beast\http\detail
+
+
+ src\beast\beast\http
+
src\beast\beast\http\impl
-
- src\beast\beast\http\impl
-
src\beast\beast\http\impl
+
+ src\beast\beast\http\impl
+
+
+ src\beast\beast\http\impl
+
+
+ src\beast\beast\http\impl\http-parser
+
+
+ src\beast\beast\http\impl\http-parser
+
+
+ src\beast\beast\http\impl
+
+
+ src\beast\beast\http\impl
+
+
+ src\beast\beast\http\impl
+
+
+ src\beast\beast\http
+
src\beast\beast\http\tests
-
- src\beast\beast
+
+ src\beast\beast\http\tests
+
+
+ src\beast\beast\http\tests
+
+
+ src\beast\beast\http\tests
+
+
+ src\beast\beast\http\tests
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
+
+
+ src\beast\beast\insight
src\beast\beast\insight\impl
@@ -801,6 +1110,33 @@
src\beast\beast\insight\impl
+
+ src\beast\beast\intrusive
+
+
+ src\beast\beast\intrusive
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net
+
+
+ src\beast\beast\net\detail
+
src\beast\beast\net\impl
@@ -816,15 +1152,123 @@
src\beast\beast\net\tests
+
+ src\beast\beast\smart_ptr
+
+
+ src\beast\beast\smart_ptr
+
+
+ src\beast\beast\smart_ptr
+
+
+ src\beast\beast\smart_ptr
+
+
+ src\beast\beast\streams
+
+
+ src\beast\beast\streams
+
+
+ src\beast\beast\streams
+
+
+ src\beast\beast\streams
+
+
+ src\beast\beast\streams
+
+
+ src\beast\beast\streams
+
src\beast\beast\streams\tests
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
+
+ src\beast\beast\strings
+
src\beast\beast\strings\impl
src\beast\beast\strings\impl
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads
+
+
+ src\beast\beast\threads\detail
+
+
+ src\beast\beast\threads\detail
+
src\beast\beast\threads\impl
@@ -840,21 +1284,84 @@
src\beast\beast\threads\impl
+
+ src\beast\beast\threads
+
src\beast\beast\threads\tests
src\beast\beast\threads\tests
+
+ src\beast\beast
+
src\beast\beast\unit_test
+
+ src\beast\beast\unit_test
+
src\beast\beast\unit_test
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
src\beast\beast\unit_test
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\unit_test
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
src\beast\beast\utility\impl
@@ -873,6 +1380,24 @@
src\beast\beast\utility\impl
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility
+
+
+ src\beast\beast\utility\tests
+
src\beast\beast\utility\tests
@@ -882,132 +1407,312 @@
src\beast\beast\utility\tests
-
- src\beast\beast\utility\tests
-
-
- src\beast\beast\http\impl
+
+ src\beast\beast\utility
+
+
+ src\beast\modules\beast_asio\async
+
+
+ src\beast\modules\beast_asio\basics
src\beast\modules\beast_asio\basics
+
+ src\beast\modules\beast_asio\basics
+
src\beast\modules\beast_asio\basics
+
+ src\beast\modules\beast_asio\basics
+
+
+ src\beast\modules\beast_asio\basics
+
src\beast\modules\beast_asio
+
+ src\beast\modules\beast_asio
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
src\beast\modules\beast_asio\http
+
+ src\beast\modules\beast_asio\http
+
+
+ src\beast\modules\beast_asio\protocol
+
src\beast\modules\beast_asio\protocol
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\protocol
+
+
+ src\beast\modules\beast_asio\system
+
src\beast\modules\beast_asio\system
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
+
+ src\beast\modules\beast_asio\tests
+
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
+
+ src\beast\modules\beast_asio\tests
+
+
+ src\beast\modules\beast_asio\tests
+
src\beast\modules\beast_asio\tests
src\beast\modules\beast_core
+
+ src\beast\modules\beast_core
+
+
+ src\beast\modules\beast_core\containers
+
+
+ src\beast\modules\beast_core\containers
+
+
+ src\beast\modules\beast_core\containers
+
+
+ src\beast\modules\beast_core\containers
+
+
+ src\beast\modules\beast_core\containers
+
src\beast\modules\beast_core\diagnostic
+
+ src\beast\modules\beast_core\diagnostic
+
+
+ src\beast\modules\beast_core\diagnostic
+
src\beast\modules\beast_core\diagnostic
+
+ src\beast\modules\beast_core\diagnostic
+
src\beast\modules\beast_core\diagnostic
+
+ src\beast\modules\beast_core\diagnostic
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\files
+
+ src\beast\modules\beast_core\files
+
src\beast\modules\beast_core\logging
+
+ src\beast\modules\beast_core\logging
+
+
+ src\beast\modules\beast_core\maths
+
src\beast\modules\beast_core\maths
+
+ src\beast\modules\beast_core\maths
+
+
+ src\beast\modules\beast_core\maths
+
src\beast\modules\beast_core\memory
+
+ src\beast\modules\beast_core\memory
+
+
+ src\beast\modules\beast_core\memory
+
src\beast\modules\beast_core\misc
+
+ src\beast\modules\beast_core\misc
+
+
+ src\beast\modules\beast_core\misc
+
src\beast\modules\beast_core\native
@@ -1065,54 +1770,177 @@
src\beast\modules\beast_core\streams
+
+ src\beast\modules\beast_core\streams
+
+
+ src\beast\modules\beast_core\streams
+
src\beast\modules\beast_core\streams
+
+ src\beast\modules\beast_core\streams
+
src\beast\modules\beast_core\streams
+
+ src\beast\modules\beast_core\streams
+
src\beast\modules\beast_core\streams
+
+ src\beast\modules\beast_core\streams
+
+
+ src\beast\modules\beast_core\system
+
+
+ src\beast\modules\beast_core\system
+
src\beast\modules\beast_core\system
+
+ src\beast\modules\beast_core\system
+
+
+ src\beast\modules\beast_core\system
+
+
+ src\beast\modules\beast_core\system
+
+
+ src\beast\modules\beast_core\system
+
src\beast\modules\beast_core\system
+
+ src\beast\modules\beast_core\system
+
src\beast\modules\beast_core\text
+
+ src\beast\modules\beast_core\text
+
src\beast\modules\beast_core\text
+
+ src\beast\modules\beast_core\text
+
src\beast\modules\beast_core\text
+
+ src\beast\modules\beast_core\text
+
src\beast\modules\beast_core\thread
+
+ src\beast\modules\beast_core\thread
+
+
+ src\beast\modules\beast_core\thread
+
src\beast\modules\beast_core\thread
+
+ src\beast\modules\beast_core\thread
+
+
+ src\beast\modules\beast_core\threads
+
+
+ src\beast\modules\beast_core\threads
+
+
+ src\beast\modules\beast_core\threads
+
+
+ src\beast\modules\beast_core\threads
+
src\beast\modules\beast_core\time
+
+ src\beast\modules\beast_core\time
+
src\beast\modules\beast_core\time
-
- src\beast\modules\beast_sqlite
+
+ src\beast\modules\beast_core\time
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
+
+
+ src\beast\modules\beast_sqdb\api
src\beast\modules\beast_sqdb
+
+ src\beast\modules\beast_sqdb
+
src\beast\modules\beast_sqdb\detail
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
src\beast\modules\beast_sqdb\detail
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
+
+ src\beast\modules\beast_sqdb\detail
+
src\beast\modules\beast_sqdb\source
@@ -1149,855 +1977,873 @@
src\beast\modules\beast_sqdb\source
-
- src\beast\beast\asio
+
+ src\beast\modules\beast_sqlite
-
- src\beast\beast\asio
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast\config
-
-
- src\beast\beast
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\container\impl
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\container
-
-
- src\beast\beast\crypto
-
-
- src\beast\beast\container
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container\tests
-
-
- src\beast\beast\crypto
-
-
- src\beast\beast\crypto\impl\sha2
-
-
- src\beast\beast\crypto
-
-
- src\beast\modules\beast_core\maths
-
-
- src\beast\beast\crypto
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\http
-
-
- src\beast\beast\http\impl\http-parser
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\http
-
-
- src\beast\beast\http
-
-
- src\beast\beast\http
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\intrusive
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\net
-
-
- src\beast\beast\net\detail
-
-
- src\beast\beast\net
-
-
- src\beast\beast\net
-
-
- src\beast\beast\net
-
-
- src\beast\beast\streams
-
-
- src\beast\beast\strings
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\modules\beast_core\time
-
-
- src\beast\beast\smart_ptr
-
-
- src\beast\beast\smart_ptr
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\beast
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\unit_test
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\modules\beast_core\memory
-
-
- src\beast\beast\utility
-
-
- src\beast\modules\beast_core\logging
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\http\impl\http-parser
-
-
- src\beast\modules\beast_asio\async
-
-
- src\beast\modules\beast_asio\basics
-
-
- src\beast\modules\beast_asio\basics
-
-
- src\beast\modules\beast_asio\basics
-
-
- src\beast\modules\beast_asio\basics
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\http
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\protocol
-
-
- src\beast\modules\beast_asio\system
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\modules\beast_asio\tests
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\config
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\beast
-
-
- src\beast\modules\beast_core\containers
-
-
- src\beast\modules\beast_core\containers
-
-
- src\beast\modules\beast_core\containers
-
-
- src\beast\modules\beast_core\containers
-
-
- src\beast\modules\beast_core\containers
-
-
- src\beast\modules\beast_core\diagnostic
-
-
- src\beast\modules\beast_core\diagnostic
-
-
- src\beast\modules\beast_core\diagnostic
-
-
- src\beast\modules\beast_core\diagnostic
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\files
-
-
- src\beast\modules\beast_core\maths
-
-
- src\beast\modules\beast_core\maths
-
-
- src\beast\modules\beast_core\memory
-
-
- src\beast\modules\beast_core\misc
-
-
- src\beast\modules\beast_core\misc
-
-
- src\beast\modules\beast_core\streams
-
-
- src\beast\modules\beast_core\streams
-
-
- src\beast\modules\beast_core\streams
-
-
- src\beast\modules\beast_core\streams
-
-
- src\beast\modules\beast_core\streams
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\modules\beast_core\text
-
-
- src\beast\modules\beast_core\text
-
-
- src\beast\modules\beast_core\text
-
-
- src\beast\modules\beast_core\thread
-
-
- src\beast\modules\beast_core\thread
-
-
- src\beast\modules\beast_core\thread
-
-
- src\beast\modules\beast_core\threads
-
-
- src\beast\modules\beast_core\threads
-
-
- src\beast\modules\beast_core\threads
-
-
- src\beast\modules\beast_core\threads
-
-
- src\beast\modules\beast_core\time
-
-
- src\beast\modules\beast_sqlite\sqlite
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\api
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\modules\beast_sqdb\detail
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\chrono
-
-
- src\beast\beast\container\detail
-
-
- src\beast\beast\container\detail
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\cxx14
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\crypto\impl\sha2
-
-
- src\beast\beast\crypto
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\strings
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\net
-
-
- src\beast\beast\streams
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads\detail
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\intrusive
-
-
- src\beast\beast\container
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\streams
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\boost
-
-
- src\beast\beast\asio
-
-
- src\beast\beast\smart_ptr
-
-
- src\beast\beast\smart_ptr
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\beast\threads
-
-
- src\beast\modules\beast_core\system
-
-
- src\beast\beast\container
-
-
- src\beast\beast\container\detail
-
-
- src\beast\beast\container\detail
-
-
- src\beast\beast\insight
-
-
- src\beast\beast\threads\detail
-
-
- src\ripple\beast
-
src\beast\modules\beast_sqlite
-
- src\protobuf\vsprojects
-
src\beast\modules\beast_sqlite\sqlite
-
+
+ src\beast\modules\beast_sqlite\sqlite
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\db
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\hyperleveldb
+
+
+ src\hyperleveldb\port
+
+
+ src\hyperleveldb\port
+
+
+ src\hyperleveldb\port
+
+
+ src\hyperleveldb\port
+
+
+ src\hyperleveldb\port
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\table
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\hyperleveldb\util
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\db
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\include\leveldb
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\port
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\table
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\leveldb\util
+
+
+ src\protobuf\src\google\protobuf\compiler
+
+
+ src\protobuf\src\google\protobuf\compiler
+
+
+ src\protobuf\src\google\protobuf\compiler
+
+
+ src\protobuf\src\google\protobuf\compiler
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf\io
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\stubs
+
+
+ src\protobuf\src\google\protobuf\testing
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\src\google\protobuf
+
+
+ src\protobuf\vsprojects
+
+
+ src\ripple\algorithm\api
+
+
+ src\ripple\algorithm\api
+
+
+ src\ripple\beast
+
+
+ src\ripple\beast
+
+
src\ripple\common
-
-
- src\ripple\common\impl
-
-
- src\ripple\common\impl
-
+
src\ripple\common
src\ripple\common
-
- src\ripple\common\impl
-
-
- src\ripple\common\impl
-
-
- src\ripple\common\impl
-
-
- src\ripple\common\impl
-
-
+
src\ripple\common
src\ripple\common
-
- src\ripple\common
-
src\ripple\common
src\ripple\common
-
- src\ripple\http
+
+ src\ripple\common
+
+
+ src\ripple\common\impl
-
- src\ripple_data\protocol
+
+ src\ripple\common\impl
+
+
+ src\ripple\common\impl
-
- src\ripple_core\nodestore\api
+
+ src\ripple\common\impl
+
+
+ src\ripple\common\impl
+
+
+ src\ripple\common\impl
+
+
+ src\ripple\common
-
- src\ripple_core\nodestore\api
+
+ src\ripple\common
+
+
+ src\ripple\common
-
- src\ripple\types\api
+
+ src\ripple\common\tests
+
+
+ src\ripple\http\api
-
- src\ripple_core\nodestore\api
+
+ src\ripple\http\api
-
- src\ripple_net
+
+ src\ripple\http\api
-
- src\ripple\http\impl
+
+ src\ripple\http\api
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_basics
-
-
- src\ripple_core
-
-
- src\ripple_data\protocol
+
+ src\ripple\http\api
src\ripple\http\impl
+
+ src\ripple\http\impl
+
src\ripple\http\impl
-
- src\ripple\http\impl
-
src\ripple\http\impl
@@ -2007,39 +2853,18 @@
src\ripple\http\impl
-
+
src\ripple\http\impl
-
- src\ripple_data\protocol
+
+ src\ripple\http\impl
src\ripple\http
-
- src\ripple_data\protocol
-
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_data
-
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\utility
-
+
+ src\ripple\http
+
src\ripple\json\api
@@ -2061,6 +2886,786 @@
src\ripple\json\api
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json\impl
+
+
+ src\ripple\json
+
+
+ src\ripple\json
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\api
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder\impl
+
+
+ src\ripple\peerfinder
+
+
+ src\ripple\peerfinder
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\peerfinder\sim
+
+
+ src\ripple\proto
+
+
+ src\ripple\proto
+
+
+ src\ripple\proto
+
+
+ src\ripple\radmap\api
+
+
+ src\ripple\radmap\api
+
+
+ src\ripple\radmap\impl
+
+
+ src\ripple\radmap
+
+
+ src\ripple\radmap
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\api
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource\impl
+
+
+ src\ripple\resource
+
+
+ src\ripple\resource
+
+
+ src\ripple\rocksdb
+
+
+ src\ripple\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\db
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\include\rocksdb
+
+
+ src\ripple\rocksdb\rocksdb\port
+
+
+ src\ripple\rocksdb\rocksdb\port
+
+
+ src\ripple\rocksdb\rocksdb\port
+
+
+ src\ripple\rocksdb\rocksdb\port
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\table
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\rocksdb\rocksdb\util
+
+
+ src\ripple\sitefiles\api
+
+
+ src\ripple\sitefiles\api
+
+
+ src\ripple\sitefiles\api
+
+
+ src\ripple\sitefiles\api
+
+
+ src\ripple\sitefiles\impl
+
+
+ src\ripple\sitefiles\impl
+
+
+ src\ripple\sitefiles\impl
+
+
+ src\ripple\sitefiles\impl
+
+
+ src\ripple\sitefiles\impl
+
+
+ src\ripple\sitefiles
+
+
+ src\ripple\sitefiles
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\api
+
+
+ src\ripple\sslutil\impl
+
+
+ src\ripple\sslutil\impl
+
+
+ src\ripple\sslutil\impl
+
+
+ src\ripple\sslutil\impl
+
+
+ src\ripple\sslutil
+
+
+ src\ripple\sslutil
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\api
+
+
+ src\ripple\testoverlay\impl
+
+
+ src\ripple\testoverlay
+
+
+ src\ripple\testoverlay
+
src\ripple\types\api
@@ -2106,769 +3711,85 @@
src\ripple\types\api
-
- src\ripple_websocket\autosocket
-
-
- src\ripple\resource
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\basics
+
+ src\ripple\types\api
src\ripple\types\api
-
- src\ripple_net\rpc
-
-
- src\ripple\types\api
-
-
- src\ripple\types\api
-
src\ripple\types\api
src\ripple\types\api
-
- src\ripple_core\nodestore\api
+
+ src\ripple\types\api
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_core\nodestore\api
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\rpc
-
-
- src\ripple\http\api
-
-
- src\ripple\http\api
-
-
- src\ripple\http\api
-
-
- src\ripple\http\api
-
-
- src\ripple\http\api
-
-
- src\ripple\json
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\ripple\resource\api
-
-
- src\beast\beast
+
+ src\ripple\types\api
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
+
+ src\ripple\types\impl
+
src\ripple\types
-
- src\ripple_basics\containers
-
-
- src\ripple_basics\containers
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\log
-
-
- src\ripple_basics\system
-
-
- src\ripple_basics\types
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\nodestore
-
-
- src\ripple\sslutil\api
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple\common
-
-
- src\ripple\json\impl
-
-
- src\ripple\json
-
-
- src\ripple\json\impl
-
-
- src\ripple\peerfinder
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\json\impl
-
-
- src\ripple\sitefiles\api
-
-
- src\ripple\sitefiles\api
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\algorithm\api
-
-
- src\ripple\peerfinder\api
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\sitefiles\api
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\sitefiles\api
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\sim
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\api
-
-
- src\ripple\peerfinder\api
-
-
- src\beast\beast\utility
-
-
- src\beast\beast\container
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\sitefiles
-
-
- src\ripple\peerfinder\api
-
-
- src\ripple\peerfinder\api
-
-
- src\ripple\peerfinder\api
-
-
- src\ripple\proto
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
+
+ src\ripple\types
-
- src\ripple\peerfinder\impl
+
+ src\ripple\validators\api
-
- src\ripple\peerfinder\impl
-
-
- src\ripple\peerfinder\impl
-
-
- src\protobuf\src\google\protobuf\compiler
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\compiler
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\ripple\resource\impl
-
-
- src\ripple\resource\impl
-
-
- src\ripple\radmap\impl
-
-
- src\ripple\resource\impl
-
-
- src\ripple\common
-
-
- src\ripple\resource
-
-
- src\ripple\resource\impl
-
-
- src\ripple\resource\impl
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\ripple\resource\impl
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\ripple\resource\impl
-
-
- src\ripple\resource\impl
-
-
- src\ripple\resource\impl
-
-
- src\ripple\resource\impl
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\compiler
-
-
- src\protobuf\src\google\protobuf\compiler
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\io
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\testing
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- src\protobuf\src\google\protobuf\stubs
-
-
- build\proto
-
-
- src\ripple\proto
-
-
- src\ripple\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\resource\impl
-
-
- build\proto
-
-
- src\ripple\proto
-
-
- src\ripple\radmap
-
-
- src\ripple\resource\impl
+
+ src\ripple\validators\api
-
- src\ripple\algorithm\api
+
+ src\ripple\validators\api
src\ripple\validators\impl
-
- src\ripple\validators\impl
-
-
- src\ripple\validators\impl
-
src\ripple\validators\impl
+
+ src\ripple\validators\impl
+
src\ripple\validators\impl
-
- src\ripple\validators\impl
-
src\ripple\validators\impl
+
+ src\ripple\validators\impl
+
src\ripple\validators\impl
-
+
src\ripple\validators\impl
@@ -2880,549 +3801,18 @@
src\ripple\validators\impl
-
+
src\ripple\validators\impl
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\port
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\include\rocksdb
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\port
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\port
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\table
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\ripple\rocksdb\rocksdb\port
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\util
-
-
- src\ripple\rocksdb\rocksdb\db
-
-
- src\snappy\snappy
-
-
- src\snappy\config
-
-
- src\ripple\sitefiles
-
-
- src\ripple\sslutil
-
-
- src\ripple\testoverlay\impl
-
-
- src\ripple\sitefiles\impl
-
-
- src\ripple\sitefiles\impl
-
-
- src\ripple\sitefiles\impl
-
-
- src\ripple\sitefiles\impl
-
-
- src\ripple\sitefiles\impl
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\sslutil\impl
-
-
- src\ripple\sslutil\impl
-
-
- src\ripple\sslutil\impl
-
-
- src\ripple\sslutil\impl
-
-
- src\ripple\sslutil\api
-
-
- src\ripple\sslutil
-
-
- src\ripple\sslutil\api
-
-
- src\ripple\sslutil\api
-
-
- src\ripple\sslutil\api
-
-
- src\ripple\sslutil\api
-
-
- src\ripple\testoverlay
-
-
- src\ripple\testoverlay
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\common\tests
-
-
- src\ripple\types\impl
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\testoverlay\api
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types\impl
-
-
- src\ripple\types
-
-
- src\ripple\validators
-
-
- src\ripple\validators\impl
-
-
+
src\ripple\validators\impl
src\ripple\validators\impl
+
+ src\ripple\validators\impl
+
src\ripple\validators\impl
@@ -3432,159 +3822,690 @@
src\ripple\validators\impl
-
- src\ripple\validators
-
-
- src\ripple\validators\api
+
+ src\ripple\validators\impl
src\ripple\validators\impl
-
- src\ripple\validators\api
-
src\ripple\validators\impl
-
- src\ripple\validators\api
+
+ src\ripple\validators
-
- src\ripple_app
+
+ src\ripple\validators
-
- src\ripple_app
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\beast\beast\asio
+
+ src\ripple_app\book
-
- src\ripple_rpc
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book
+
+
+ src\ripple_app\book\impl
+
+
+ src\ripple_app\book\impl
+
+
+ src\ripple_app\book\impl
+
+
+ src\ripple_app\book\impl
+
+
+ src\ripple_app\book\tests
+
+
+ src\ripple_app\book\tests
+
+
+ src\ripple_app\consensus
+
+
+ src\ripple_app\consensus
+
+
+ src\ripple_app\consensus
+
+
+ src\ripple_app\consensus
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\contracts
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\data
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
src\ripple_app\ledger
-
- src\ripple_app\main
-
-
- src\ripple_app\main
-
-
- src\ripple_app\main
-
-
- src\ripple\common
+
+ src\ripple_app\ledger
-
- src\ripple_websocket
-
-
- src\ripple_app\main
+
+ src\ripple_app\ledger
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
+
+ src\ripple_app\ledger
+
src\ripple_app\main
+
+ src\ripple_app\main
+
src\ripple_app\main
src\ripple_app\main
+
+ src\ripple_app\main
+
src\ripple_app\main
+
+ src\ripple_app\main
+
src\ripple_app\main
-
- src\ripple_app\main
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\consensus
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\ledger
-
-
- src\ripple_basics\utility
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\main
-
src\ripple_app\main
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
+
+ src\ripple_app\main
+
src\ripple_app\main
-
- src\ripple_app\misc
+
+ src\ripple_app\main
-
- src\ripple_app\node
-
-
- src\ripple_app\rpc
-
-
+
src\ripple_app\misc
-
- src\ripple_app\paths
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
src\ripple_app\misc
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
src\ripple_app\misc
-
- src\ripple_app\rpc
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
-
- src\ripple_app\rpc
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\misc
+
+
+ src\ripple_app\node
src\ripple_app\node
-
- src\ripple_app\rpc
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\paths
+
+
+ src\ripple_app\peers
+
+
+ src\ripple_app\peers
+
+
+ src\ripple_app\peers
+
+
+ src\ripple_app\peers
+
+
+ src\ripple_app\peers
src\ripple_app
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app
+
+
+ src\ripple_app\rpc
+
+
+ src\ripple_app\rpc
+
+
+ src\ripple_app\rpc
+
+
+ src\ripple_app\rpc
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\shamap
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\transactors
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
+
+ src\ripple_app\tx
+
src\ripple_app\tx
@@ -3615,6 +4536,534 @@
src\ripple_app\websocket
+
+ src\ripple_basics\containers
+
+
+ src\ripple_basics\containers
+
+
+ src\ripple_basics\containers
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics\log
+
+
+ src\ripple_basics
+
+
+ src\ripple_basics
+
+
+ src\ripple_basics\system
+
+
+ src\ripple_basics\system
+
+
+ src\ripple_basics\system
+
+
+ src\ripple_basics\types
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_basics\utility
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\functional
+
+
+ src\ripple_core\nodestore
+
+
+ src\ripple_core\nodestore
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\api
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\backend
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\impl
+
+
+ src\ripple_core\nodestore\tests
+
+
+ src\ripple_core\nodestore\tests
+
+
+ src\ripple_core\nodestore\tests
+
+
+ src\ripple_core\nodestore\tests
+
+
+ src\ripple_core\nodestore\tests
+
+
+ src\ripple_core
+
+
+ src\ripple_core
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\crypto
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data\protocol
+
+
+ src\ripple_data
+
+
+ src\ripple_data
+
+
+ src\ripple_data\utility
+
+
+ src\ripple_hyperleveldb
+
+
+ src\ripple_hyperleveldb
+
+
+ src\ripple_leveldb
+
+
+ src\ripple_leveldb
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics
+
+
+ src\ripple_net\basics\impl
+
+
+ src\ripple_net
+
+
+ src\ripple_net
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_net\rpc
+
+
+ src\ripple_overlay\api
+
+
+ src\ripple_overlay\api
+
+
+ src\ripple_overlay\api
+
+
+ src\ripple_overlay\api
+
+
+ src\ripple_overlay\api
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay\impl
+
+
+ src\ripple_overlay
+
src\ripple_rpc\api
@@ -3624,302 +5073,8 @@
src\ripple_rpc\api
-
- src\websocket\src
-
-
- src\websocket\src\logger
-
-
- src\websocket\src\sockets
-
-
- src\websocket\src\sockets
-
-
- src\websocket\src
-
-
- src\ripple_overlay\api
-
-
- src\ripple_app\main
-
-
- src\beast\beast\streams
-
-
- src\beast\beast
-
-
- src\ripple_basics\system
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\consensus
-
-
- src\ripple_app\consensus
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\data
-
-
- src\ripple_app\data
-
-
- src\ripple_app\data
-
-
- src\ripple_app\data
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\main
-
-
- src\ripple_app\main
-
-
- src\ripple_app\main
-
-
- src\ripple_app\main
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\peers
-
-
- src\ripple_app\peers
-
-
- src\ripple_app\peers
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\impl
-
-
- src\websocket\src
-
-
- src\ripple_overlay\api
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\unit_test
-
-
- src\beast\beast\unit_test
-
-
- src\ripple_app\main
-
-
- src\ripple_app\book
-
-
- src\ripple_overlay\api
-
-
- src\ripple\radmap
+
+ src\ripple_rpc\api
src\ripple_rpc\handlers
@@ -4029,6 +5184,9 @@
src\ripple_rpc\handlers
+
+ src\ripple_rpc\handlers
+
src\ripple_rpc\handlers
@@ -4038,9 +5196,6 @@
src\ripple_rpc\handlers
-
- src\ripple_rpc\handlers
-
src\ripple_rpc\handlers
@@ -4101,1316 +5256,215 @@
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
+
+ src\ripple_rpc\impl
+
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
src\ripple_rpc\impl
+
+ src\ripple_rpc\impl
+
+
+ src\ripple_rpc
+
+
+ src\ripple_rpc
+
+
+ src\ripple_websocket\autosocket
+
+
+ src\ripple_websocket\autosocket
+
+
+ src\ripple_websocket\autosocket
+
+
+ src\ripple_websocket
+
+
+ src\ripple_websocket
+
+
+ src\snappy\config
+
+
+ src\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\snappy\snappy
+
+
+ src\websocket\src\base64
+
+
+ src\websocket\src\base64
+
+
+ src\websocket\src
+
src\websocket\src
-
- src\beast\beast\streams
-
-
- src\ripple\radmap\api
-
-
- src\ripple_overlay\api
-
-
- src\ripple\radmap\api
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc\api
-
-
- src\websocket\src\http
-
-
- src\websocket\src\messages
-
-
- src\websocket\src\messages
-
-
- src\websocket\src\processors
-
-
- src\websocket\src\roles
+
+ src\websocket\src
src\websocket\src\http
+
+ src\websocket\src\http
+
+
+ src\websocket\src\logger
+
+
+ src\websocket\src\md5
+
+
+ src\websocket\src\md5
+
+
+ src\websocket\src\md5
+
+
+ src\websocket\src\messages
+
+
+ src\websocket\src\messages
+
+
+ src\websocket\src\messages
+
+
+ src\websocket\src
+
+
+ src\websocket\src
+
+
+ src\websocket\src\processors
+
+
+ src\websocket\src\processors
+
+
+ src\websocket\src\processors
+
+
+ src\websocket\src\processors
+
+
+ src\websocket\src\processors
+
src\websocket\src\processors
src\websocket\src\processors
+
+ src\websocket\src\rng
+
+
+ src\websocket\src\roles
+
+
+ src\websocket\src\sha1
+
+
+ src\websocket\src\sha1
+
+
+ src\websocket\src
+
+
+ src\websocket\src\sockets
+
+
+ src\websocket\src\sockets
+
+
+ src\websocket\src
+
+
+ src\websocket\src
+
src\websocket\src\utf8_validator
src\websocket\src
-
- src\websocket\src\base64
-
-
- src\websocket\src\processors
-
-
- src\websocket\src\sha1
-
-
- src\websocket\src\processors
-
-
- src\websocket\src\rng
-
-
+
src\websocket\src
-
- src\websocket\src
-
-
- src\websocket\src
-
-
- src\websocket\src\md5
-
-
- src\websocket\src\md5
-
-
- src\ripple_app\consensus
-
-
- src\ripple_app
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\peers
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\shamap
-
-
- src\ripple_overlay\api
-
-
- src\ripple_app\data
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\data
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\data
-
-
- src\ripple_app\data
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\main
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\tx
-
-
- src\ripple_app
-
-
- src\ripple_app\book
-
-
- src\ripple_app\book
-
-
- src\ripple_app\book
-
-
- src\ripple_app\book
-
-
- src\ripple_app\book
-
-
- src\ripple_app\book
-
-
- src\ripple_app
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\shamap
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\contracts
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\book\tests
-
-
- src\ripple_app\book\tests
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\peers
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\tx
-
-
- src\ripple_app
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\tx
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\ledger
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\misc
-
-
- src\ripple_app\main
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_basics\containers
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_basics\system
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\utility
-
-
- src\ripple_basics\log
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics\log
-
-
- src\ripple_app\book
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics\log
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\paths
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics\utility
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics\log
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics\utility
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_app\transactors
-
-
- src\ripple_basics
-
-
- src\ripple_core
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_hyperleveldb
-
-
- src\ripple_leveldb
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\nodestore
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\tests
-
-
- src\ripple_core\nodestore\tests
-
-
- src\ripple_core\nodestore\tests
-
-
- src\ripple_core\nodestore\tests
-
-
- src\ripple_core\nodestore\tests
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\functional
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\backend
-
-
- src\leveldb\include\leveldb
-
-
- src\ripple_core\nodestore\backend
-
-
- src\leveldb\include\leveldb
-
-
- src\ripple_data
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\backend
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_core\nodestore\impl
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\crypto
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\beast\beast\cxx14
-
-
- src\ripple_data\protocol
-
-
- src\ripple_data\protocol
-
-
- src\ripple_hyperleveldb
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\port
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\port
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\hyperleveldb
-
-
- src\leveldb\db
-
-
- src\leveldb\port
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\table
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\hyperleveldb\util
-
-
- src\leveldb\util
-
-
- src\hyperleveldb\port
-
-
- src\hyperleveldb\port
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\hyperleveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\port
-
-
- src\leveldb\port
-
-
- src\leveldb\port
-
-
- src\hyperleveldb\port
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\util
-
-
- src\leveldb\port
-
-
- src\ripple_leveldb
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\port
-
-
- src\leveldb\port
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\include\leveldb
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\table
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\util
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\leveldb\db
-
-
- src\ripple_net\basics
-
-
- src\ripple_net
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\basics
-
-
- src\ripple_net\basics\impl
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\rpc
-
-
- src\ripple_net\rpc
-
-
- src\ripple_overlay
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_overlay\impl
-
-
- src\ripple_rpc\impl
-
-
- src\ripple_rpc
-
-
- src\ripple_rpc\impl
-
-
- src\snappy
-
-
- src\ripple_websocket
-
-
- src\ripple_rpc\impl
-
-
- src\websocket\src\base64
-
-
- src\websocket\src\messages
-
-
- src\websocket\src\md5
-
-
- src\websocket\src
-
-
- src\websocket\src
-
-
- src\websocket\src\processors
-
-
- src\websocket\src\processors
-
-
- src\websocket\src\sha1
-
-
- src\ripple_websocket\autosocket
-
-
- src\ripple_websocket\autosocket
-
-
- src\snappy\snappy
-
-
- src\snappy\snappy
-
-
- src\snappy\snappy
-
-
- src\snappy\snappy
-
-
- src\snappy\snappy
-
-
- src\snappy\snappy
-
diff --git a/src/ripple/types/api/RippleAssets.h b/src/ripple/types/api/RippleAssets.h
index 35f84e46d2..d6575d5937 100644
--- a/src/ripple/types/api/RippleAssets.h
+++ b/src/ripple/types/api/RippleAssets.h
@@ -20,6 +20,7 @@
#ifndef RIPPLE_TYPES_RIPPLEASSETS_H_INCLUDED
#define RIPPLE_TYPES_RIPPLEASSETS_H_INCLUDED
+#include
#include
#include
@@ -66,6 +67,9 @@ public:
: currency (currency_)
, issuer (issuer_)
{
+ // Either XRP and (currency == zero && issuer == zero) or some custom
+ // currency and (currency != 0 && issuer != 0)
+ assert (currency.isZero () == issuer.isZero ());
}
template
@@ -87,6 +91,7 @@ public:
bool is_xrp () const
{
+ assert (currency.isZero () == issuer.isZero ());
if (currency.isZero ())
return true;
return false;
diff --git a/src/ripple_app/book/Amount.h b/src/ripple_app/book/Amount.h
index 6976d72bb8..0c36287845 100644
--- a/src/ripple_app/book/Amount.h
+++ b/src/ripple_app/book/Amount.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -191,18 +191,14 @@ public:
if (sig == 0)
return os << "0";
- else if (sig < 0)
+
+ if (sig < 0)
os << "-";
-
if (m_integral)
return os << m_mantissa;
-
if (m_exponent != 0 && (m_exponent < -25 || m_exponent > -5))
return os << m_mantissa << "e" << m_exponent;
- //if (m_exponent > 0)
- // return os <<
-
return os;
}
};
diff --git a/src/ripple_app/book/Amounts.h b/src/ripple_app/book/Amounts.h
index d9a871342e..f8621bbb72 100644
--- a/src/ripple_app/book/Amounts.h
+++ b/src/ripple_app/book/Amounts.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -22,6 +22,8 @@
#include "Amount.h"
+#include "../../beast/beast/utility/noexcept.h"
+
namespace ripple {
namespace core {
diff --git a/src/ripple_app/book/BookTip.h b/src/ripple_app/book/BookTip.h
index 18dac3bb41..accec7457d 100644
--- a/src/ripple_app/book/BookTip.h
+++ b/src/ripple_app/book/BookTip.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -25,8 +25,7 @@
#include "../../beast/beast/utility/noexcept.h"
-#include
-#include
+#include
namespace ripple {
namespace core {
@@ -54,15 +53,7 @@ private:
public:
/** Create the iterator. */
- BookTip (LedgerView& view, BookRef book)
- : m_view (view)
- , m_valid (false)
- , m_book (Ledger::getBookBase (
- book.in.currency, book.in.issuer,
- book.out.currency, book.out.issuer))
- , m_end (Ledger::getQualityNext (m_book))
- {
- }
+ BookTip (LedgerView& view, BookRef book);
uint256 const&
dir() const noexcept
@@ -93,49 +84,7 @@ public:
@return `true` if there is a next offer
*/
bool
- step ()
- {
- if (m_valid)
- {
- if (m_entry)
- {
- view().offerDelete (m_index);
- m_entry = nullptr;
- }
- }
-
- for(;;)
- {
- // See if there's an entry at or worse than current quality.
- auto const page (
- view().getNextLedgerIndex (m_book, m_end));
-
- if (page.isZero())
- return false;
-
- unsigned int di (0);
- SLE::pointer dir;
- if (view().dirFirst (page, dir, di, m_index))
- {
- m_dir = dir->getIndex();
- m_entry = view().entryCache (ltOFFER, m_index);
- m_valid = true;
-
- // Next query should start before this directory
- m_book = page;
-
- // The quality immediately before the next quality
- --m_book;
-
- break;
- }
- // There should never be an empty directory but just in case,
- // we handle that case by advancing to the next directory.
- m_book = page;
- }
-
- return true;
- }
+ step ();
};
}
diff --git a/src/ripple_app/book/Offer.h b/src/ripple_app/book/Offer.h
index 62d59978d6..f779a70ca9 100644
--- a/src/ripple_app/book/Offer.h
+++ b/src/ripple_app/book/Offer.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -27,6 +27,8 @@
#include "../misc/SerializedLedger.h"
#include "../../ripple_data/protocol/FieldNames.h"
+#include "../../beast/beast/utility/noexcept.h"
+
#include
namespace ripple {
@@ -76,12 +78,23 @@ public:
Some or all of the out amount may be unfunded.
*/
Amounts const
- amount() const noexcept
+ amount() const
{
return Amounts (m_entry->getFieldAmount (sfTakerPays),
m_entry->getFieldAmount (sfTakerGets));
}
+ /** Returns `true` if no more funds can flow through this offer. */
+ bool
+ fully_consumed() const
+ {
+ if (m_entry->getFieldAmount (sfTakerPays) <= zero)
+ return true;
+ if (m_entry->getFieldAmount (sfTakerGets) <= zero)
+ return true;
+ return false;
+ }
+
/** Returns the ledger entry underlying the offer. */
// AVOID USING THIS
SLE::pointer
diff --git a/src/ripple_app/book/OfferStream.h b/src/ripple_app/book/OfferStream.h
index 98a1a19dee..6140328604 100644
--- a/src/ripple_app/book/OfferStream.h
+++ b/src/ripple_app/book/OfferStream.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -27,8 +27,7 @@
#include "../../beast/beast/utility/noexcept.h"
-#include
-#include
+#include
namespace ripple {
namespace core {
@@ -49,12 +48,10 @@ namespace core {
When an offer is removed, it is removed from both views. This grooms the
order book regardless of whether or not the transaction is successful.
-
- TODO: Remove offers belonging to the taker
*/
class OfferStream
{
-protected:
+private:
beast::Journal m_journal;
std::reference_wrapper m_view;
std::reference_wrapper m_view_cancel;
@@ -63,90 +60,37 @@ protected:
BookTip m_tip;
Offer m_offer;
- // Handle the case where a directory item with no corresponding ledger entry
- // is found. This shouldn't happen but if it does we clean it up.
void
- erase (LedgerView& view)
- {
- // VFALCO NOTE
- //
- // This should be using LedgerView::dirDelete, which will
- // correctly remove the directory if its the last entry.
- // Unfortunately this is a protocol breaking change.
-
- auto p (view.entryCache (ltDIR_NODE, m_tip.dir()));
-
- if (p == nullptr)
- {
- if (m_journal.error) m_journal.error <<
- "Missing directory " << m_tip.dir() <<
- " for offer " << m_tip.index();
- return;
- }
-
- auto v (p->getFieldV256 (sfIndexes));
- auto& x (v.peekValue());
- auto it (std::find (x.begin(), x.end(), m_tip.index()));
-
- if (it == x.end())
- {
- if (m_journal.error) m_journal.error <<
- "Missing offer " << m_tip.index() <<
- " for directory " << m_tip.dir();
- return;
- }
-
- x.erase (it);
- p->setFieldV256 (sfIndexes, v);
- view.entryModify (p);
-
- if (m_journal.trace) m_journal.trace <<
- "Missing offer " << m_tip.index() <<
- " removed from directory " << m_tip.dir();
- }
+ erase (LedgerView& view);
public:
OfferStream (LedgerView& view, LedgerView& view_cancel, BookRef book,
- Clock::time_point when, beast::Journal journal)
- : m_journal (journal)
- , m_view (view)
- , m_view_cancel (view_cancel)
- , m_book (book)
- , m_when (when)
- , m_tip (view, book)
- {
- }
+ Clock::time_point when, beast::Journal journal);
LedgerView&
- view() noexcept
+ view () noexcept
{
return m_view;
}
LedgerView&
- view_cancel() noexcept
+ view_cancel () noexcept
{
return m_view_cancel;
}
Book const&
- book() const noexcept
+ book () const noexcept
{
return m_book;
}
-uint256 const&
-dir() const noexcept
-{
- return m_tip.dir();
-}
-
/** Returns the offer at the tip of the order book.
Offers are always presented in decreasing quality.
Only valid if step() returned `true`.
*/
Offer const&
- tip() const
+ tip () const
{
return m_offer;
}
@@ -159,166 +103,22 @@ dir() const noexcept
@return `true` if there is a valid offer.
*/
bool
- step()
- {
- // Modifying the order or logic of these
- // operations causes a protocol breaking change.
+ step ();
- for(;;)
- {
- // BookTip::step deletes the current offer from the view before
- // advancing to the next (unless the ledger entry is missing).
- if (! m_tip.step())
- return false;
-
- SLE::pointer const& entry (m_tip.entry());
-
- // Remove if missing
- if (! entry)
- {
- erase (view());
- erase (view_cancel());
- continue;
- }
-
- // Remove if expired
- if (entry->isFieldPresent (sfExpiration) &&
- entry->getFieldU32 (sfExpiration) <= m_when)
- {
- view_cancel().offerDelete (entry->getIndex());
- if (m_journal.trace) m_journal.trace <<
- "Removing expired offer " << entry->getIndex();
- continue;
- }
-
- m_offer = Offer (entry, m_tip.quality());
-
- Amounts const amount (m_offer.amount());
-
- // Remove if either amount is zero
- if (amount.empty())
- {
- view_cancel().offerDelete (entry->getIndex());
- if (m_journal.warning) m_journal.warning <<
- "Removing bad offer " << entry->getIndex();
- m_offer = Offer{};
- continue;
- }
-
- // Calculate owner funds
- // VFALCO NOTE The calling code also checks the funds,
- // how expensive is looking up the funds twice?
- Amount const owner_funds (view().accountFunds (
- m_offer.account(), m_offer.amount().out));
-
- // Check for unfunded offer
- if (owner_funds <= zero)
- {
- // If the owner's balance in the pristine view is the same,
- // we haven't modified the balance and therefore the
- // offer is "found unfunded" versus "became unfunded"
- if (view_cancel().accountFunds (m_offer.account(),
- m_offer.amount().out) == owner_funds)
- {
- view_cancel().offerDelete (entry->getIndex());
- if (m_journal.trace) m_journal.trace <<
- "Removing unfunded offer " << entry->getIndex();
- }
- else
- {
- if (m_journal.trace) m_journal.trace <<
- "Removing became unfunded offer " << entry->getIndex();
- }
- m_offer = Offer{};
- continue;
- }
-
-#if 0
- // Remove if its our own offer
- //
- // VFALCO NOTE We might not want this for payments
- //
- if (m_account == owner)
- {
- view_cancel().offerDelete (entry->getIndex());
- if (m_journal.trace) m_journal.trace <<
- "Removing self offer " << entry->getIndex();
- continue;
- }
-#endif
-
- break;
- }
-
- return true;
- }
-
- /** Updates the offer to reflect remaining funds.
- The caller is responsible for following all the rounding rules.
- The offer will be considered fully consumed if either the in
- or the out amount is zero.
- @return `true` If the offer had no funds remaining.
+ /** Advance to the next valid offer that is not from the specified account.
+ This automatically removes:
+ - Offers with missing ledger entries
+ - Offers found unfunded
+ - Offers from the same account
+ - Expired offers
+ @return `true` if there is a valid offer.
*/
bool
- fill (Amounts const& remaining_funds)
- {
- // Erase the offer if it is fully consumed (in==0 || out==0)
- // This is the same as becoming unfunded
- return false;
- }
+ step_account (Account const& account);
};
-//------------------------------------------------------------------------------
-
-/**
- Does everything an OfferStream does, and:
- - remove offers that became unfunded (if path is used)
-*/
-#if 0
-class PaymentOfferStream : public OfferStream
-{
-public:
- PaymentOfferStream (LedgerView& view_base, BookRef book,
- Clock::time_point when, beast::Journal journal)
- : m_journal (journal)
- , m_view (view_base.duplicate())
- , m_view_apply (view_base.duplicate())
- , m_book (book)
- , m_when (when)
- {
- }
-};
-#endif
-
-//------------------------------------------------------------------------------
-
-/*
-TakerOfferStream
- Does everything a PaymentOfferStream does, and:
- - remove offers owned by the taker (if tx succeeds?)
-*/
-
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-
}
}
-/*
-OfferStream
- - remove offers with missing ledger entries (always)
- - remove expired offers (always)
- - remove offers found unfunded (always)
-
-PaymentOfferStream
- Does everything an OfferStream does, and:
- - remove offers that became unfunded (if path is used)
-
-TakerOfferStream
- Does everything a PaymentOfferStream does, and:
- - remove offers owned by the taker (if tx succeeds?)
-*/
-
#endif
diff --git a/src/ripple_app/book/Quality.h b/src/ripple_app/book/Quality.h
index d1d51fa9c2..cce99bd475 100644
--- a/src/ripple_app/book/Quality.h
+++ b/src/ripple_app/book/Quality.h
@@ -23,9 +23,7 @@
#include "Amount.h"
#include "Amounts.h"
-#include
#include
-#include
#include
namespace ripple {
@@ -49,57 +47,53 @@ private:
public:
Quality() = default;
+ /** Create a quality from the integer encoding of an Amount */
explicit
- Quality (std::uint64_t value)
- : m_value (value)
- {
- }
+ Quality (std::uint64_t value);
/** Create a quality from the ratio of two amounts. */
explicit
- Quality (Amounts const& amount)
- : m_value (Amount::getRate (amount.out, amount.in))
- {
- }
+ Quality (Amounts const& amount);
/** Advances to the next higher quality level. */
/** @{ */
Quality&
- operator++()
- {
- assert (m_value > 0);
- --m_value;
- return *this;
- }
+ operator++();
Quality
- operator++ (int)
- {
- Quality prev (*this);
- --*this;
- return prev;
- }
+ operator++ (int);
/** @} */
/** Advances to the next lower quality level. */
/** @{ */
Quality&
- operator--()
- {
- assert (m_value < std::numeric_limits::max());
- ++m_value;
- return *this;
- }
+ operator--();
Quality
- operator-- (int)
- {
- Quality prev (*this);
- ++*this;
- return prev;
- }
+ operator-- (int);
/** @} */
+ /** Returns the quality as Amount. */
+ Amount
+ rate () const
+ {
+ return Amount::setRate (m_value);
+ }
+
+ /** Returns the scaled amount with in capped.
+ Math is avoided if the result is exact. The output is clamped
+ to prevent money creation.
+ */
+ Amounts
+ ceil_in (Amounts const& amount, Amount const& limit) const;
+
+ /** Returns the scaled amount with out capped.
+ Math is avoided if the result is exact. The input is clamped
+ to prevent money creation.
+ */
+ Amounts
+ ceil_out (Amounts const& amount, Amount const& limit) const;
+
/** Returns `true` if lhs is lower quality than `rhs`.
Lower quality means the taker receives a worse deal.
Higher quality is better for the taker.
@@ -118,6 +112,13 @@ public:
return lhs.m_value == rhs.m_value;
}
+ friend
+ bool
+ operator!= (Quality const& lhs, Quality const& rhs) noexcept
+ {
+ return ! (lhs == rhs);
+ }
+
friend
std::ostream&
operator<< (std::ostream& os, Quality const& quality)
@@ -125,72 +126,14 @@ public:
os << quality.m_value;
return os;
}
-
- /** Returns the quality as Amount. */
- Amount
- rate() const
- {
- return Amount::setRate (m_value);
- }
-
- /** Returns the scaled amount with in capped.
- Math is avoided if the result is exact. The output is clamped
- to prevent money creation.
- */
- Amounts
- ceil_in (Amounts const& amount, Amount const& limit) const
- {
- if (amount.in > limit)
- {
- // VFALCO TODO make mulRound avoid math when v2==one
-#if 0
- Amounts result (limit, Amount::mulRound (
- limit, rate(), amount.out, true));
-#else
- Amounts result (limit, Amount::divRound (
- limit, rate(), amount.out, true));
-#endif
- // Clamp out
- if (result.out > amount.out)
- result.out = amount.out;
- return result;
- }
-
- return amount;
- }
-
- /** Returns the scaled amount with out capped.
- Math is avoided if the result is exact. The input is clamped
- to prevent money creation.
- */
- Amounts
- ceil_out (Amounts const& amount, Amount const& limit) const
- {
- if (amount.out > limit)
- {
- // VFALCO TODO make divRound avoid math when v2==one
-#if 0
- Amounts result (Amount::divRound (
- limit, rate(), amount.in, true), limit);
-#else
- Amounts result (Amount::mulRound (
- limit, rate(), amount.in, true), limit);
-#endif
- // Clamp in
- if (result.in > amount.in)
- result.in = amount.in;
- return result;
- }
- return amount;
- }
};
-inline
-bool
-operator!= (Quality const& lhs, Quality const& rhs) noexcept
-{
- return ! (lhs == rhs);
-}
+/** Calculate the quality of a two-hop path given the two hops.
+ @param lhs The first leg of the path: input to intermediate.
+ @param rhs The second leg of the path: intermediate to output.
+*/
+Quality
+composed_quality (Quality const& lhs, Quality const& rhs);
}
}
diff --git a/src/ripple_app/book/Taker.h b/src/ripple_app/book/Taker.h
index 29cfe541ba..f4edf63c0d 100644
--- a/src/ripple_app/book/Taker.h
+++ b/src/ripple_app/book/Taker.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -22,11 +22,14 @@
#include "Amounts.h"
#include "Quality.h"
+#include "Offer.h"
#include "Types.h"
#include "../../beast/beast/streams/debug_ostream.h"
+#include "../../beast/beast/utility/noexcept.h"
-#include
+#include
+//#include
namespace ripple {
namespace core {
@@ -37,7 +40,7 @@ class Taker
public:
struct Options
{
- Options() = default;
+ Options() = delete;
explicit
Options (std::uint32_t tx_flags)
@@ -56,99 +59,54 @@ public:
private:
std::reference_wrapper m_view;
- Book m_book;
Account m_account;
Options m_options;
Quality m_quality;
Quality m_threshold;
- // The original in and out quantities
- Amounts m_amount;
+ // The original in and out quantities.
+ Amounts const m_amount;
- // Amount of input currency remaining.
- Amount m_in;
+ // The amounts still left over for us to try and take.
+ Amounts m_remain;
- // Amount of output currency we have received.
- Amount m_out;
+private:
+ Amounts
+ flow (Amounts amount, Offer const& offer, Account const& taker);
- // Returns the balance of the taker's input currency,
- Amount
- funds() const
- {
- return view().accountFunds (account(), m_in);
- }
+ TER
+ fill (Offer const& offer, Amounts const& amount);
+
+ TER
+ fill (Offer const& leg1, Amounts const& amount1,
+ Offer const& leg2, Amounts const& amount2);
public:
- Taker (LedgerView& view, BookRef const& book,
- Account const& account, Amounts const& amount,
- Options const& options)
- : m_view (view)
- , m_book (book)
- , m_account (account)
- , m_options (options)
- , m_quality (amount)
- , m_threshold (m_quality)
- , m_amount (amount)
- , m_in (amount.in)
- , m_out (amount.out.getCurrency(), amount.out.getIssuer())
- {
- // If this is a passive order (tfPassive), this prevents
- // offers at the same quality level from being consumed.
- if (m_options.passive)
- ++m_threshold;
- }
+ Taker (LedgerView& view, Account const& account,
+ Amounts const& amount, Options const& options);
LedgerView&
- view() const noexcept
+ view () const noexcept
{
return m_view;
}
- /** Returns the input and output asset pair identifier. */
- Book const&
- book() const noexcept
- {
- return m_book;
- }
+ /** Returns the amount remaining on the offer.
+ This is the amount at which the offer should be placed. It may either
+ be for the full amount when there were no crossing offers, or for zero
+ when the offer fully crossed, or any amount in between.
+ It is always at the original offer quality (m_quality)
+ */
+ Amounts
+ remaining_offer () const;
/** Returns the account identifier of the taker. */
Account const&
- account() const noexcept
+ account () const noexcept
{
return m_account;
}
- /** Returns `true` if order crossing should not continue.
- Order processing is stopped if the taker's order quantities have
- been reached, or if the taker has run out of input funds.
- */
- bool
- done() const noexcept
- {
- if (m_options.sell)
- {
- // With the sell option, we are finished when
- // we have consumed all the input currency.
- if (m_in <= zero)
- return true;
- }
- else if (m_out >= m_amount.out)
- {
- // With the buy option (!sell) we are finished when we
- // have received the desired amount of output currency.
- return true;
- }
-
- // We are finished if the taker is out of funds
- return funds() <= zero;
- }
-
- Quality
- threshold() const noexcept
- {
- return m_threshold;
- }
-
/** Returns `true` if the quality does not meet the taker's requirements. */
bool
reject (Quality const& quality) const noexcept
@@ -156,138 +114,26 @@ public:
return quality < m_threshold;
}
- /** Calcualtes the result of applying the taker's funds to the offer.
- @return The flow and flag indicating if the order was consumed.
+ /** Returns `true` if order crossing should not continue.
+ Order processing is stopped if the taker's order quantities have
+ been reached, or if the taker has run out of input funds.
*/
- std::pair
- fill (Offer const& offer) const
- {
- // Best flow the owner can get.
- // Start out assuming entire offer will flow.
- Amounts owner_amount (offer.amount());
+ bool
+ done () const;
- // Limit owner's output by available funds less fees
-
- // VFALCO TODO Rename accountFounds to make it clear that
- // it can return a clamped value.
- Amount const owner_funds (view().accountFunds (
- offer.account(), owner_amount.out));
-
- // Get fee rate paid by owner
- std::uint32_t const owner_charge_rate (view().rippleTransferRate (
- offer.account(), account(), offer.entry()->getFieldAmount (
- sfTakerGets).getIssuer()));
- Amount const owner_charge (Amount::saFromRate (owner_charge_rate));
-
- // VFALCO Make Amount::divide skip math if v2 == QUALITY_ONE
- if (owner_charge_rate == QUALITY_ONE)
- {
- // Skip some math when there's no fee
- owner_amount = offer.quality().ceil_out (
- owner_amount, owner_funds);
- }
- else
- {
- owner_amount = offer.quality().ceil_out (owner_amount,
- Amount::divide (owner_funds, owner_charge));
- }
-
- // Best flow the taker can get.
- // Start out assuming entire offer will flow.
- Amounts taker_amount (offer.amount());
-
- // Limit taker's input by available funds less fees
-
- Amount const taker_funds (view().accountFunds (account(), m_in));
-
- // Get fee rate paid by taker
- std::uint32_t const taker_charge_rate (view().rippleTransferRate (
- account(), offer.account(), offer.entry()->getFieldAmount (
- sfTakerPays).getIssuer()));
- Amount const taker_charge (Amount::saFromRate (taker_charge_rate));
-
- // VFALCO Make Amount::divide skip math if v2 == QUALITY_ONE
- if (taker_charge_rate == QUALITY_ONE)
- {
- // Skip some math when there's no fee
- taker_amount = offer.quality().ceil_in (
- taker_amount, taker_funds);
- }
- else
- {
- taker_amount = offer.quality().ceil_in (taker_amount,
- Amount::divide (taker_funds, taker_charge));
- }
-
- // Limit taker's input by options
- if (! m_options.sell)
- {
- assert (m_out < m_amount.out);
- taker_amount = offer.quality().ceil_out (
- taker_amount, m_amount.out - m_out);
- assert (taker_amount.in != zero);
- }
-
- // Calculate the amount that will flow through the offer
- // This does not include the fees.
- Amounts const flow ((owner_amount.in < taker_amount.in) ?
- owner_amount : taker_amount);
-
- bool const consumed (flow.out >= owner_amount.out);
-
- return std::make_pair (flow, consumed);
- }
-
- /** Process the result of fee and funds calculation on the offer.
-
- To protect the ledger, conditions which should never occur are
- checked. If the invariants are broken, the processing fails.
-
- If processing succeeds, the funds are distributed to the taker,
- owner, and issuers.
-
- @return `false` if processing failed (due to math errors).
+ /** Perform direct crossing through given offer.
+ @return tesSUCCESS on success, error code otherwise.
*/
TER
- process (Amounts const& flow, Offer const& offer)
- {
- TER result (tesSUCCESS);
+ cross (Offer const& offer);
- // VFALCO For the case of !sell, is it possible for the taker
- // to get a tiny bit more than he asked for?
- // DAVIDS Can you verify?
- assert (m_options.sell || flow.out <= m_amount.out);
-
- // Calculate remaining portion of offer
- Amounts const remain (
- offer.entry()->getFieldAmount (sfTakerPays) - flow.in,
- offer.entry()->getFieldAmount (sfTakerGets) - flow.out);
-
- offer.entry()->setFieldAmount (sfTakerPays, remain.in);
- offer.entry()->setFieldAmount (sfTakerGets, remain.out);
- view().entryModify (offer.entry());
-
- // Pay the taker
- result = view().accountSend (offer.account(), account(), flow.out);
-
- if (result == tesSUCCESS)
- {
- m_out += flow.out;
-
- // Pay the owner
- result = view().accountSend (account(), offer.account(), flow.in);
-
- if (result == tesSUCCESS)
- {
- m_in -= flow.in;
- }
- }
-
- return result;
- }
+ /** Perform bridged crossing through given offers.
+ @return tesSUCCESS on success, error code otherwise.
+ */
+ TER
+ cross (Offer const& leg1, Offer const& leg2);
};
-
inline
std::ostream&
operator<< (std::ostream& os, Taker const& taker)
@@ -298,59 +144,4 @@ operator<< (std::ostream& os, Taker const& taker)
}
}
-/*
-
-// This code calculates the fees but then we discovered
-// that LedgerEntrySet::accountSend does it for you.
-
-Amounts fees;
-
-// Calculate taker fee
-if (taker_charge_rate == QUALITY_ONE)
-{
- // No fee, skip math
- fees.in = Amount (flow.in.getCurrency(),
- flow.in.getIssuer());
-}
-else
-{
- // VFALCO TODO Check the units (versus 4-arg version of mulRound)
- Amount const in_plus_fees (Amount::mulRound (
- flow.in, taker_charge, true));
- // Make sure the taker has enough to pay the fee
- if (in_plus_fees > taker_funds)
- {
- // Not enough funds, stiff the issuer
- fees.in = taker_funds - flow.in;
- }
- else
- {
- fees.in = in_plus_fees - flow.in;
- }
-}
-
-// Calculate owner fee
-if (owner_charge_rate == QUALITY_ONE)
-{
- // No fee, skip math
- fees.out = Amount (flow.out.getCurrency(),
- flow.out.getIssuer());
-}
-else
-{
- Amount const out_plus_fees (Amount::mulRound (
- flow.out, owner_charge, true));
- // Make sure the owner has enough to pay the fee
- if (out_plus_fees > owner_funds)
- {
- // Not enough funds, stiff the issuer
- fees.out = owner_funds - flow.out;
- }
- else
- {
- fees.out = out_plus_fees - flow.out;
- }
-}
-*/
-
#endif
diff --git a/src/ripple_app/book/Types.h b/src/ripple_app/book/Types.h
index a6a85f68b9..a1b26721fb 100644
--- a/src/ripple_app/book/Types.h
+++ b/src/ripple_app/book/Types.h
@@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
/*
This file is part of rippled: https://github.com/ripple/rippled
- Copyright (c) 2012, 2013 Ripple Labs Inc.
+ Copyright (c) 2014 Ripple Labs Inc.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
@@ -22,7 +22,7 @@
#include "../ledger/LedgerEntrySet.h"
#include "../../ripple/types/api/RippleAssets.h"
-#include "../../ripple/types/api/UInt160.h"
+#include "../../ripple/types/api/base_uint.h"
#include
#include
diff --git a/src/ripple_app/book/impl/BookTip.cpp b/src/ripple_app/book/impl/BookTip.cpp
new file mode 100644
index 0000000000..61439d1320
--- /dev/null
+++ b/src/ripple_app/book/impl/BookTip.cpp
@@ -0,0 +1,81 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2014 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include "../BookTip.h"
+
+namespace ripple {
+namespace core {
+
+BookTip::BookTip (LedgerView& view, BookRef book)
+ : m_view (view)
+ , m_valid (false)
+ , m_book (Ledger::getBookBase (
+ book.in.currency, book.in.issuer,
+ book.out.currency, book.out.issuer))
+ , m_end (Ledger::getQualityNext (m_book))
+{
+}
+
+bool
+BookTip::step ()
+{
+ if (m_valid)
+ {
+ if (m_entry)
+ {
+ view().offerDelete (m_index);
+ m_entry = nullptr;
+ }
+ }
+
+ for(;;)
+ {
+ // See if there's an entry at or worse than current quality.
+ auto const page (
+ view().getNextLedgerIndex (m_book, m_end));
+
+ if (page.isZero())
+ return false;
+
+ unsigned int di (0);
+ SLE::pointer dir;
+ if (view().dirFirst (page, dir, di, m_index))
+ {
+ m_dir = dir->getIndex();
+ m_entry = view().entryCache (ltOFFER, m_index);
+ m_valid = true;
+
+ // Next query should start before this directory
+ m_book = page;
+
+ // The quality immediately before the next quality
+ --m_book;
+
+ break;
+ }
+ // There should never be an empty directory but just in case,
+ // we handle that case by advancing to the next directory.
+ m_book = page;
+ }
+
+ return true;
+}
+
+}
+}
diff --git a/src/ripple_app/book/impl/OfferStream.cpp b/src/ripple_app/book/impl/OfferStream.cpp
new file mode 100644
index 0000000000..49c45f9ffd
--- /dev/null
+++ b/src/ripple_app/book/impl/OfferStream.cpp
@@ -0,0 +1,170 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2012, 2013 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include "../OfferStream.h"
+
+namespace ripple {
+namespace core {
+
+OfferStream::OfferStream (LedgerView& view, LedgerView& view_cancel,
+ BookRef book, Clock::time_point when, beast::Journal journal)
+ : m_journal (journal)
+ , m_view (view)
+ , m_view_cancel (view_cancel)
+ , m_book (book)
+ , m_when (when)
+ , m_tip (view, book)
+{
+}
+
+// Handle the case where a directory item with no corresponding ledger entry
+// is found. This shouldn't happen but if it does we clean it up.
+void
+OfferStream::erase (LedgerView& view)
+{
+ // NIKB NOTE This should be using LedgerView::dirDelete, which would
+ // correctly remove the directory if its the last entry.
+ // Unfortunately this is a protocol breaking change.
+
+ auto p (view.entryCache (ltDIR_NODE, m_tip.dir()));
+
+ if (p == nullptr)
+ {
+ if (m_journal.error) m_journal.error <<
+ "Missing directory " << m_tip.dir() <<
+ " for offer " << m_tip.index();
+ return;
+ }
+
+ auto v (p->getFieldV256 (sfIndexes));
+ auto& x (v.peekValue());
+ auto it (std::find (x.begin(), x.end(), m_tip.index()));
+
+ if (it == x.end())
+ {
+ if (m_journal.error) m_journal.error <<
+ "Missing offer " << m_tip.index() <<
+ " for directory " << m_tip.dir();
+ return;
+ }
+
+ x.erase (it);
+ p->setFieldV256 (sfIndexes, v);
+ view.entryModify (p);
+
+ if (m_journal.trace) m_journal.trace <<
+ "Missing offer " << m_tip.index() <<
+ " removed from directory " << m_tip.dir();
+}
+
+bool
+OfferStream::step ()
+{
+ // Modifying the order or logic of these
+ // operations causes a protocol breaking change.
+
+ for(;;)
+ {
+ // BookTip::step deletes the current offer from the view before
+ // advancing to the next (unless the ledger entry is missing).
+ if (! m_tip.step())
+ return false;
+
+ SLE::pointer const& entry (m_tip.entry());
+
+ // Remove if missing
+ if (! entry)
+ {
+ erase (view());
+ erase (view_cancel());
+ continue;
+ }
+
+ // Remove if expired
+ if (entry->isFieldPresent (sfExpiration) &&
+ entry->getFieldU32 (sfExpiration) <= m_when)
+ {
+ view_cancel().offerDelete (entry->getIndex());
+ if (m_journal.trace) m_journal.trace <<
+ "Removing expired offer " << entry->getIndex();
+ continue;
+ }
+
+ m_offer = Offer (entry, m_tip.quality());
+
+ Amounts const amount (m_offer.amount());
+
+ // Remove if either amount is zero
+ if (amount.empty())
+ {
+ view_cancel().offerDelete (entry->getIndex());
+ if (m_journal.warning) m_journal.warning <<
+ "Removing bad offer " << entry->getIndex();
+ m_offer = Offer{};
+ continue;
+ }
+
+ // Calculate owner funds
+ // NIKB NOTE The calling code also checks the funds, how expensive is
+ // looking up the funds twice?
+ Amount const owner_funds (view().accountFunds (
+ m_offer.account(), m_offer.amount().out));
+
+ // Check for unfunded offer
+ if (owner_funds <= zero)
+ {
+ // If the owner's balance in the pristine view is the same,
+ // we haven't modified the balance and therefore the
+ // offer is "found unfunded" versus "became unfunded"
+ if (view_cancel().accountFunds (m_offer.account(),
+ m_offer.amount().out) == owner_funds)
+ {
+ view_cancel().offerDelete (entry->getIndex());
+ if (m_journal.trace) m_journal.trace <<
+ "Removing unfunded offer " << entry->getIndex();
+ }
+ else
+ {
+ if (m_journal.trace) m_journal.trace <<
+ "Removing became unfunded offer " << entry->getIndex();
+ }
+ m_offer = Offer{};
+ continue;
+ }
+
+ break;
+ }
+
+ return true;
+}
+
+bool
+OfferStream::step_account (Account const& account)
+{
+ while (step ())
+ {
+ if (tip ().account () != account)
+ return true;
+ }
+
+ return false;
+}
+
+}
+}
diff --git a/src/ripple_app/book/impl/Quality.cpp b/src/ripple_app/book/impl/Quality.cpp
new file mode 100644
index 0000000000..2b942d3870
--- /dev/null
+++ b/src/ripple_app/book/impl/Quality.cpp
@@ -0,0 +1,120 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2012, 2013 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include "../Quality.h"
+
+#include
+#include
+
+namespace ripple {
+namespace core {
+
+Quality::Quality (std::uint64_t value)
+ : m_value (value)
+{
+}
+
+Quality::Quality (Amounts const& amount)
+ : m_value (Amount::getRate (amount.out, amount.in))
+{
+}
+
+Quality&
+Quality::operator++()
+{
+ assert (m_value > 0);
+ --m_value;
+ return *this;
+}
+
+Quality
+Quality::operator++ (int)
+{
+ Quality prev (*this);
+ --*this;
+ return prev;
+}
+
+Quality&
+Quality::operator--()
+{
+ assert (m_value < std::numeric_limits::max());
+ ++m_value;
+ return *this;
+}
+
+Quality
+Quality::operator-- (int)
+{
+ Quality prev (*this);
+ ++*this;
+ return prev;
+}
+
+Amounts
+Quality::ceil_in (Amounts const& amount, Amount const& limit) const
+{
+ if (amount.in > limit)
+ {
+ Amounts result (limit, Amount::divRound (
+ limit, rate(), amount.out, true));
+ // Clamp out
+ if (result.out > amount.out)
+ result.out = amount.out;
+ return result;
+ }
+ return amount;
+}
+
+Amounts
+Quality::ceil_out (Amounts const& amount, Amount const& limit) const
+{
+ if (amount.out > limit)
+ {
+ Amounts result (Amount::mulRound (
+ limit, rate(), amount.in, true), limit);
+ // Clamp in
+ if (result.in > amount.in)
+ result.in = amount.in;
+ return result;
+ }
+ return amount;
+}
+
+Quality
+composed_quality (Quality const& lhs, Quality const& rhs)
+{
+ Amount const lhs_rate (lhs.rate ());
+ assert (lhs_rate != zero);
+
+ Amount const rhs_rate (rhs.rate ());
+ assert (rhs_rate != zero);
+
+ Amount const rate (Amount::mulRound (lhs_rate, rhs_rate, true));
+
+ std::uint64_t const stored_exponent (rate.getExponent () + 100);
+ std::uint64_t const stored_mantissa (rate.getMantissa ());
+
+ assert ((stored_exponent >= 0) && (stored_exponent <= 255));
+
+ return Quality ((stored_exponent << (64 - 8)) | stored_mantissa);
+}
+
+}
+}
diff --git a/src/ripple_app/book/impl/Taker.cpp b/src/ripple_app/book/impl/Taker.cpp
new file mode 100644
index 0000000000..d673ace681
--- /dev/null
+++ b/src/ripple_app/book/impl/Taker.cpp
@@ -0,0 +1,281 @@
+//------------------------------------------------------------------------------
+/*
+ This file is part of rippled: https://github.com/ripple/rippled
+ Copyright (c) 2014 Ripple Labs Inc.
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+//==============================================================================
+
+#include "../Taker.h"
+
+//#include
+
+namespace ripple {
+namespace core {
+
+Taker::Taker (LedgerView& view, Account const& account,
+ Amounts const& amount, Options const& options)
+ : m_view (view)
+ , m_account (account)
+ , m_options (options)
+ , m_quality (amount)
+ , m_threshold (m_quality)
+ , m_amount (amount)
+ , m_remain (amount)
+{
+ // If this is a passive order (tfPassive), this prevents
+ // offers at the same quality level from being consumed.
+ if (m_options.passive)
+ ++m_threshold;
+}
+
+Amounts
+Taker::remaining_offer () const
+{
+ // If the taker is done, then there's no offer to place.
+ if (done ())
+ {
+ return Amounts (
+ Amount (m_amount.in.getCurrency (), m_amount.in.getIssuer ()),
+ Amount (m_amount.out.getCurrency (), m_amount.out.getIssuer ()));
+ }
+
+ // Avoid math altogether if we didn't cross.
+ if (m_amount == m_remain)
+ return m_amount;
+
+ if (m_options.sell)
+ {
+ assert (m_remain.in > zero);
+
+ // We scale the output based on the remaining input:
+ return Amounts (m_remain.in, Amount::divRound (
+ m_remain.in, m_quality.rate (), m_remain.out, true));
+ }
+
+ assert (m_remain.out > zero);
+
+ // We scale the input based on the remaining output:
+ return Amounts (Amount::mulRound (
+ m_remain.out, m_quality.rate (), m_remain.in, true), m_remain.out);
+}
+
+// Calculate the amount particular user could get through an offer.
+// @param amount the maximum flow that is available to the taker.
+// @param offer the offer to flow through.
+// @param taker the person taking the offer.
+// @return the maximum amount that can flow through this offer.
+Amounts
+Taker::flow (Amounts amount, Offer const& offer, Account const& taker)
+{
+ // Limit taker's input by available funds less fees
+ Amount const taker_funds (view ().accountFunds (taker, amount.in));
+
+ // Get fee rate paid by taker
+ std::uint32_t const taker_charge_rate (view ().rippleTransferRate (
+ taker, offer.account (), amount.in.getIssuer()));
+
+ // Skip some math when there's no fee
+ if (taker_charge_rate == QUALITY_ONE)
+ {
+ amount = offer.quality ().ceil_in (amount, taker_funds);
+ }
+ else
+ {
+ Amount const taker_charge (Amount::saFromRate (taker_charge_rate));
+ amount = offer.quality ().ceil_in (amount,
+ Amount::divide (taker_funds, taker_charge));
+ }
+
+ // Best flow the owner can get.
+ // Start out assuming entire offer will flow.
+ Amounts owner_amount (amount);
+
+ // Limit owner's output by available funds less fees
+ Amount const owner_funds (view ().accountFunds (
+ offer.account (), owner_amount.out));
+
+ // Get fee rate paid by owner
+ std::uint32_t const owner_charge_rate (view ().rippleTransferRate (
+ offer.account (), taker, amount.out.getIssuer()));
+
+ if (owner_charge_rate == QUALITY_ONE)
+ {
+ // Skip some math when there's no fee
+ owner_amount = offer.quality ().ceil_out (owner_amount, owner_funds);
+ }
+ else
+ {
+ Amount const owner_charge (Amount::saFromRate (owner_charge_rate));
+ owner_amount = offer.quality ().ceil_out (owner_amount,
+ Amount::divide (owner_funds, owner_charge));
+ }
+
+ // Calculate the amount that will flow through the offer
+ // This does not include the fees.
+ return (owner_amount.in < amount.in)
+ ? owner_amount
+ : amount;
+}
+
+// Fill a direct offer.
+// @param offer the offer we are going to use.
+// @param amount the amount to flow through the offer.
+// @returns: tesSUCCESS if successful, or an error code otherwise.
+TER
+Taker::fill (Offer const& offer, Amounts const& amount)
+{
+ TER result (tesSUCCESS);
+
+ Amounts const remain (
+ offer.entry ()->getFieldAmount (sfTakerPays) - amount.in,
+ offer.entry ()->getFieldAmount (sfTakerGets) - amount.out);
+
+ offer.entry ()->setFieldAmount (sfTakerPays, remain.in);
+ offer.entry ()->setFieldAmount (sfTakerGets, remain.out);
+ view ().entryModify (offer.entry());
+
+ // Pay the taker, then the owner
+ result = view ().accountSend (offer.account(), account(), amount.out);
+
+ if (result == tesSUCCESS)
+ result = view ().accountSend (account(), offer.account(), amount.in);
+
+ return result;
+}
+
+// Fill a bridged offer.
+// @param leg1 the first leg we are going to use.
+// @param amount1 the amount to flow through the first leg of the offer.
+// @param leg2 the second leg we are going to use.
+// @param amount2 the amount to flow through the second leg of the offer.
+// @return tesSUCCESS if successful, or an error code otherwise.
+TER
+Taker::fill (
+ Offer const& leg1, Amounts const& amount1,
+ Offer const& leg2, Amounts const& amount2)
+{
+ assert (amount1.out == amount2.in);
+
+ TER result (tesSUCCESS);
+
+ Amounts const remain1 (
+ leg1.entry ()->getFieldAmount (sfTakerPays) - amount1.in,
+ leg1.entry ()->getFieldAmount (sfTakerGets) - amount1.out);
+
+ leg1.entry ()->setFieldAmount (sfTakerPays, remain1.in);
+ leg1.entry ()->setFieldAmount (sfTakerGets, remain1.out);
+ view ().entryModify (leg1.entry());
+
+ Amounts const remain2 (
+ leg2.entry ()->getFieldAmount (sfTakerPays) - amount2.in,
+ leg2.entry ()->getFieldAmount (sfTakerGets) - amount2.out);
+ view ().entryModify (leg2.entry ());
+
+ // Execute the payments in order:
+ // Taker pays Leg1 (amount1.in - A currency)
+ // Leg1 pays Leg2 (amount1.out == amount2.in, XRP)
+ // Leg2 pays Taker (amount2.out - B currency)
+
+ result = view ().accountSend (m_account, leg1.account (), amount1.in);
+
+ if (result == tesSUCCESS)
+ result = view ().accountSend (leg1.account (), leg2.account (), amount1.out);
+
+ if (result == tesSUCCESS)
+ result = view ().accountSend (leg2.account (), m_account, amount2.out);
+
+ return result;
+}
+
+bool
+Taker::done () const
+{
+ if (m_options.sell)
+ {
+ // With the sell option, we are finished when
+ // we have consumed all the input currency.
+ if (m_remain.in <= zero)
+ return true;
+ }
+ else if (m_remain.out <= zero)
+ {
+ // With the buy option (!sell) we are finished when we
+ // have received the desired amount of output currency.
+ return true;
+ }
+
+ // We are finished if the taker is out of funds
+ return view().accountFunds (account(), m_remain.in) <= zero;
+}
+
+TER
+Taker::cross (Offer const& offer)
+{
+ assert (!done ());
+ Amounts limit (offer.amount());
+ if (m_options.sell)
+ limit = offer.quality().ceil_in (limit, m_remain.in);
+ else
+ limit = offer.quality ().ceil_out (limit, m_remain.out);
+
+ assert (limit.out <= offer.amount().out);
+ assert (limit.in <= offer.amount().in);
+
+ Amounts const amount (flow (limit, offer, account ()));
+ m_remain.out -= amount.out;
+ m_remain.in -= amount.in;
+ assert (m_remain.in >= zero);
+ return fill (offer, amount);
+}
+
+TER
+Taker::cross (Offer const& leg1, Offer const& leg2)
+{
+ assert (!done ());
+
+ assert (leg1.amount ().out.isNative ());
+ assert (leg2.amount ().in.isNative ());
+
+ Amounts amount1 (leg1.amount());
+ Amounts amount2 (leg2.amount());
+
+ if (m_options.sell)
+ amount1 = leg1.quality().ceil_in (amount1, m_remain.in);
+ else
+ amount2 = leg2.quality().ceil_out (amount2, m_remain.out);
+
+ if (amount1.out <= amount2.in)
+ amount2 = leg2.quality().ceil_in (amount2, amount1.out);
+ else
+ amount1 = leg1.quality().ceil_out (amount1, amount2.in);
+
+ assert (amount1.out == amount2.in);
+
+ // As written, flow can't handle a 3-party transfer, but this works for
+ // us because the output of leg1 and the input leg2 are XRP.
+ Amounts flow1 (flow (amount1, leg1, m_account));
+
+ amount2 = leg2.quality().ceil_in (amount2, flow1.out);
+
+ Amounts flow2 (flow (amount2, leg2, m_account));
+
+ m_remain.out -= amount2.out;
+ m_remain.in -= amount1.in;
+
+ return fill (leg1, flow1, leg2, flow2);
+}
+
+}
+}
diff --git a/src/ripple_app/consensus/LedgerConsensus.cpp b/src/ripple_app/consensus/LedgerConsensus.cpp
index 6d994e2547..9ecef11af0 100644
--- a/src/ripple_app/consensus/LedgerConsensus.cpp
+++ b/src/ripple_app/consensus/LedgerConsensus.cpp
@@ -1384,8 +1384,8 @@ private:
return resultSuccess;
}
- if (isTefFailure (result) || isTemMalformed
- (result) || isTelLocal (result))
+ if (isTefFailure (result) || isTemMalformed (result) ||
+ isTelLocal (result))
{
// failure
WriteLog (lsDEBUG, LedgerConsensus)
diff --git a/src/ripple_app/ripple_app_pt9.unity.cpp b/src/ripple_app/ripple_app_pt9.unity.cpp
index d9942787ab..bbc1845cc8 100644
--- a/src/ripple_app/ripple_app_pt9.unity.cpp
+++ b/src/ripple_app/ripple_app_pt9.unity.cpp
@@ -21,6 +21,11 @@
#include "ripple_app.h"
+#include "book/impl/Taker.cpp"
+#include "book/impl/BookTip.cpp"
+#include "book/impl/OfferStream.cpp"
+#include "book/impl/Quality.cpp"
+
#include "transactors/Transactor.cpp"
#include "transactors/Change.cpp"
diff --git a/src/ripple_app/transactors/AddWallet.cpp b/src/ripple_app/transactors/AddWallet.cpp
index cbbf11fa4e..1bc378b316 100644
--- a/src/ripple_app/transactors/AddWallet.cpp
+++ b/src/ripple_app/transactors/AddWallet.cpp
@@ -19,7 +19,7 @@
namespace ripple {
-TER WalletAddTransactor::doApply ()
+TER AddWallet::doApply ()
{
std::uint32_t const uTxFlags = mTxn.getFlags ();
diff --git a/src/ripple_app/transactors/AddWallet.h b/src/ripple_app/transactors/AddWallet.h
index e0776fce4d..1f4b83161a 100644
--- a/src/ripple_app/transactors/AddWallet.h
+++ b/src/ripple_app/transactors/AddWallet.h
@@ -22,20 +22,20 @@
namespace ripple {
-class WalletAddTransactorLog;
+class AddWalletLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/WalletAdd";
}
-class WalletAddTransactor
+class AddWallet
: public Transactor
{
public:
- WalletAddTransactor (
+ AddWallet (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -43,13 +43,23 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
TER doApply ();
};
+inline
+std::unique_ptr
+make_AddWallet (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/CancelOffer.cpp b/src/ripple_app/transactors/CancelOffer.cpp
index db3c133438..82ac8e12bd 100644
--- a/src/ripple_app/transactors/CancelOffer.cpp
+++ b/src/ripple_app/transactors/CancelOffer.cpp
@@ -20,7 +20,7 @@
namespace ripple {
-TER OfferCancelTransactor::doApply ()
+TER CancelOffer::doApply ()
{
std::uint32_t const uOfferSequence = mTxn.getFieldU32 (sfOfferSequence);
std::uint32_t const uAccountSequenceNext = mTxnAccount->getFieldU32 (sfSequence);
diff --git a/src/ripple_app/transactors/CancelOffer.h b/src/ripple_app/transactors/CancelOffer.h
index 667d9426c9..a08387e114 100644
--- a/src/ripple_app/transactors/CancelOffer.h
+++ b/src/ripple_app/transactors/CancelOffer.h
@@ -22,20 +22,20 @@
namespace ripple {
-class OfferCancelTransactorLog;
+class CancelOfferLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/OfferCancel";
}
-class OfferCancelTransactor
+class CancelOffer
: public Transactor
{
public:
- OfferCancelTransactor (
+ CancelOffer (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -43,7 +43,7 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
@@ -51,6 +51,16 @@ public:
TER doApply () override;
};
+inline
+std::unique_ptr
+make_CancelOffer (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/Change.cpp b/src/ripple_app/transactors/Change.cpp
index ea073408b8..c2db690ded 100644
--- a/src/ripple_app/transactors/Change.cpp
+++ b/src/ripple_app/transactors/Change.cpp
@@ -19,7 +19,7 @@
namespace ripple {
-TER ChangeTransactor::doApply ()
+TER Change::doApply ()
{
if (mTxn.getTxnType () == ttAMENDMENT)
return applyAmendment ();
@@ -30,7 +30,7 @@ TER ChangeTransactor::doApply ()
return temUNKNOWN;
}
-TER ChangeTransactor::checkSig ()
+TER Change::checkSig ()
{
if (mTxn.getFieldAccount160 (sfAccount).isNonZero ())
{
@@ -47,7 +47,7 @@ TER ChangeTransactor::checkSig ()
return tesSUCCESS;
}
-TER ChangeTransactor::checkSeq ()
+TER Change::checkSeq ()
{
if ((mTxn.getSequence () != 0) || mTxn.isFieldPresent (sfPreviousTxnID))
{
@@ -58,7 +58,7 @@ TER ChangeTransactor::checkSeq ()
return tesSUCCESS;
}
-TER ChangeTransactor::payFee ()
+TER Change::payFee ()
{
if (mTxn.getTransactionFee () != STAmount ())
{
@@ -69,7 +69,7 @@ TER ChangeTransactor::payFee ()
return tesSUCCESS;
}
-TER ChangeTransactor::preCheck ()
+TER Change::preCheck ()
{
mTxnAccountID = mTxn.getSourceAccount ().getAccountID ();
@@ -89,7 +89,7 @@ TER ChangeTransactor::preCheck ()
return tesSUCCESS;
}
-TER ChangeTransactor::applyAmendment ()
+TER Change::applyAmendment ()
{
uint256 amendment (mTxn.getFieldH256 (sfAmendment));
@@ -119,7 +119,7 @@ TER ChangeTransactor::applyAmendment ()
return tesSUCCESS;
}
-TER ChangeTransactor::applyFee ()
+TER Change::applyFee ()
{
SLE::pointer feeObject = mEngine->entryCache (
diff --git a/src/ripple_app/transactors/Change.h b/src/ripple_app/transactors/Change.h
index 54692c2260..45b8276302 100644
--- a/src/ripple_app/transactors/Change.h
+++ b/src/ripple_app/transactors/Change.h
@@ -22,20 +22,20 @@
namespace ripple {
-class ChangeTransactorLog;
+class ChangeLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/Change";
}
-class ChangeTransactor
+class Change
: public Transactor
{
public:
- ChangeTransactor (
+ Change (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -43,7 +43,7 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
@@ -64,6 +64,16 @@ private:
}
};
+inline
+std::unique_ptr
+make_Change (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/CreateOffer.cpp b/src/ripple_app/transactors/CreateOffer.cpp
index e50b4fc06d..661222ce44 100644
--- a/src/ripple_app/transactors/CreateOffer.cpp
+++ b/src/ripple_app/transactors/CreateOffer.cpp
@@ -26,10 +26,11 @@
#include "../book/OfferStream.h"
#include "../book/Taker.h"
+#include "../book/Types.h"
namespace ripple {
-OfferCreateTransactor::OfferCreateTransactor (
+CreateOffer::CreateOffer (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -37,31 +38,495 @@ OfferCreateTransactor::OfferCreateTransactor (
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
-std::unique_ptr make_OfferCreateTransactor (
+TER
+CreateOffer::checkAcceptAsset(core::AssetRef asset) const
+{
+ /* Only valid for custom currencies */
+ assert (!asset.is_xrp ());
+
+ SLE::pointer const issuerAccount = mEngine->entryCache (
+ ltACCOUNT_ROOT, Ledger::getAccountRootIndex (asset.issuer));
+
+ if (!issuerAccount)
+ {
+ if (m_journal.warning) m_journal.warning <<
+ "delay: can't receive IOUs from non-existent issuer: " <<
+ RippleAddress::createHumanAccountID (asset.issuer);
+
+ return is_bit_set (mParams, tapRETRY)
+ ? terNO_ACCOUNT
+ : tecNO_ISSUER;
+ }
+
+ if (is_bit_set (issuerAccount->getFieldU32 (sfFlags), lsfRequireAuth))
+ {
+ SLE::pointer const trustLine (mEngine->entryCache (
+ ltRIPPLE_STATE, Ledger::getRippleStateIndex (
+ mTxnAccountID, asset.issuer, asset.currency)));
+
+ if (!trustLine)
+ {
+ return is_bit_set (mParams, tapRETRY)
+ ? terNO_LINE
+ : tecNO_LINE;
+ }
+
+ // Entries have a canonical representation, determined by a
+ // lexicographical "greater than" comparison employing strict weak
+ // ordering. Determine which entry we need to access.
+ bool const canonical_gt (mTxnAccountID > asset.issuer);
+
+ bool const need_auth (is_bit_set (
+ trustLine->getFieldU32 (sfFlags),
+ (canonical_gt ? lsfLowAuth : lsfHighAuth)));
+
+ if (need_auth)
+ {
+ if (m_journal.debug) m_journal.debug <<
+ "delay: can't receive IOUs from issuer without auth.";
+
+ return is_bit_set (mParams, tapRETRY)
+ ? terNO_AUTH
+ : tecNO_AUTH;
+ }
+ }
+
+ return tesSUCCESS;
+}
+
+TER
+CreateOffer::doApply ()
+{
+ if (m_journal.debug) m_journal.debug <<
+ "OfferCreate> " << mTxn.getJson (0);
+
+ std::uint32_t const uTxFlags = mTxn.getFlags ();
+
+ bool const bPassive = is_bit_set (uTxFlags, tfPassive);
+ bool const bImmediateOrCancel = is_bit_set (uTxFlags, tfImmediateOrCancel);
+ bool const bFillOrKill = is_bit_set (uTxFlags, tfFillOrKill);
+ bool const bSell = is_bit_set (uTxFlags, tfSell);
+
+ STAmount saTakerPays = mTxn.getFieldAmount (sfTakerPays);
+ STAmount saTakerGets = mTxn.getFieldAmount (sfTakerGets);
+
+ if (!saTakerPays.isLegalNet () || !saTakerGets.isLegalNet ())
+ return temBAD_AMOUNT;
+
+ uint160 const& uPaysIssuerID = saTakerPays.getIssuer ();
+ uint160 const& uPaysCurrency = saTakerPays.getCurrency ();
+
+ uint160 const& uGetsIssuerID = saTakerGets.getIssuer ();
+ uint160 const& uGetsCurrency = saTakerGets.getCurrency ();
+
+ bool const bHaveExpiration (mTxn.isFieldPresent (sfExpiration));
+ bool const bHaveCancel (mTxn.isFieldPresent (sfOfferSequence));
+
+ std::uint32_t const uExpiration = mTxn.getFieldU32 (sfExpiration);
+ std::uint32_t const uCancelSequence = mTxn.getFieldU32 (sfOfferSequence);
+
+ // FIXME understand why we use SequenceNext instead of current transaction
+ // sequence to determine the transaction. Why is the offer seuqnce
+ // number insufficient?
+
+ std::uint32_t const uAccountSequenceNext = mTxnAccount->getFieldU32 (sfSequence);
+ std::uint32_t const uSequence = mTxn.getSequence ();
+
+ const uint256 uLedgerIndex = Ledger::getOfferIndex (mTxnAccountID, uSequence);
+
+ if (m_journal.debug)
+ {
+ m_journal.debug <<
+ "Creating offer node: " << to_string (uLedgerIndex) <<
+ " uSequence=" << uSequence;
+
+ if (bImmediateOrCancel)
+ m_journal.debug << "Transaction: IoC set.";
+
+ if (bFillOrKill)
+ m_journal.debug << "Transaction: FoK set.";
+ }
+
+ // This is the original rate of this offer, and is the rate at which it will
+ // be placed, even if crossing offers change the amounts.
+ std::uint64_t const uRate = STAmount::getRate (saTakerGets, saTakerPays);
+
+ TER terResult (tesSUCCESS);
+ uint256 uDirectory;
+ std::uint64_t uOwnerNode;
+ std::uint64_t uBookNode;
+
+ // This is the ledger view that we work against. Transactions are applied
+ // as we go on processing transactions.
+ core::LedgerView& view (mEngine->view ());
+
+ // This is a checkpoint with just the fees paid. If something goes wrong
+ // with this transaction, we roll back to this ledger.
+ core::LedgerView view_checkpoint (view);
+
+ view.bumpSeq (); // Begin ledger variance.
+
+ SLE::pointer sleCreator = mEngine->entryCache (
+ ltACCOUNT_ROOT, Ledger::getAccountRootIndex (mTxnAccountID));
+
+ if (uTxFlags & tfOfferCreateMask)
+ {
+ if (m_journal.debug) m_journal.debug <<
+ "Malformed transaction: Invalid flags set.";
+
+ terResult = temINVALID_FLAG;
+ }
+ else if (bImmediateOrCancel && bFillOrKill)
+ {
+ if (m_journal.debug) m_journal.debug <<
+ "Malformed transaction: both IoC and FoK set.";
+
+ terResult = temINVALID_FLAG;
+ }
+ else if (bHaveExpiration && !uExpiration)
+ {
+ m_journal.warning <<
+ "Malformed offer: bad expiration";
+
+ terResult = temBAD_EXPIRATION;
+ }
+ else if (saTakerPays.isNative () && saTakerGets.isNative ())
+ {
+ m_journal.warning <<
+ "Malformed offer: XRP for XRP";
+
+ terResult = temBAD_OFFER;
+ }
+ else if (saTakerPays <= zero || saTakerGets <= zero)
+ {
+ m_journal.warning <<
+ "Malformed offer: bad amount";
+
+ terResult = temBAD_OFFER;
+ }
+ else if (uPaysCurrency == uGetsCurrency && uPaysIssuerID == uGetsIssuerID)
+ {
+ m_journal.warning <<
+ "Malformed offer: redundant offer";
+
+ terResult = temREDUNDANT;
+ }
+ // We don't allow a non-native currency to use the currency code XRP.
+ else if (CURRENCY_BAD == uPaysCurrency || CURRENCY_BAD == uGetsCurrency)
+ {
+ m_journal.warning <<
+ "Malformed offer: Bad currency.";
+
+ terResult = temBAD_CURRENCY;
+ }
+ else if (saTakerPays.isNative () != !uPaysIssuerID ||
+ saTakerGets.isNative () != !uGetsIssuerID)
+ {
+ m_journal.warning <<
+ "Malformed offer: bad issuer";
+
+ terResult = temBAD_ISSUER;
+ }
+ else if (view.accountFunds (mTxnAccountID, saTakerGets) <= zero)
+ {
+ m_journal.warning <<
+ "delay: Offers must be at least partially funded.";
+
+ terResult = tecUNFUNDED_OFFER;
+ }
+ // This can probably be simplified to make sure that you cancel sequences
+ // before the transaction sequence number.
+ else if (bHaveCancel && (!uCancelSequence || uAccountSequenceNext - 1 <= uCancelSequence))
+ {
+ if (m_journal.debug) m_journal.debug <<
+ "uAccountSequenceNext=" << uAccountSequenceNext <<
+ " uOfferSequence=" << uCancelSequence;
+
+ terResult = temBAD_SEQUENCE;
+ }
+
+ if (terResult != tesSUCCESS)
+ {
+ if (m_journal.debug) m_journal.debug <<
+ "final terResult=" << transToken (terResult);
+
+ return terResult;
+ }
+
+ // Process a cancellation request that's passed along with an offer.
+ if ((terResult == tesSUCCESS) && bHaveCancel)
+ {
+ uint256 const uCancelIndex (
+ Ledger::getOfferIndex (mTxnAccountID, uCancelSequence));
+ SLE::pointer sleCancel = mEngine->entryCache (ltOFFER, uCancelIndex);
+
+ // It's not an error to not find the offer to cancel: it might have
+ // been consumed or removed as we are processing.
+ if (sleCancel)
+ {
+ m_journal.warning <<
+ "Cancelling order with sequence " << uCancelSequence;
+
+ terResult = view.offerDelete (sleCancel);
+ }
+ }
+
+ // Expiration is defined in terms of the close time of the parent ledger,
+ // because we definitively know the time that it closed but we do not
+ // know the closing time of the ledger that is under construction.
+ if (bHaveExpiration &&
+ (mEngine->getLedger ()->getParentCloseTimeNC () >= uExpiration))
+ {
+ return tesSUCCESS;
+ }
+
+ // Make sure that we are authorized to hold what the taker will pay us.
+ if (terResult == tesSUCCESS && !saTakerPays.isNative ())
+ terResult = checkAcceptAsset (core::Asset (uPaysCurrency, uPaysIssuerID));
+
+ bool crossed = false;
+ bool const bOpenLedger = is_bit_set (mParams, tapOPEN_LEDGER);
+
+ if (terResult == tesSUCCESS)
+ {
+ // We reverse gets and pays because during offer crossing we are taking.
+ core::Amounts const taker_amount (saTakerGets, saTakerPays);
+
+ // The amount of the offer that we will need to place, after we finish
+ // offer crossing processing. It may be equal to the original amount,
+ // empty (fully crossed), or something in-between.
+ core::Amounts place_offer;
+
+ std::tie(terResult, place_offer) = crossOffers (view, taker_amount);
+
+ if (terResult == tecFAILED_PROCESSING && bOpenLedger)
+ terResult = telFAILED_PROCESSING;
+
+ if (terResult == tesSUCCESS)
+ {
+ // We now need to reduce the offer by the cross flow. We reverse
+ // in and out here, since during crossing we were takers.
+ assert (saTakerPays.getCurrency () == place_offer.out.getCurrency ());
+ assert (saTakerPays.getIssuer () == place_offer.out.getIssuer ());
+ assert (saTakerGets.getCurrency () == place_offer.in.getCurrency ());
+ assert (saTakerGets.getIssuer () == place_offer.in.getIssuer ());
+
+ if (taker_amount != place_offer)
+ crossed = true;
+
+ if (m_journal.debug)
+ {
+ m_journal.debug << "Offer Crossing: " << transToken (terResult);
+
+ if (terResult == tesSUCCESS)
+ {
+ m_journal.debug <<
+ " takerPays: " << saTakerPays.getFullText () <<
+ " -> " << place_offer.out.getFullText ();
+ m_journal.debug <<
+ " takerGets: " << saTakerGets.getFullText () <<
+ " -> " << place_offer.in.getFullText ();
+ }
+ }
+
+ saTakerPays = place_offer.out;
+ saTakerGets = place_offer.in;
+ }
+ }
+
+ if (terResult != tesSUCCESS)
+ {
+ m_journal.debug <<
+ "final terResult=" << transToken (terResult);
+
+ return terResult;
+ }
+
+ if (m_journal.debug)
+ {
+ m_journal.debug <<
+ "takeOffers: saTakerPays=" < " << saTakerGets.getHumanCurrency () <<
+ "/" << RippleAddress::createHumanAccountID (saTakerGets.getIssuer ());
+
+ // We use the original rate to place the offer.
+ uDirectory = Ledger::getQualityIndex (uBookBase, uRate);
+
+ // Add offer to order book.
+ terResult = view.dirAdd (uBookNode, uDirectory, uLedgerIndex,
+ std::bind (&Ledger::qualityDirDescriber, std::placeholders::_1,
+ std::placeholders::_2, saTakerPays.getCurrency (),
+ uPaysIssuerID, saTakerGets.getCurrency (),
+ uGetsIssuerID, uRate));
+ }
+
+ if (tesSUCCESS == terResult)
+ {
+ if (m_journal.debug)
+ {
+ m_journal.debug <<
+ "sfAccount=" <<
+ RippleAddress::createHumanAccountID (mTxnAccountID);
+ m_journal.debug <<
+ "uPaysIssuerID=" <<
+ RippleAddress::createHumanAccountID (uPaysIssuerID);
+ m_journal.debug <<
+ "uGetsIssuerID=" <<
+ RippleAddress::createHumanAccountID (uGetsIssuerID);
+ m_journal.debug <<
+ "saTakerPays.isNative()=" <<
+ saTakerPays.isNative ();
+ m_journal.debug <<
+ "saTakerGets.isNative()=" <<
+ saTakerGets.isNative ();
+ m_journal.debug <<
+ "uPaysCurrency=" <<
+ saTakerPays.getHumanCurrency ();
+ m_journal.debug <<
+ "uGetsCurrency=" <<
+ saTakerGets.getHumanCurrency ();
+ }
+
+ SLE::pointer sleOffer (mEngine->entryCreate (ltOFFER, uLedgerIndex));
+
+ sleOffer->setFieldAccount (sfAccount, mTxnAccountID);
+ sleOffer->setFieldU32 (sfSequence, uSequence);
+ sleOffer->setFieldH256 (sfBookDirectory, uDirectory);
+ sleOffer->setFieldAmount (sfTakerPays, saTakerPays);
+ sleOffer->setFieldAmount (sfTakerGets, saTakerGets);
+ sleOffer->setFieldU64 (sfOwnerNode, uOwnerNode);
+ sleOffer->setFieldU64 (sfBookNode, uBookNode);
+
+ if (uExpiration)
+ sleOffer->setFieldU32 (sfExpiration, uExpiration);
+
+ if (bPassive)
+ sleOffer->setFlag (lsfPassive);
+
+ if (bSell)
+ sleOffer->setFlag (lsfSell);
+
+ if (m_journal.debug) m_journal.debug <<
+ "final terResult=" << transToken (terResult) <<
+ " sleOffer=" << sleOffer->getJson (0);
+ }
+ }
+
+ if (terResult != tesSUCCESS)
+ {
+ m_journal.debug <<
+ "final terResult=" << transToken (terResult);
+ }
+
+ return terResult;
+}
+
+std::unique_ptr make_CreateOffer (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
{
#if RIPPLE_USE_OLD_CREATE_TRANSACTOR
- return std::make_unique (txn, params, engine);
+ return std::make_unique (txn, params, engine);
#else
STAmount const& amount_in = txn.getFieldAmount (sfTakerPays);
STAmount const& amount_out = txn.getFieldAmount (sfTakerGets);
// Autobridging is only in effect when an offer does not involve XRP
if (!amount_in.isNative() && !amount_out.isNative ())
- {
- // no autobridging transactor exists yet - we create a regular, direct
- // transactor for now.
- return std::make_unique (txn, params, engine);
- }
+ return std::make_unique (txn, params, engine);
- return std::make_unique (txn, params, engine);
+ return std::make_unique (txn, params, engine);
#endif
}
diff --git a/src/ripple_app/transactors/CreateOffer.h b/src/ripple_app/transactors/CreateOffer.h
index 36fb58dbfb..4353adcf2e 100644
--- a/src/ripple_app/transactors/CreateOffer.h
+++ b/src/ripple_app/transactors/CreateOffer.h
@@ -20,45 +20,53 @@
#ifndef RIPPLE_TX_OFFERCREATE_H_INCLUDED
#define RIPPLE_TX_OFFERCREATE_H_INCLUDED
+#include "../book/Amounts.h"
+#include "../book/Types.h"
+
#include "../../beast/beast/cxx14/memory.h"
namespace ripple {
-class OfferCreateTransactorLog;
+class CreateOfferLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/OfferCreate";
}
-class OfferCreateTransactor
+class CreateOffer
: public Transactor
{
-private:
- template
- static std::string
- get_compare_sign (T const& lhs, T const& rhs)
- {
- if (lhs > rhs)
- return ">";
+protected:
+ /** Determine if we are authorized to hold the asset we want to get */
+ TER checkAcceptAsset(core::AssetRef asset) const;
- if (rhs > lhs)
- return "<";
+ /** Fill offer as much as possible by consuming offers already on the books.
+ We adjusts account balances and charges fees on top to taker.
- // If neither is bigger than the other, they must be equal
- return "=";
- }
+ @param taker_amount.in How much the taker offers
+ @param taker_amount.out How much the taker wants
+
+ @return result.first crossing operation success/failure indicator.
+ result.second amount of offer left unfilled - only meaningful
+ if result.first is tesSUCCESS.
+ */
+ virtual std::pair crossOffers (
+ core::LedgerView& view,
+ core::Amounts const& taker_amount) = 0;
public:
- OfferCreateTransactor (
+ CreateOffer (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine);
+
+ TER doApply () override;
};
-std::unique_ptr make_OfferCreateTransactor (
+std::unique_ptr make_CreateOffer (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine);
diff --git a/src/ripple_app/transactors/CreateOfferBridged.cpp b/src/ripple_app/transactors/CreateOfferBridged.cpp
index 398cc19215..e773a0b9df 100644
--- a/src/ripple_app/transactors/CreateOfferBridged.cpp
+++ b/src/ripple_app/transactors/CreateOfferBridged.cpp
@@ -17,3 +17,175 @@
*/
//==============================================================================
+#include "../book/OfferStream.h"
+#include "../book/Taker.h"
+#include "../book/Quality.h"
+#include "../../beast/beast/streams/debug_ostream.h"
+
+namespace ripple {
+
+std::pair
+CreateOfferBridged::crossOffers (
+ core::LedgerView& view,
+ core::Amounts const& taker_amount)
+{
+ assert (!taker_amount.in.isNative () && !taker_amount.out.isNative ());
+
+ if (taker_amount.in.isNative () || taker_amount.out.isNative ())
+ return std::make_pair (tefINTERNAL, core::Amounts ());
+
+ core::Clock::time_point const when (
+ mEngine->getLedger ()->getParentCloseTimeNC ());
+
+ core::Taker::Options const options (mTxn.getFlags());
+
+ core::LedgerView view_cancel (view.duplicate());
+
+ core::AssetRef const asset_in (
+ taker_amount.in.getCurrency(), taker_amount.in.getIssuer());
+
+ core::AssetRef const asset_out (
+ taker_amount.out.getCurrency(), taker_amount.out.getIssuer());
+
+ core::OfferStream offers_direct (view, view_cancel,
+ core::Book (asset_in, asset_out), when, m_journal);
+
+ core::OfferStream offers_leg1 (view, view_cancel,
+ core::Book (asset_in, xrp_asset ()), when, m_journal);
+
+ core::OfferStream offers_leg2 (view, view_cancel,
+ core::Book (xrp_asset (), asset_out), when, m_journal);
+
+ core::Taker taker (view, mTxnAccountID, taker_amount, options);
+
+ if (m_journal.debug) m_journal.debug <<
+ "process_order: " <<
+ (options.sell? "sell" : "buy") << " " <<
+ (options.passive? "passive" : "") << std::endl <<
+ " taker: " << taker.account() << std::endl <<
+ " balances: " <<
+ view.accountFunds (taker.account(), taker_amount.in) << ", " <<
+ view.accountFunds (taker.account(), taker_amount.out);
+
+ TER cross_result (tesSUCCESS);
+
+ bool have_bridged (
+ offers_leg1.step_account (taker.account()) &&
+ offers_leg2.step_account (taker.account()));
+ bool have_direct (offers_direct.step_account (taker.account()));
+ bool place_order (true);
+
+ while (have_direct || have_bridged)
+ {
+ core::Quality quality;
+ bool use_direct;
+ bool leg1_consumed(false);
+ bool leg2_consumed(false);
+ bool direct_consumed(false);
+
+ // Logic:
+ // We calculate the qualities of any direct and bridged offers at the
+ // tip of the order book, and choose the best one of the two.
+
+ if (have_direct)
+ {
+ core::Quality const direct_quality (offers_direct.tip ().quality ());
+
+ if (have_bridged)
+ {
+ core::Quality const bridged_quality (core::composed_quality (
+ offers_leg1.tip ().quality (),
+ offers_leg2.tip ().quality ()));
+
+ if (bridged_quality < direct_quality)
+ {
+ use_direct = true;
+ quality = direct_quality;
+ }
+ else
+ {
+ use_direct = false;
+ quality = bridged_quality;
+ }
+ }
+ else
+ {
+ use_direct = true;
+ quality = offers_direct.tip ().quality ();
+ }
+ }
+ else
+ {
+ use_direct = false;
+ quality = core::composed_quality (
+ offers_leg1.tip ().quality (),
+ offers_leg2.tip ().quality ());
+ }
+
+ // We are always looking at the best quality available, so if we reject
+ // that, we know that we are done.
+ if (taker.reject(quality))
+ break;
+
+ if (use_direct)
+ {
+ if (m_journal.debug) m_journal.debug <<
+ " Offer: " << offers_direct.tip () << std::endl <<
+ " " << offers_direct.tip ().amount().in <<
+ " : " << offers_direct.tip ().amount ().out;
+
+ cross_result = taker.cross(offers_direct.tip ());
+
+ if (offers_direct.tip ().fully_consumed ())
+ {
+ direct_consumed = true;
+ have_direct = offers_direct.step_account (taker.account());
+ }
+ }
+ else
+ {
+ if (m_journal.debug) m_journal.debug <<
+ " Offer1: " << offers_leg1.tip () << std::endl <<
+ " " << offers_leg1.tip ().amount().in <<
+ " : " << offers_leg1.tip ().amount ().out << std::endl <<
+ " Offer2: " << offers_leg2.tip () << std::endl <<
+ " " << offers_leg2.tip ().amount ().in <<
+ " : " << offers_leg2.tip ().amount ().out;
+
+ cross_result = taker.cross(offers_leg1.tip (), offers_leg2.tip ());
+
+ if (offers_leg1.tip ().fully_consumed ())
+ {
+ leg1_consumed = true;
+ have_bridged = offers_leg1.step_account (taker.account ());
+ }
+ if (have_bridged && offers_leg2.tip ().fully_consumed ())
+ {
+ leg2_consumed = true;
+ have_bridged = offers_leg2.step_account (taker.account ());
+ }
+ }
+
+ if (cross_result != tesSUCCESS)
+ {
+ cross_result = tecFAILED_PROCESSING;
+ break;
+ }
+
+ if (taker.done())
+ {
+ m_journal.debug << "The taker reports he's done during crossing!";
+ place_order = false;
+ break;
+ }
+
+ // Postcondition: If we aren't done, then we must have consumed at
+ // least one offer fully.
+ assert (direct_consumed || leg1_consumed || leg2_consumed);
+ }
+
+ return std::make_pair(cross_result, taker.remaining_offer ());
+}
+
+}
+
diff --git a/src/ripple_app/transactors/CreateOfferBridged.h b/src/ripple_app/transactors/CreateOfferBridged.h
index 0deb21a69f..d8c75a45c3 100644
--- a/src/ripple_app/transactors/CreateOfferBridged.h
+++ b/src/ripple_app/transactors/CreateOfferBridged.h
@@ -20,4 +20,34 @@
#ifndef RIPPLE_TX_BRIDGE_OFFERCREATE_H_INCLUDED
#define RIPPLE_TX_BRIDGE_OFFERCREATE_H_INCLUDED
+#include "../book/Amounts.h"
+
+#include
+
+namespace ripple {
+
+class CreateOfferBridged
+ : public CreateOffer
+{
+public:
+ CreateOfferBridged (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+ : CreateOffer (
+ txn,
+ params,
+ engine)
+ {
+
+ }
+
+private:
+ std::pair crossOffers (
+ core::LedgerView& view,
+ core::Amounts const& taker_amount) override;
+};
+
+}
+
#endif
diff --git a/src/ripple_app/transactors/CreateOfferDirect.cpp b/src/ripple_app/transactors/CreateOfferDirect.cpp
index 6b0d9d8060..32053da0b0 100644
--- a/src/ripple_app/transactors/CreateOfferDirect.cpp
+++ b/src/ripple_app/transactors/CreateOfferDirect.cpp
@@ -23,38 +23,38 @@
namespace ripple {
-//------------------------------------------------------------------------------
+/** Fill offer as much as possible by consuming offers already on the books.
+ We adjusts account balances and charges fees on top to taker.
-// NIKB Move this in the right place
-std::pair
-process_order (
+ @param taker_amount.in How much the taker offers
+ @param taker_amount.out How much the taker wants
+ @param taker_flow.in What the taker actually paid, not including fees.
+ @param taker_flow.out What the taker actually got, not including fees.
+
+ @return tesSUCCESS, terNO_ACCOUNT, telFAILED_PROCESSING, or
+ tecFAILED_PROCESSING
+*/
+std::pair
+CreateOfferDirect::crossOffers (
core::LedgerView& view,
- core::BookRef const book,
- core::Account const& account,
- core::Amounts const& amount,
- core::Amounts& cross_flow,
- core::Taker::Options const options,
- core::Clock::time_point const when,
- beast::Journal& journal)
+ core::Amounts const& taker_amount)
{
- TER result (tesSUCCESS);
+ core::Taker::Options const options (mTxn.getFlags());
+
+ core::Clock::time_point const when (
+ mEngine->getLedger ()->getParentCloseTimeNC ());
+
core::LedgerView view_cancel (view.duplicate());
- core::OfferStream offers (view, view_cancel, book, when, journal);
- core::Taker taker (offers.view(), book, account, amount, options);
+ core::OfferStream offers (view, view_cancel,
+ core::Book (
+ core::AssetRef (
+ taker_amount.in.getCurrency(), taker_amount.in.getIssuer()),
+ core::AssetRef (
+ taker_amount.out.getCurrency(), taker_amount.out.getIssuer())),
+ when, m_journal);
+ core::Taker taker (offers.view(), mTxnAccountID, taker_amount, options);
- if (journal.debug) journal.debug <<
- "process_order: " <<
- (options.sell? "sell" : "buy") << " " <<
- (options.passive? "passive" : "") << std::endl <<
- " taker: " << taker.account() << std::endl <<
- " balances: " <<
- view.accountFunds (taker.account(), amount.in) << ", " <<
- view.accountFunds (taker.account(), amount.out);
-
- cross_flow.in.clear (amount.in);
- cross_flow.out.clear (amount.out);
-
- bool place_order (true);
+ TER cross_result (tesSUCCESS);
while (true)
{
@@ -67,27 +67,22 @@ process_order (
if (taker.done())
{
- journal.debug << "The taker reports he's done during crossing!";
- place_order = false;
+ m_journal.debug << "The taker reports he's done during crossing!";
break;
}
- if (! offers.step())
+ // NIKB CHECKME Investigate whether we can use offer.step_account() here
+ // or whether doing so would cause a protocol-breaking
+ // change.
+ if (! offers.step ())
{
// Place the order since there are no
// more offers and the order has a balance.
- journal.debug << "No more offers to consider during crossing!";
+ m_journal.debug << "No more offers to consider during crossing!";
break;
}
- auto const offer (offers.tip());
-
- if (journal.debug) journal.debug <<
- "Considering offer: " << std::endl <<
- " Id: " << offer.entry()->getIndex() << std::endl <<
- " In: " << offer.amount().in << std::endl <<
- " Out: " << offer.amount().out << std::endl <<
- " By: " << offer.account();
+ auto const& offer (offers.tip());
if (taker.reject (offer.quality()))
{
@@ -98,592 +93,25 @@ process_order (
if (offer.account() == taker.account())
{
- if (journal.debug) journal.debug <<
- " skipping self-offer " << offer.entry()->getIndex() << std::endl <<
- " pays/gets " << offer.amount().in << ", " << offer.amount().out << std::endl <<
- " during cross for " << std::endl <<
- " pays/gets " << amount.in << ", " << amount.out;
- ;
-
- // Skip offer from self.
- // (Offer will be considered expired, and get deleted)
+ // Skip offer from self. The offer will be considered expired and
+ // will get deleted.
continue;
}
- if (journal.debug) journal.debug <<
- " offer " << offer.entry()->getIndex() << std::endl <<
- " pays/gets " << offer.amount().in << ", " << offer.amount().out
- ;
+ if (m_journal.debug) m_journal.debug <<
+ " Offer: " << offer.entry()->getIndex() << std::endl <<
+ " " << offer.amount().in << " : " << offer.amount().out;
- core::Amounts flow;
- bool consumed;
- std::tie (flow, consumed) = taker.fill (offer);
+ cross_result = taker.cross (offer);
- result = taker.process (flow, offer);
-
- if (journal.debug) journal.debug <<
- " flow " <<
- flow.in << ", " << flow.out << std::endl <<
- " balances " <<
- view.accountFunds (taker.account(), amount.in) << ", " <<
- view.accountFunds (taker.account(), amount.out)
- ;
-
- if (result != tesSUCCESS)
+ if (cross_result != tesSUCCESS)
{
- // VFALCO TODO Return the tec and let a caller higher
- // up convert the error if the ledger is open.
- //result = bOpenLedger ?
- // telFAILED_PROCESSING : tecFAILED_PROCESSING;
- result = tecFAILED_PROCESSING;
+ cross_result = tecFAILED_PROCESSING;
break;
}
-
- cross_flow.in += flow.in;
- cross_flow.out += flow.out;
}
- if (result == tesSUCCESS)
- {
- // No point in placing an offer for a fill-or-kill offer - the offer
- // will not succeed, since it wasn't filled.
- if (options.fill_or_kill)
- place_order = false;
-
- // An immediate or cancel order will fill however much it is possible
- // to fill and the remainder is not filled.
- if (options.immediate_or_cancel)
- place_order = false;
- }
-
- if (result == tesSUCCESS)
- {
- if (place_order)
- {
-
- }
- }
- else
- {
-
- }
-
- return std::make_pair(result,place_order);
-}
-
-/** Take as much as possible.
- We adjusts account balances and charges fees on top to taker.
-
- @param saTakerPays What the taker offers (w/ issuer)
- @param saTakerGets What the taker wanted (w/ issuer)
- @param saTakerPaid What taker could have paid including saved not including
- fees. To reduce an offer.
- @param saTakerGot What taker got not including fees. To reduce an offer.
- @return tesSUCCESS, terNO_ACCOUNT, telFAILED_PROCESSING, or
- tecFAILED_PROCESSING
-*/
-std::pair DirectOfferCreateTransactor::crossOffers (
- core::LedgerView& view,
- const STAmount& saTakerPays,
- const STAmount& saTakerGets,
- STAmount& saTakerPaid,
- STAmount& saTakerGot)
-{
- if (m_journal.debug) m_journal.debug << "takeOffers: ";
-
- core::Book book (
- core::AssetRef (
- saTakerPays.getCurrency(), saTakerPays.getIssuer()),
- core::AssetRef (
- saTakerGets.getCurrency(), saTakerGets.getIssuer()));
-
- core::Amounts cross_flow (
- core::Amount (saTakerPays.getCurrency(), saTakerPays.getIssuer()),
- core::Amount (saTakerGets.getCurrency(), saTakerGets.getIssuer()));
-
- auto const result (process_order (
- view, book, mTxnAccountID,
- core::Amounts (saTakerPays, saTakerGets), cross_flow,
- core::Taker::Options (mTxn.getFlags()),
- mEngine->getLedger ()->getParentCloseTimeNC (),
- m_journal));
-
- core::Amounts const funds (
- view.accountFunds (mTxnAccountID, saTakerPays),
- view.accountFunds (mTxnAccountID, saTakerGets));
-
- if (m_journal.debug) m_journal.debug << " cross_flow: " <<
- cross_flow.in << ", " << cross_flow.out;
-
- if (m_journal.debug) m_journal.debug << " balances: " <<
- funds.in << ", " << funds.out;
-
- saTakerPaid = cross_flow.in;
- saTakerGot = cross_flow.out;
-
- if (m_journal.debug) m_journal.debug <<
- " result: " << transToken (result.first) <<
- (result.second ? " (consumed)" : "");
-
- return result;
-}
-
-TER DirectOfferCreateTransactor::doApply ()
-{
- if (m_journal.debug) m_journal.debug <<
- "OfferCreate> " << mTxn.getJson (0);
-
- std::uint32_t const uTxFlags = mTxn.getFlags ();
-
- bool const bPassive = is_bit_set (uTxFlags, tfPassive);
- bool const bImmediateOrCancel = is_bit_set (uTxFlags, tfImmediateOrCancel);
- bool const bFillOrKill = is_bit_set (uTxFlags, tfFillOrKill);
- bool const bSell = is_bit_set (uTxFlags, tfSell);
-
- STAmount saTakerPays = mTxn.getFieldAmount (sfTakerPays);
- STAmount saTakerGets = mTxn.getFieldAmount (sfTakerGets);
-
- if (!saTakerPays.isLegalNet () || !saTakerGets.isLegalNet ())
- return temBAD_AMOUNT;
-
- uint160 const uPaysIssuerID = saTakerPays.getIssuer ();
- uint160 const uGetsIssuerID = saTakerGets.getIssuer ();
-
- bool const bHaveExpiration (mTxn.isFieldPresent (sfExpiration));
- bool const bHaveCancel (mTxn.isFieldPresent (sfOfferSequence));
-
- std::uint32_t const uExpiration = mTxn.getFieldU32 (sfExpiration);
- std::uint32_t const uCancelSequence = mTxn.getFieldU32 (sfOfferSequence);
-
- // FIXME understand why we use SequenceNext instead of current transaction
- // sequence to determine the transaction. Why is the offer seuqnce
- // number insufficient?
-
- std::uint32_t const uAccountSequenceNext = mTxnAccount->getFieldU32 (sfSequence);
- std::uint32_t const uSequence = mTxn.getSequence ();
-
- const uint256 uLedgerIndex = Ledger::getOfferIndex (mTxnAccountID, uSequence);
-
- if (m_journal.debug)
- {
- m_journal.debug <<
- "Creating offer node: " << to_string (uLedgerIndex) <<
- " uSequence=" << uSequence;
-
- if (bImmediateOrCancel)
- m_journal.debug << "Transaction: IoC set.";
-
- if (bFillOrKill)
- m_journal.debug << "Transaction: FoK set.";
- }
-
- uint160 const uPaysCurrency = saTakerPays.getCurrency ();
- uint160 const uGetsCurrency = saTakerGets.getCurrency ();
- std::uint64_t const uRate = STAmount::getRate (saTakerGets, saTakerPays);
-
- TER terResult (tesSUCCESS);
- uint256 uDirectory; // Delete hints.
- std::uint64_t uOwnerNode;
- std::uint64_t uBookNode;
-
- // This is the ledger view that we work against. Transactions are applied
- // as we go on processing transactions.
- core::LedgerView& view (mEngine->view ());
-
- // This is a checkpoint with just the fees paid. If something goes wrong
- // with this transaction, we roll back to this ledger.
- core::LedgerView view_checkpoint (view);
-
- view.bumpSeq (); // Begin ledger variance.
-
- SLE::pointer sleCreator = mEngine->entryCache (
- ltACCOUNT_ROOT, Ledger::getAccountRootIndex (mTxnAccountID));
-
- if (uTxFlags & tfOfferCreateMask)
- {
- if (m_journal.debug) m_journal.debug <<
- "Malformed transaction: Invalid flags set.";
-
- return temINVALID_FLAG;
- }
- else if (bImmediateOrCancel && bFillOrKill)
- {
- if (m_journal.debug) m_journal.debug <<
- "Malformed transaction: both IoC and FoK set.";
-
- return temINVALID_FLAG;
- }
- else if (bHaveExpiration && !uExpiration)
- {
- m_journal.warning <<
- "Malformed offer: bad expiration";
-
- terResult = temBAD_EXPIRATION;
- }
- else if (saTakerPays.isNative () && saTakerGets.isNative ())
- {
- m_journal.warning <<
- "Malformed offer: XRP for XRP";
-
- terResult = temBAD_OFFER;
- }
- else if (saTakerPays <= zero || saTakerGets <= zero)
- {
- m_journal.warning <<
- "Malformed offer: bad amount";
-
- terResult = temBAD_OFFER;
- }
- else if (uPaysCurrency == uGetsCurrency && uPaysIssuerID == uGetsIssuerID)
- {
- m_journal.warning <<
- "Malformed offer: redundant offer";
-
- terResult = temREDUNDANT;
- }
- // We don't allow a non-native currency to use the currency code XRP.
- else if (CURRENCY_BAD == uPaysCurrency || CURRENCY_BAD == uGetsCurrency)
- {
- m_journal.warning <<
- "Malformed offer: Bad currency.";
-
- terResult = temBAD_CURRENCY;
- }
- else if (saTakerPays.isNative () != !uPaysIssuerID || saTakerGets.isNative () != !uGetsIssuerID)
- {
- m_journal.warning <<
- "Malformed offer: bad issuer";
-
- terResult = temBAD_ISSUER;
- }
- else if (view.accountFunds (mTxnAccountID, saTakerGets) <= zero)
- {
- m_journal.warning <<
- "delay: Offers must be at least partially funded.";
-
- terResult = tecUNFUNDED_OFFER;
- }
- // This can probably be simplified to make sure that you cancel sequences
- // before the transaction sequence number.
- else if (bHaveCancel && (!uCancelSequence || uAccountSequenceNext - 1 <= uCancelSequence))
- {
- if (m_journal.debug) m_journal.debug <<
- "uAccountSequenceNext=" << uAccountSequenceNext <<
- " uOfferSequence=" << uCancelSequence;
-
- terResult = temBAD_SEQUENCE;
- }
-
- if (tesSUCCESS != terResult)
- {
- if (m_journal.debug) m_journal.debug <<
- "final terResult=" << transToken (terResult);
-
- return terResult;
- }
-
- // Process a cancellation request that's passed along with an offer.
- if ((tesSUCCESS == terResult) && bHaveCancel)
- {
- uint256 const uCancelIndex (
- Ledger::getOfferIndex (mTxnAccountID, uCancelSequence));
- SLE::pointer sleCancel = mEngine->entryCache (ltOFFER, uCancelIndex);
-
- // It's not an error to not find the offer to cancel: it might have
- // been consumed or removed as we are processing. Additionally, it
- // might not even have been an offer - we don't care.
- if (sleCancel)
- {
- m_journal.warning <<
- "Cancelling order with sequence " << uCancelSequence;
-
- terResult = view.offerDelete (sleCancel);
- }
- }
-
- // Expiration is defined in terms of the close time of the parent ledger,
- // because we definitively know the time that it closed but we do not
- // know the closing time of the ledger that is under construction.
- if (bHaveExpiration &&
- (mEngine->getLedger ()->getParentCloseTimeNC () >= uExpiration))
- {
- return tesSUCCESS;
- }
-
- // If all is well and this isn't an offer to XRP, then we make sure we are
- // authorized to hold what the taker will pay.
- if (tesSUCCESS == terResult && !saTakerPays.isNative ())
- {
- SLE::pointer sleTakerPays = mEngine->entryCache (
- ltACCOUNT_ROOT, Ledger::getAccountRootIndex (uPaysIssuerID));
-
- if (!sleTakerPays)
- {
- m_journal.warning <<
- "delay: can't receive IOUs from non-existent issuer: " <<
- RippleAddress::createHumanAccountID (uPaysIssuerID);
-
- return is_bit_set (mParams, tapRETRY)
- ? terNO_ACCOUNT
- : tecNO_ISSUER;
- }
-
- if (is_bit_set (sleTakerPays->getFieldU32 (sfFlags), lsfRequireAuth))
- {
- SLE::pointer sleRippleState (mEngine->entryCache (
- ltRIPPLE_STATE,
- Ledger::getRippleStateIndex (
- mTxnAccountID, uPaysIssuerID, uPaysCurrency)));
-
- if (!sleRippleState)
- {
- return is_bit_set (mParams, tapRETRY)
- ? terNO_LINE
- : tecNO_LINE;
- }
-
- // Entries have a canonical representation, determined by a
- // lexicographical "greater than" comparison employing strict weak
- // ordering. Determine which entry we need to access.
- bool const canonical_gt (mTxnAccountID > uPaysIssuerID);
-
- bool const need_auth (is_bit_set (
- sleRippleState->getFieldU32 (sfFlags),
- (canonical_gt ? lsfLowAuth : lsfHighAuth)));
-
- if (need_auth)
- {
- if (m_journal.debug) m_journal.debug <<
- "delay: can't receive IOUs from issuer without auth.";
-
- return is_bit_set (mParams, tapRETRY)
- ? terNO_AUTH
- : tecNO_AUTH;
- }
- }
- }
-
- STAmount saPaid;
- STAmount saGot;
- bool const bOpenLedger = is_bit_set (mParams, tapOPEN_LEDGER);
- bool const placeOffer = true;
-
- if (tesSUCCESS == terResult)
- {
- // Take using the parameters of the offer.
- if (m_journal.debug) m_journal.debug <<
- "takeOffers: BEFORE saTakerGets=" << saTakerGets.getFullText ();
-
- auto ret = crossOffers (
- view,
- saTakerGets, // Reverse as we are the taker for taking.
- saTakerPays,
- saPaid, // Buy semantics: how much would have sold at full price. Sell semantics: how much was sold.
- saGot); // How much was got.
-
- terResult = ret.first;
-
- if (terResult == tecFAILED_PROCESSING && bOpenLedger)
- terResult = telFAILED_PROCESSING;
-
- if (m_journal.debug)
- {
- m_journal.debug << "takeOffers=" << terResult;
- m_journal.debug << "takeOffers: saPaid=" << saPaid.getFullText ();
- m_journal.debug << "takeOffers: saGot=" << saGot.getFullText ();
- }
-
- if (tesSUCCESS == terResult)
- {
- // Reduce pay in from takers by what offer just got.
- saTakerPays -= saGot;
-
- // Reduce pay out to takers by what srcAccount just paid.
- saTakerGets -= saPaid;
-
- if (m_journal.debug)
- {
- m_journal.debug <<
- "takeOffers: AFTER saTakerPays=" <<
- saTakerPays.getFullText ();
- m_journal.debug <<
- "takeOffers: AFTER saTakerGets=" <<
- saTakerGets.getFullText ();
- }
- }
- }
-
- if (m_journal.debug)
- {
- m_journal.debug <<
- "takeOffers: saTakerPays=" < " << saTakerGets.getHumanCurrency () <<
- "/" << RippleAddress::createHumanAccountID (saTakerGets.getIssuer ());
-
- // We use the original rate to place the offer.
- uDirectory = Ledger::getQualityIndex (uBookBase, uRate);
-
- // Add offer to order book.
- terResult = view.dirAdd (uBookNode, uDirectory, uLedgerIndex,
- std::bind (&Ledger::qualityDirDescriber, std::placeholders::_1,
- std::placeholders::_2, saTakerPays.getCurrency (),
- uPaysIssuerID, saTakerGets.getCurrency (),
- uGetsIssuerID, uRate));
- }
-
- if (tesSUCCESS == terResult)
- {
- if (m_journal.debug)
- {
- m_journal.debug <<
- "sfAccount=" <<
- RippleAddress::createHumanAccountID (mTxnAccountID);
- m_journal.debug <<
- "uPaysIssuerID=" <<
- RippleAddress::createHumanAccountID (uPaysIssuerID);
- m_journal.debug <<
- "uGetsIssuerID=" <<
- RippleAddress::createHumanAccountID (uGetsIssuerID);
- m_journal.debug <<
- "saTakerPays.isNative()=" <<
- saTakerPays.isNative ();
- m_journal.debug <<
- "saTakerGets.isNative()=" <<
- saTakerGets.isNative ();
- m_journal.debug <<
- "uPaysCurrency=" <<
- saTakerPays.getHumanCurrency ();
- m_journal.debug <<
- "uGetsCurrency=" <<
- saTakerGets.getHumanCurrency ();
- }
-
- SLE::pointer sleOffer (mEngine->entryCreate (ltOFFER, uLedgerIndex));
-
- sleOffer->setFieldAccount (sfAccount, mTxnAccountID);
- sleOffer->setFieldU32 (sfSequence, uSequence);
- sleOffer->setFieldH256 (sfBookDirectory, uDirectory);
- sleOffer->setFieldAmount (sfTakerPays, saTakerPays);
- sleOffer->setFieldAmount (sfTakerGets, saTakerGets);
- sleOffer->setFieldU64 (sfOwnerNode, uOwnerNode);
- sleOffer->setFieldU64 (sfBookNode, uBookNode);
-
- if (uExpiration)
- sleOffer->setFieldU32 (sfExpiration, uExpiration);
-
- if (bPassive)
- sleOffer->setFlag (lsfPassive);
-
- if (bSell)
- sleOffer->setFlag (lsfSell);
-
- if (m_journal.debug) m_journal.debug <<
- "final terResult=" << transToken (terResult) <<
- " sleOffer=" << sleOffer->getJson (0);
- }
- }
-
- if (tesSUCCESS != terResult)
- {
- m_journal.debug <<
- "final terResult=" << transToken (terResult);
- }
-
- return terResult;
+ return std::make_pair(cross_result, taker.remaining_offer ());
}
}
diff --git a/src/ripple_app/transactors/CreateOfferDirect.h b/src/ripple_app/transactors/CreateOfferDirect.h
index d68e25b480..ae00a86ea2 100644
--- a/src/ripple_app/transactors/CreateOfferDirect.h
+++ b/src/ripple_app/transactors/CreateOfferDirect.h
@@ -20,22 +20,21 @@
#ifndef RIPPLE_TX_DIRECT_OFFERCREATE_H_INCLUDED
#define RIPPLE_TX_DIRECT_OFFERCREATE_H_INCLUDED
-#include "../book/OfferStream.h"
-#include "../book/Taker.h"
-
+#include "../book/Amounts.h"
+
#include
namespace ripple {
-class DirectOfferCreateTransactor
- : public OfferCreateTransactor
+class CreateOfferDirect
+ : public CreateOffer
{
public:
- DirectOfferCreateTransactor (
+ CreateOfferDirect (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
- : OfferCreateTransactor (
+ : CreateOffer (
txn,
params,
engine)
@@ -43,15 +42,10 @@ public:
}
- TER doApply () override;
-
private:
- std::pair crossOffers (
+ std::pair crossOffers (
core::LedgerView& view,
- STAmount const& saTakerPays,
- STAmount const& saTakerGets,
- STAmount& saTakerPaid,
- STAmount& saTakerGot);
+ core::Amounts const& taker_amount) override;
};
}
diff --git a/src/ripple_app/transactors/CreateOfferLegacy.cpp b/src/ripple_app/transactors/CreateOfferLegacy.cpp
index dfdd17eff4..bf0fa8e47a 100644
--- a/src/ripple_app/transactors/CreateOfferLegacy.cpp
+++ b/src/ripple_app/transactors/CreateOfferLegacy.cpp
@@ -22,7 +22,7 @@ namespace ripple {
/** Determine if an order is still valid
If the order is not valid it will be marked as unfunded.
*/
-bool ClassicOfferCreateTransactor::isValidOffer (
+bool CreateOfferLegacy::isValidOffer (
SLE::ref sleOffer,
uint160 const& uOfferOwnerID,
STAmount const& saOfferPays,
@@ -97,7 +97,7 @@ bool ClassicOfferCreateTransactor::isValidOffer (
/**
*/
-bool ClassicOfferCreateTransactor::canCross (
+bool CreateOfferLegacy::canCross (
STAmount const& saTakerFunds,
STAmount const& saSubTakerPays,
STAmount const& saSubTakerGets,
@@ -189,7 +189,7 @@ bool ClassicOfferCreateTransactor::canCross (
books as: "give 0.57 BTC for 400 USD" which is what is left to sell at the
original rate.
*/
-bool ClassicOfferCreateTransactor::applyOffer (
+bool CreateOfferLegacy::applyOffer (
const bool bSell,
const std::uint32_t uTakerPaysRate, const std::uint32_t uOfferPaysRate,
const STAmount& saOfferRate,
@@ -327,7 +327,7 @@ bool ClassicOfferCreateTransactor::applyOffer (
@return tesSUCCESS, terNO_ACCOUNT, telFAILED_PROCESSING, or
tecFAILED_PROCESSING
*/
-TER ClassicOfferCreateTransactor::takeOffers (
+TER CreateOfferLegacy::takeOffers (
const bool bOpenLedger,
const bool bPassive,
const bool bSell,
@@ -671,7 +671,7 @@ TER ClassicOfferCreateTransactor::takeOffers (
return terResult;
}
-TER ClassicOfferCreateTransactor::doApply ()
+TER CreateOfferLegacy::doApply ()
{
if (m_journal.debug) m_journal.debug <<
"OfferCreate> " << mTxn.getJson (0);
diff --git a/src/ripple_app/transactors/CreateOfferLegacy.h b/src/ripple_app/transactors/CreateOfferLegacy.h
index ff210d849a..42cd47c1c2 100644
--- a/src/ripple_app/transactors/CreateOfferLegacy.h
+++ b/src/ripple_app/transactors/CreateOfferLegacy.h
@@ -24,30 +24,15 @@
namespace ripple {
-class ClassicOfferCreateTransactor
- : public OfferCreateTransactor
+class CreateOfferLegacy
+ : public CreateOffer
{
-private:
- template
- static std::string
- get_compare_sign (T const& lhs, T const& rhs)
- {
- if (lhs > rhs)
- return ">";
-
- if (rhs > lhs)
- return "<";
-
- // If neither is bigger than the other, they must be equal
- return "=";
- }
-
public:
- ClassicOfferCreateTransactor (
+ CreateOfferLegacy (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
- : OfferCreateTransactor (
+ : CreateOffer (
txn,
params,
engine)
@@ -57,6 +42,13 @@ public:
TER doApply () override;
+ virtual std::pair crossOffers (
+ core::LedgerView& view,
+ core::Amounts const& taker_amount)
+ {
+ return std::make_pair (tesSUCCESS, core::Amounts ());
+ }
+
private:
bool isValidOffer (
SLE::ref sleOfferDir,
diff --git a/src/ripple_app/transactors/Payment.cpp b/src/ripple_app/transactors/Payment.cpp
index 28c7413b32..6cdfc1bccf 100644
--- a/src/ripple_app/transactors/Payment.cpp
+++ b/src/ripple_app/transactors/Payment.cpp
@@ -21,7 +21,7 @@ namespace ripple {
// See https://ripple.com/wiki/Transaction_Format#Payment_.280.29
-TER PaymentTransactor::doApply ()
+TER Payment::doApply ()
{
// Ripple if source or destination is non-native or if there are paths.
std::uint32_t const uTxFlags = mTxn.getFlags ();
diff --git a/src/ripple_app/transactors/Payment.h b/src/ripple_app/transactors/Payment.h
index 57502336ef..c0042f1aaf 100644
--- a/src/ripple_app/transactors/Payment.h
+++ b/src/ripple_app/transactors/Payment.h
@@ -22,23 +22,23 @@
namespace ripple {
-class PaymentTransactorLog;
+class PaymentLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/Payment";
}
-class PaymentTransactor
+class Payment
: public Transactor
{
/* The largest number of paths we allow */
static std::size_t const MaxPathSize = 6;
public:
- PaymentTransactor (
+ Payment (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -46,7 +46,7 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
@@ -54,6 +54,16 @@ public:
TER doApply ();
};
+inline
+std::unique_ptr
+make_Payment (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/SetAccount.cpp b/src/ripple_app/transactors/SetAccount.cpp
index 139aae6bd8..eec0be68bb 100644
--- a/src/ripple_app/transactors/SetAccount.cpp
+++ b/src/ripple_app/transactors/SetAccount.cpp
@@ -19,7 +19,7 @@
namespace ripple {
-TER AccountSetTransactor::doApply ()
+TER SetAccount::doApply ()
{
std::uint32_t const uTxFlags = mTxn.getFlags ();
diff --git a/src/ripple_app/transactors/SetAccount.h b/src/ripple_app/transactors/SetAccount.h
index 2e1c6959d4..7eddb09c4a 100644
--- a/src/ripple_app/transactors/SetAccount.h
+++ b/src/ripple_app/transactors/SetAccount.h
@@ -22,20 +22,20 @@
namespace ripple {
-class AccountSetTransactorLog;
+class SetAccountLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/AccountSet";
}
-class AccountSetTransactor
+class SetAccount
: public Transactor
{
public:
- AccountSetTransactor (
+ SetAccount (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -43,7 +43,7 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
@@ -51,6 +51,16 @@ public:
TER doApply () override;
};
+inline
+std::unique_ptr
+make_SetAccount (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/SetRegularKey.cpp b/src/ripple_app/transactors/SetRegularKey.cpp
index 2e472bcfcd..883bdbae59 100644
--- a/src/ripple_app/transactors/SetRegularKey.cpp
+++ b/src/ripple_app/transactors/SetRegularKey.cpp
@@ -19,7 +19,7 @@
namespace ripple {
-std::uint64_t RegularKeySetTransactor::calculateBaseFee ()
+std::uint64_t SetRegularKey::calculateBaseFee ()
{
if ( mTxnAccount
&& (! (mTxnAccount->getFlags () & lsfPasswordSpent))
@@ -33,7 +33,7 @@ std::uint64_t RegularKeySetTransactor::calculateBaseFee ()
}
-TER RegularKeySetTransactor::doApply ()
+TER SetRegularKey::doApply ()
{
std::uint32_t const uTxFlags = mTxn.getFlags ();
diff --git a/src/ripple_app/transactors/SetRegularKey.h b/src/ripple_app/transactors/SetRegularKey.h
index 3b05e66c09..d333d55680 100644
--- a/src/ripple_app/transactors/SetRegularKey.h
+++ b/src/ripple_app/transactors/SetRegularKey.h
@@ -22,22 +22,22 @@
namespace ripple {
-class RegularKeySetTransactorLog;
+class SetRegularKeyLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/RegularKeySet";
}
-class RegularKeySetTransactor
+class SetRegularKey
: public Transactor
{
std::uint64_t calculateBaseFee ();
public:
- RegularKeySetTransactor (
+ SetRegularKey (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -45,7 +45,7 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
@@ -54,6 +54,16 @@ public:
TER doApply ();
};
+inline
+std::unique_ptr
+make_SetRegularKey (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/SetTrust.cpp b/src/ripple_app/transactors/SetTrust.cpp
index 4489277ead..2c1da26a82 100644
--- a/src/ripple_app/transactors/SetTrust.cpp
+++ b/src/ripple_app/transactors/SetTrust.cpp
@@ -19,7 +19,7 @@
namespace ripple {
-TER TrustSetTransactor::doApply ()
+TER SetTrust::doApply ()
{
TER terResult = tesSUCCESS;
diff --git a/src/ripple_app/transactors/SetTrust.h b/src/ripple_app/transactors/SetTrust.h
index 67c8b692d1..b9503c0699 100644
--- a/src/ripple_app/transactors/SetTrust.h
+++ b/src/ripple_app/transactors/SetTrust.h
@@ -22,20 +22,20 @@
namespace ripple {
-class TrustSetTransactorLog;
+class SetTrustLog;
template <>
char const*
-LogPartition::getPartitionName ()
+LogPartition::getPartitionName ()
{
return "Tx/TrustSet";
}
-class TrustSetTransactor
+class SetTrust
: public Transactor
{
public:
- TrustSetTransactor (
+ SetTrust (
SerializedTransaction const& txn,
TransactionEngineParams params,
TransactionEngine* engine)
@@ -43,13 +43,23 @@ public:
txn,
params,
engine,
- LogPartition::getJournal ())
+ LogPartition::getJournal ())
{
}
TER doApply ();
};
+inline
+std::unique_ptr
+make_SetTrust (
+ SerializedTransaction const& txn,
+ TransactionEngineParams params,
+ TransactionEngine* engine)
+{
+ return std::make_unique (txn, params, engine);
+}
+
}
#endif
diff --git a/src/ripple_app/transactors/Transactor.cpp b/src/ripple_app/transactors/Transactor.cpp
index de1b6fe4f9..840d1652b5 100644
--- a/src/ripple_app/transactors/Transactor.cpp
+++ b/src/ripple_app/transactors/Transactor.cpp
@@ -37,36 +37,29 @@ std::unique_ptr Transactor::makeTransactor (
switch (txn.getTxnType ())
{
case ttPAYMENT:
- return std::unique_ptr (
- new PaymentTransactor (txn, params, engine));
+ return make_Payment (txn, params, engine);
case ttACCOUNT_SET:
- return std::unique_ptr (
- new AccountSetTransactor (txn, params, engine));
+ return make_SetAccount (txn, params, engine);
case ttREGULAR_KEY_SET:
- return std::unique_ptr (
- new RegularKeySetTransactor (txn, params, engine));
+ return make_SetRegularKey (txn, params, engine);
case ttTRUST_SET:
- return std::unique_ptr (
- new TrustSetTransactor (txn, params, engine));
+ return make_SetTrust (txn, params, engine);
case ttOFFER_CREATE:
- return make_OfferCreateTransactor (txn, params, engine);
+ return make_CreateOffer (txn, params, engine);
case ttOFFER_CANCEL:
- return std::unique_ptr (
- new OfferCancelTransactor (txn, params, engine));
+ return make_CancelOffer (txn, params, engine);
case ttWALLET_ADD:
- return std::unique_ptr (
- new WalletAddTransactor (txn, params, engine));
+ return make_AddWallet (txn, params, engine);
case ttAMENDMENT:
case ttFEE:
- return std::unique_ptr (
- new ChangeTransactor (txn, params, engine));
+ return make_Change (txn, params, engine);
default:
return std::unique_ptr ();
@@ -229,11 +222,12 @@ TER Transactor::preCheck ()
}
// Extract signing key
- // Transactions contain a signing key. This allows us to trivially verify a transaction has at least been properly signed
- // without going to disk. Each transaction also notes a source account id. This is used to verify that the signing key is
- // associated with the account.
+ // Transactions contain a signing key. This allows us to trivially verify a
+ // transaction has at least been properly signed without going to disk.
+ // Each transaction also notes a source account id. This is used to verify
+ // that the signing key is associated with the account.
// XXX This could be a lot cleaner to prevent unnecessary copying.
- mSigningPubKey = RippleAddress::createAccountPublic (mTxn.getSigningPubKey ());
+ mSigningPubKey = RippleAddress::createAccountPublic (mTxn.getSigningPubKey ());
// Consistency: really signed.
if (!mTxn.isKnownGood ())
diff --git a/src/ripple_basics/utility/StringUtilities.cpp b/src/ripple_basics/utility/StringUtilities.cpp
index c63e6249ec..3138af1651 100644
--- a/src/ripple_basics/utility/StringUtilities.cpp
+++ b/src/ripple_basics/utility/StringUtilities.cpp
@@ -262,25 +262,6 @@ bool parseUrl (const std::string& strUrl, std::string& strScheme, std::string& s
return bMatch;
}
-//
-// Quality parsing
-// - integers as is.
-// - floats multiplied by a billion
-bool parseQuality (const std::string& strSource, std::uint32_t& uQuality)
-{
- uQuality = beast::lexicalCast (strSource);
-
- if (!uQuality)
- {
- float fQuality = beast::lexicalCast (strSource);
-
- if (fQuality)
- uQuality = (std::uint32_t) (QUALITY_ONE * fQuality);
- }
-
- return !!uQuality;
-}
-
beast::StringPairArray parseDelimitedKeyValueString (beast::String parameters,
beast::beast_wchar delimiter)
{
diff --git a/src/ripple_basics/utility/StringUtilities.h b/src/ripple_basics/utility/StringUtilities.h
index 1776540c3b..d63749d506 100644
--- a/src/ripple_basics/utility/StringUtilities.h
+++ b/src/ripple_basics/utility/StringUtilities.h
@@ -111,7 +111,6 @@ Blob strCopy (const std::string& strSrc);
std::string strCopy (Blob const& vucSrc);
bool parseIpPort (const std::string& strSource, std::string& strIP, int& iPort);
-bool parseQuality (const std::string& strSource, std::uint32_t& uQuality);
inline std::string strGetEnv (const std::string& strKey)
{
diff --git a/src/ripple_data/protocol/STAmount.cpp b/src/ripple_data/protocol/STAmount.cpp
index c6dc584866..ad654c2b05 100644
--- a/src/ripple_data/protocol/STAmount.cpp
+++ b/src/ripple_data/protocol/STAmount.cpp
@@ -920,6 +920,7 @@ STAmount operator- (const STAmount& v1, const STAmount& v2)
return STAmount (v1.getFName (), v1.mCurrency, v1.mIssuer, -fv, ov1, true);
}
+// NIKB TODO Make Amount::divide skip math if den == QUALITY_ONE
STAmount STAmount::divide (const STAmount& num, const STAmount& den, const uint160& uCurrencyID, const uint160& uIssuerID)
{
if (den == zero)