Last active
October 29, 2023 16:40
-
-
Save kassane/414fc5b0bf58acaa7855c82b29e26ea9 to your computer and use it in GitHub Desktop.
[Draft] TigerBeetle Client - Pascal binding
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@nogc nothrow: | |
extern(C): __gshared: | |
////////////////////////////////////////////////////////// | |
// This file was auto-generated by tb_client_header.zig // | |
// Do not manually modify. // | |
////////////////////////////////////////////////////////// | |
import core.stdc.stdint; | |
import core.int128; | |
alias tb_uint128_t = Cent; | |
enum TB_ACCOUNT_FLAGS { | |
TB_ACCOUNT_LINKED = 1 << 0, | |
TB_ACCOUNT_DEBITS_MUST_NOT_EXCEED_CREDITS = 1 << 1, | |
TB_ACCOUNT_CREDITS_MUST_NOT_EXCEED_DEBITS = 1 << 2, | |
} | |
alias TB_ACCOUNT_LINKED = TB_ACCOUNT_FLAGS.TB_ACCOUNT_LINKED; | |
alias TB_ACCOUNT_DEBITS_MUST_NOT_EXCEED_CREDITS = TB_ACCOUNT_FLAGS.TB_ACCOUNT_DEBITS_MUST_NOT_EXCEED_CREDITS; | |
alias TB_ACCOUNT_CREDITS_MUST_NOT_EXCEED_DEBITS = TB_ACCOUNT_FLAGS.TB_ACCOUNT_CREDITS_MUST_NOT_EXCEED_DEBITS; | |
struct tb_account_t { | |
tb_uint128_t id; | |
tb_uint128_t debits_pending; | |
tb_uint128_t debits_posted; | |
tb_uint128_t credits_pending; | |
tb_uint128_t credits_posted; | |
tb_uint128_t user_data_128; | |
ulong user_data_64; | |
uint user_data_32; | |
uint reserved; | |
uint ledger; | |
ushort code; | |
ushort flags; | |
ulong timestamp; | |
} | |
enum TB_TRANSFER_FLAGS { | |
TB_TRANSFER_LINKED = 1 << 0, | |
TB_TRANSFER_PENDING = 1 << 1, | |
TB_TRANSFER_POST_PENDING_TRANSFER = 1 << 2, | |
TB_TRANSFER_VOID_PENDING_TRANSFER = 1 << 3, | |
TB_TRANSFER_BALANCING_DEBIT = 1 << 4, | |
TB_TRANSFER_BALANCING_CREDIT = 1 << 5, | |
} | |
alias TB_TRANSFER_LINKED = TB_TRANSFER_FLAGS.TB_TRANSFER_LINKED; | |
alias TB_TRANSFER_PENDING = TB_TRANSFER_FLAGS.TB_TRANSFER_PENDING; | |
alias TB_TRANSFER_POST_PENDING_TRANSFER = TB_TRANSFER_FLAGS.TB_TRANSFER_POST_PENDING_TRANSFER; | |
alias TB_TRANSFER_VOID_PENDING_TRANSFER = TB_TRANSFER_FLAGS.TB_TRANSFER_VOID_PENDING_TRANSFER; | |
alias TB_TRANSFER_BALANCING_DEBIT = TB_TRANSFER_FLAGS.TB_TRANSFER_BALANCING_DEBIT; | |
alias TB_TRANSFER_BALANCING_CREDIT = TB_TRANSFER_FLAGS.TB_TRANSFER_BALANCING_CREDIT; | |
struct tb_transfer_t { | |
tb_uint128_t id; | |
tb_uint128_t debit_account_id; | |
tb_uint128_t credit_account_id; | |
tb_uint128_t amount; | |
tb_uint128_t pending_id; | |
tb_uint128_t user_data_128; | |
ulong user_data_64; | |
uint user_data_32; | |
uint timeout; | |
uint ledger; | |
ushort code; | |
ushort flags; | |
ulong timestamp; | |
} | |
enum TB_CREATE_ACCOUNT_RESULT { | |
TB_CREATE_ACCOUNT_OK = 0, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED = 1, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN = 2, | |
TB_CREATE_ACCOUNT_TIMESTAMP_MUST_BE_ZERO = 3, | |
TB_CREATE_ACCOUNT_RESERVED_FIELD = 4, | |
TB_CREATE_ACCOUNT_RESERVED_FLAG = 5, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_ZERO = 6, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 7, | |
TB_CREATE_ACCOUNT_FLAGS_ARE_MUTUALLY_EXCLUSIVE = 8, | |
TB_CREATE_ACCOUNT_DEBITS_PENDING_MUST_BE_ZERO = 9, | |
TB_CREATE_ACCOUNT_DEBITS_POSTED_MUST_BE_ZERO = 10, | |
TB_CREATE_ACCOUNT_CREDITS_PENDING_MUST_BE_ZERO = 11, | |
TB_CREATE_ACCOUNT_CREDITS_POSTED_MUST_BE_ZERO = 12, | |
TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO = 13, | |
TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO = 14, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_FLAGS = 15, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_128 = 16, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_64 = 17, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_32 = 18, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_LEDGER = 19, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_CODE = 20, | |
TB_CREATE_ACCOUNT_EXISTS = 21, | |
} | |
alias TB_CREATE_ACCOUNT_OK = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_OK; | |
alias TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED; | |
alias TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN; | |
alias TB_CREATE_ACCOUNT_TIMESTAMP_MUST_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_TIMESTAMP_MUST_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_RESERVED_FIELD = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_RESERVED_FIELD; | |
alias TB_CREATE_ACCOUNT_RESERVED_FLAG = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_RESERVED_FLAG; | |
alias TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_INT_MAX; | |
alias TB_CREATE_ACCOUNT_FLAGS_ARE_MUTUALLY_EXCLUSIVE = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_FLAGS_ARE_MUTUALLY_EXCLUSIVE; | |
alias TB_CREATE_ACCOUNT_DEBITS_PENDING_MUST_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_DEBITS_PENDING_MUST_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_DEBITS_POSTED_MUST_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_DEBITS_POSTED_MUST_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_CREDITS_PENDING_MUST_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_CREDITS_PENDING_MUST_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_CREDITS_POSTED_MUST_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_CREDITS_POSTED_MUST_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_FLAGS = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_FLAGS; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_128 = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_128; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_64 = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_64; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_32 = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_32; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_LEDGER = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_LEDGER; | |
alias TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_CODE = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_CODE; | |
alias TB_CREATE_ACCOUNT_EXISTS = TB_CREATE_ACCOUNT_RESULT.TB_CREATE_ACCOUNT_EXISTS; | |
enum TB_CREATE_TRANSFER_RESULT { | |
TB_CREATE_TRANSFER_OK = 0, | |
TB_CREATE_TRANSFER_LINKED_EVENT_FAILED = 1, | |
TB_CREATE_TRANSFER_LINKED_EVENT_CHAIN_OPEN = 2, | |
TB_CREATE_TRANSFER_TIMESTAMP_MUST_BE_ZERO = 3, | |
TB_CREATE_TRANSFER_RESERVED_FLAG = 4, | |
TB_CREATE_TRANSFER_ID_MUST_NOT_BE_ZERO = 5, | |
TB_CREATE_TRANSFER_ID_MUST_NOT_BE_INT_MAX = 6, | |
TB_CREATE_TRANSFER_FLAGS_ARE_MUTUALLY_EXCLUSIVE = 7, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = 8, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 9, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = 10, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 11, | |
TB_CREATE_TRANSFER_ACCOUNTS_MUST_BE_DIFFERENT = 12, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_ZERO = 13, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO = 14, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX = 15, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT = 16, | |
TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER = 17, | |
TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO = 18, | |
TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO = 19, | |
TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO = 20, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND = 21, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND = 22, | |
TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER = 23, | |
TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS = 24, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND = 25, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING = 26, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID = 27, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID = 28, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER = 29, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE = 30, | |
TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT = 31, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT = 32, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED = 33, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED = 34, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED = 35, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS = 36, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID = 37, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID = 38, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT = 39, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID = 40, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_128 = 41, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_64 = 42, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_32 = 43, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT = 44, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE = 45, | |
TB_CREATE_TRANSFER_EXISTS = 46, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING = 47, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING = 48, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED = 49, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED = 50, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS = 51, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS = 52, | |
TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = 53, | |
TB_CREATE_TRANSFER_EXCEEDS_CREDITS = 54, | |
TB_CREATE_TRANSFER_EXCEEDS_DEBITS = 55, | |
} | |
alias TB_CREATE_TRANSFER_OK = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OK; | |
alias TB_CREATE_TRANSFER_LINKED_EVENT_FAILED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_LINKED_EVENT_FAILED; | |
alias TB_CREATE_TRANSFER_LINKED_EVENT_CHAIN_OPEN = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_LINKED_EVENT_CHAIN_OPEN; | |
alias TB_CREATE_TRANSFER_TIMESTAMP_MUST_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_TIMESTAMP_MUST_BE_ZERO; | |
alias TB_CREATE_TRANSFER_RESERVED_FLAG = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_RESERVED_FLAG; | |
alias TB_CREATE_TRANSFER_ID_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_ID_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_ID_MUST_NOT_BE_INT_MAX = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_ID_MUST_NOT_BE_INT_MAX; | |
alias TB_CREATE_TRANSFER_FLAGS_ARE_MUTUALLY_EXCLUSIVE = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_FLAGS_ARE_MUTUALLY_EXCLUSIVE; | |
alias TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX; | |
alias TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX; | |
alias TB_CREATE_TRANSFER_ACCOUNTS_MUST_BE_DIFFERENT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_ACCOUNTS_MUST_BE_DIFFERENT; | |
alias TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_ZERO; | |
alias TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX; | |
alias TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT; | |
alias TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER; | |
alias TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO; | |
alias TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND; | |
alias TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND; | |
alias TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER; | |
alias TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE; | |
alias TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED; | |
alias TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_128 = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_128; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_64 = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_64; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_32 = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_32; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT; | |
alias TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE; | |
alias TB_CREATE_TRANSFER_EXISTS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXISTS; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_DEBITS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_DEBITS; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_CREDITS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_CREDITS; | |
alias TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT; | |
alias TB_CREATE_TRANSFER_EXCEEDS_CREDITS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXCEEDS_CREDITS; | |
alias TB_CREATE_TRANSFER_EXCEEDS_DEBITS = TB_CREATE_TRANSFER_RESULT.TB_CREATE_TRANSFER_EXCEEDS_DEBITS; | |
struct tb_create_accounts_result_t { | |
uint index; | |
uint result; | |
} | |
struct tb_create_transfers_result_t { | |
uint index; | |
uint result; | |
} | |
enum TB_OPERATION { | |
TB_OPERATION_CREATE_ACCOUNTS = 128, | |
TB_OPERATION_CREATE_TRANSFERS = 129, | |
TB_OPERATION_LOOKUP_ACCOUNTS = 130, | |
TB_OPERATION_LOOKUP_TRANSFERS = 131, | |
} | |
alias TB_OPERATION_CREATE_ACCOUNTS = TB_OPERATION.TB_OPERATION_CREATE_ACCOUNTS; | |
alias TB_OPERATION_CREATE_TRANSFERS = TB_OPERATION.TB_OPERATION_CREATE_TRANSFERS; | |
alias TB_OPERATION_LOOKUP_ACCOUNTS = TB_OPERATION.TB_OPERATION_LOOKUP_ACCOUNTS; | |
alias TB_OPERATION_LOOKUP_TRANSFERS = TB_OPERATION.TB_OPERATION_LOOKUP_TRANSFERS; | |
enum TB_PACKET_STATUS { | |
TB_PACKET_OK = 0, | |
TB_PACKET_TOO_MUCH_DATA = 1, | |
TB_PACKET_INVALID_OPERATION = 2, | |
TB_PACKET_INVALID_DATA_SIZE = 3, | |
} | |
alias TB_PACKET_OK = TB_PACKET_STATUS.TB_PACKET_OK; | |
alias TB_PACKET_TOO_MUCH_DATA = TB_PACKET_STATUS.TB_PACKET_TOO_MUCH_DATA; | |
alias TB_PACKET_INVALID_OPERATION = TB_PACKET_STATUS.TB_PACKET_INVALID_OPERATION; | |
alias TB_PACKET_INVALID_DATA_SIZE = TB_PACKET_STATUS.TB_PACKET_INVALID_DATA_SIZE; | |
enum TB_PACKET_ACQUIRE_STATUS { | |
TB_PACKET_ACQUIRE_OK = 0, | |
TB_PACKET_ACQUIRE_CONCURRENCY_MAX_EXCEEDED = 1, | |
TB_PACKET_ACQUIRE_SHUTDOWN = 2, | |
} | |
alias TB_PACKET_ACQUIRE_OK = TB_PACKET_ACQUIRE_STATUS.TB_PACKET_ACQUIRE_OK; | |
alias TB_PACKET_ACQUIRE_CONCURRENCY_MAX_EXCEEDED = TB_PACKET_ACQUIRE_STATUS.TB_PACKET_ACQUIRE_CONCURRENCY_MAX_EXCEEDED; | |
alias TB_PACKET_ACQUIRE_SHUTDOWN = TB_PACKET_ACQUIRE_STATUS.TB_PACKET_ACQUIRE_SHUTDOWN; | |
struct tb_packet_t { | |
tb_packet_t* next; | |
void* user_data; | |
ubyte operation; | |
ubyte status; | |
uint data_size; | |
void* data; | |
} | |
alias tb_client_t = void*; | |
enum TB_STATUS { | |
TB_STATUS_SUCCESS = 0, | |
TB_STATUS_UNEXPECTED = 1, | |
TB_STATUS_OUT_OF_MEMORY = 2, | |
TB_STATUS_ADDRESS_INVALID = 3, | |
TB_STATUS_ADDRESS_LIMIT_EXCEEDED = 4, | |
TB_STATUS_CONCURRENCY_MAX_INVALID = 5, | |
TB_STATUS_SYSTEM_RESOURCES = 6, | |
TB_STATUS_NETWORK_SUBSYSTEM = 7, | |
} | |
alias TB_STATUS_SUCCESS = TB_STATUS.TB_STATUS_SUCCESS; | |
alias TB_STATUS_UNEXPECTED = TB_STATUS.TB_STATUS_UNEXPECTED; | |
alias TB_STATUS_OUT_OF_MEMORY = TB_STATUS.TB_STATUS_OUT_OF_MEMORY; | |
alias TB_STATUS_ADDRESS_INVALID = TB_STATUS.TB_STATUS_ADDRESS_INVALID; | |
alias TB_STATUS_ADDRESS_LIMIT_EXCEEDED = TB_STATUS.TB_STATUS_ADDRESS_LIMIT_EXCEEDED; | |
alias TB_STATUS_CONCURRENCY_MAX_INVALID = TB_STATUS.TB_STATUS_CONCURRENCY_MAX_INVALID; | |
alias TB_STATUS_SYSTEM_RESOURCES = TB_STATUS.TB_STATUS_SYSTEM_RESOURCES; | |
alias TB_STATUS_NETWORK_SUBSYSTEM = TB_STATUS.TB_STATUS_NETWORK_SUBSYSTEM; | |
TB_STATUS tb_client_init(tb_client_t* out_client, uint cluster_id, const(char)* address_ptr, uint address_len, uint packets_count, uintptr_t on_completion_ctx, void function(uintptr_t, tb_client_t, tb_packet_t*, const(ubyte)*, uint) on_completion_fn); | |
TB_STATUS tb_client_init_echo(tb_client_t* out_client, uint cluster_id, const(char)* address_ptr, uint address_len, uint packets_count, uintptr_t on_completion_ctx, void function(uintptr_t, tb_client_t, tb_packet_t*, const(ubyte)*, uint) on_completion_fn); | |
TB_PACKET_ACQUIRE_STATUS tb_client_acquire_packet(tb_client_t client, tb_packet_t** out_packet); | |
void tb_client_release_packet(tb_client_t client, tb_packet_t* packet); | |
void tb_client_submit(tb_client_t client, tb_packet_t* packet); | |
void tb_client_deinit(tb_client_t client); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Based on tb_client.h | |
unit TBClient; | |
{$IFDEF FPC} | |
{$MODE DELPHI} | |
{$ENDIF} | |
interface | |
uses | |
ctypes; | |
type | |
tb_uint128_t = UInt64; | |
TB_ACCOUNT_FLAGS = ( | |
TB_ACCOUNT_LINKED, | |
TB_ACCOUNT_DEBITS_MUST_NOT_EXCEED_CREDITS, | |
TB_ACCOUNT_CREDITS_MUST_NOT_EXCEED_DEBITS | |
); | |
tb_account_t = record | |
id: tb_uint128_t; | |
debits_pending: tb_uint128_t; | |
debits_posted: tb_uint128_t; | |
credits_pending: tb_uint128_t; | |
credits_posted: tb_uint128_t; | |
user_data_128: tb_uint128_t; | |
user_data_64: UInt64; | |
user_data_32: UInt32; | |
reserved: UInt32; | |
ledger: UInt32; | |
code: UInt16; | |
flags: UInt16; | |
timestamp: UInt64; | |
end; | |
TB_TRANSFER_FLAGS = ( | |
TB_TRANSFER_LINKED, | |
TB_TRANSFER_PENDING, | |
TB_TRANSFER_POST_PENDING_TRANSFER, | |
TB_TRANSFER_VOID_PENDING_TRANSFER, | |
TB_TRANSFER_BALANCING_DEBIT, | |
TB_TRANSFER_BALANCING_CREDIT | |
); | |
tb_transfer_t = record | |
id: tb_uint128_t; | |
debit_account_id: tb_uint128_t; | |
credit_account_id: tb_uint128_t; | |
amount: tb_uint128_t; | |
pending_id: tb_uint128_t; | |
user_data_128: tb_uint128_t; | |
user_data_64: UInt64; | |
user_data_32: UInt32; | |
timeout: UInt32; | |
ledger: UInt32; | |
code: UInt16; | |
flags: UInt16; | |
timestamp: UInt64; | |
end; | |
type | |
TB_CREATE_ACCOUNT_RESULT = ( | |
TB_CREATE_ACCOUNT_OK = 0, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED = 1, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN = 2, | |
TB_CREATE_ACCOUNT_TIMESTAMP_MUST_BE_ZERO = 3, | |
TB_CREATE_ACCOUNT_RESERVED_FLAG = 4, | |
TB_CREATE_ACCOUNT_RESERVED_FIELD = 5, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_ZERO = 6, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 7, | |
TB_CREATE_ACCOUNT_FLAGS_ARE_MUTUALLY_EXCLUSIVE = 8, | |
TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO = 9, | |
TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO = 10, | |
TB_CREATE_ACCOUNT_DEBITS_PENDING_MUST_BE_ZERO = 11, | |
TB_CREATE_ACCOUNT_DEBITS_POSTED_MUST_BE_ZERO = 12, | |
TB_CREATE_ACCOUNT_CREDITS_PENDING_MUST_BE_ZERO = 13, | |
TB_CREATE_ACCOUNT_CREDITS_POSTED_MUST_BE_ZERO = 14, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_FLAGS = 15, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA = 16, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_LEDGER = 17, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_CODE = 18, | |
TB_CREATE_ACCOUNT_EXISTS = 19 | |
); | |
type | |
TB_CREATE_ACCOUNT_RESULT = ( | |
TB_CREATE_ACCOUNT_OK = 0, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_FAILED = 1, | |
TB_CREATE_ACCOUNT_LINKED_EVENT_CHAIN_OPEN = 2, | |
TB_CREATE_ACCOUNT_TIMESTAMP_MUST_BE_ZERO = 3, | |
TB_CREATE_ACCOUNT_RESERVED_FIELD = 4, | |
TB_CREATE_ACCOUNT_RESERVED_FLAG = 5, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_ZERO = 6, | |
TB_CREATE_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 7, | |
TB_CREATE_ACCOUNT_FLAGS_ARE_MUTUALLY_EXCLUSIVE = 8, | |
TB_CREATE_ACCOUNT_DEBITS_PENDING_MUST_BE_ZERO = 9, | |
TB_CREATE_ACCOUNT_DEBITS_POSTED_MUST_BE_ZERO = 10, | |
TB_CREATE_ACCOUNT_CREDITS_PENDING_MUST_BE_ZERO = 11, | |
TB_CREATE_ACCOUNT_CREDITS_POSTED_MUST_BE_ZERO = 12, | |
TB_CREATE_ACCOUNT_LEDGER_MUST_NOT_BE_ZERO = 13, | |
TB_CREATE_ACCOUNT_CODE_MUST_NOT_BE_ZERO = 14, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_FLAGS = 15, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_128 = 16, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_64 = 17, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_USER_DATA_32 = 18, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_LEDGER = 19, | |
TB_CREATE_ACCOUNT_EXISTS_WITH_DIFFERENT_CODE = 20, | |
TB_CREATE_ACCOUNT_EXISTS = 21 | |
); | |
type | |
TB_CREATE_TRANSFER_RESULT = ( | |
TB_CREATE_TRANSFER_OK = 0, | |
TB_CREATE_TRANSFER_LINKED_EVENT_FAILED = 1, | |
TB_CREATE_TRANSFER_LINKED_EVENT_CHAIN_OPEN = 2, | |
TB_CREATE_TRANSFER_TIMESTAMP_MUST_BE_ZERO = 3, | |
TB_CREATE_TRANSFER_RESERVED_FLAG = 4, | |
TB_CREATE_TRANSFER_ID_MUST_NOT_BE_ZERO = 5, | |
TB_CREATE_TRANSFER_ID_MUST_NOT_BE_INT_MAX = 6, | |
TB_CREATE_TRANSFER_FLAGS_ARE_MUTUALLY_EXCLUSIVE = 7, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = 8, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 9, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_ZERO = 10, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_ID_MUST_NOT_BE_INT_MAX = 11, | |
TB_CREATE_TRANSFER_ACCOUNTS_MUST_BE_DIFFERENT = 12, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_ZERO = 13, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_ZERO = 14, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_NOT_BE_INT_MAX = 15, | |
TB_CREATE_TRANSFER_PENDING_ID_MUST_BE_DIFFERENT = 16, | |
TB_CREATE_TRANSFER_TIMEOUT_RESERVED_FOR_PENDING_TRANSFER = 17, | |
TB_CREATE_TRANSFER_AMOUNT_MUST_NOT_BE_ZERO = 18, | |
TB_CREATE_TRANSFER_LEDGER_MUST_NOT_BE_ZERO = 19, | |
TB_CREATE_TRANSFER_CODE_MUST_NOT_BE_ZERO = 20, | |
TB_CREATE_TRANSFER_DEBIT_ACCOUNT_NOT_FOUND = 21, | |
TB_CREATE_TRANSFER_CREDIT_ACCOUNT_NOT_FOUND = 22, | |
TB_CREATE_TRANSFER_ACCOUNTS_MUST_HAVE_THE_SAME_LEDGER = 23, | |
TB_CREATE_TRANSFER_TRANSFER_MUST_HAVE_THE_SAME_LEDGER_AS_ACCOUNTS = 24, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_FOUND = 25, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_NOT_PENDING = 26, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_DEBIT_ACCOUNT_ID = 27, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CREDIT_ACCOUNT_ID = 28, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_LEDGER = 29, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_CODE = 30, | |
TB_CREATE_TRANSFER_EXCEEDS_PENDING_TRANSFER_AMOUNT = 31, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_HAS_DIFFERENT_AMOUNT = 32, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_POSTED = 33, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_ALREADY_VOIDED = 34, | |
TB_CREATE_TRANSFER_PENDING_TRANSFER_EXPIRED = 35, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_FLAGS = 36, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_DEBIT_ACCOUNT_ID = 37, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CREDIT_ACCOUNT_ID = 38, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_AMOUNT = 39, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_PENDING_ID = 40, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_128 = 41, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_64 = 42, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_USER_DATA_32 = 43, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_TIMEOUT = 44, | |
TB_CREATE_TRANSFER_EXISTS_WITH_DIFFERENT_CODE = 45, | |
TB_CREATE_TRANSFER_EXISTS = 46, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_PENDING = 47, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_PENDING = 48, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS_POSTED = 49, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS_POSTED = 50, | |
TB_CREATE_TRANSFER_OVERFLOWS_DEBITS = 51, | |
TB_CREATE_TRANSFER_OVERFLOWS_CREDITS = 52, | |
TB_CREATE_TRANSFER_OVERFLOWS_TIMEOUT = 53, | |
TB_CREATE_TRANSFER_EXCEEDS_CREDITS = 54, | |
TB_CREATE_TRANSFER_EXCEEDS_DEBITS = 55, | |
); | |
type | |
tb_create_accounts_result_t = record | |
index: LongWord; | |
result: LongWord; | |
end; | |
tb_create_transfers_result_t = record | |
index: LongWord; | |
result: LongWord; | |
end; | |
TB_OPERATION = ( | |
TB_OPERATION_CREATE_ACCOUNTS = 128, | |
TB_OPERATION_CREATE_TRANSFERS = 129, | |
TB_OPERATION_LOOKUP_ACCOUNTS = 130, | |
TB_OPERATION_LOOKUP_TRANSFERS = 131 | |
); | |
TB_PACKET_STATUS = ( | |
TB_PACKET_OK = 0, | |
TB_PACKET_TOO_MUCH_DATA = 1, | |
TB_PACKET_INVALID_OPERATION = 2, | |
TB_PACKET_INVALID_DATA_SIZE = 3 | |
); | |
TB_PACKET_ACQUIRE_STATUS = ( | |
TB_PACKET_ACQUIRE_OK = 0, | |
TB_PACKET_ACQUIRE_CONCURRENCY_MAX_EXCEEDED = 1, | |
TB_PACKET_ACQUIRE_SHUTDOWN = 2 | |
); | |
tb_packet_t = record | |
next: ^tb_packet_t; | |
user_data: Pointer; | |
operation: Byte; | |
status: Byte; | |
data_size: LongWord; | |
data: Pointer; | |
end; | |
tb_client_t = Pointer; | |
TB_STATUS = ( | |
TB_STATUS_SUCCESS = 0, | |
TB_STATUS_UNEXPECTED = 1, | |
TB_STATUS_OUT_OF_MEMORY = 2, | |
TB_STATUS_ADDRESS_INVALID = 3, | |
TB_STATUS_ADDRESS_LIMIT_EXCEEDED = 4, | |
TB_STATUS_CONCURRENCY_MAX_INVALID = 5, | |
TB_STATUS_SYSTEM_RESOURCES = 6, | |
TB_STATUS_NETWORK_SUBSYSTEM = 7 | |
); | |
function tb_client_init( | |
out_client: ^tb_client_t; | |
cluster_id: Cardinal; | |
address_ptr: PChar; | |
address_len: Cardinal; | |
packets_count: Cardinal; | |
on_completion_ctx: UIntPtr; | |
on_completion_fn: procedure(on_completion_ctx: UIntPtr; client: tb_client_t; packet: ^tb_packet_t; const data: PByte; data_len: Cardinal) | |
): TB_STATUS; cdecl; | |
function tb_client_init_echo( | |
out_client: ^tb_client_t; | |
cluster_id: Cardinal; | |
address_ptr: PChar; | |
address_len: Cardinal; | |
packets_count: Cardinal; | |
on_completion_ctx: UIntPtr; | |
on_completion_fn: procedure(on_completion_ctx: UIntPtr; client: tb_client_t; packet: ^tb_packet_t; const data: PByte; data_len: Cardinal) | |
): TB_STATUS; cdecl; | |
function tb_client_acquire_packet(client: tb_client_t; out out_packet: ^tb_packet_t): TB_PACKET_ACQUIRE_STATUS; cdecl; | |
procedure tb_client_release_packet(client: tb_client_t; packet: ^tb_packet_t); cdecl; | |
procedure tb_client_submit(client: tb_client_t; packet: ^tb_packet_t); cdecl; | |
procedure tb_client_deinit(client: tb_client_t); cdecl; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{$IFDEF MSWINDOWS} | |
{$DEFINE IS_WINDOWS} | |
{$ENDIF} | |
{$IFDEF IS_WINDOWS} | |
{$DEFINE IS_POSIX} | |
{$ENDIF} | |
{$IFDEF IS_POSIX} | |
{$IFDEF FPC} | |
{$DEFINE USE_PTHREAD} | |
{$ELSE} | |
{$DEFINE USE_POSIX} | |
{$ENDIF} | |
{$ENDIF} | |
{$IFDEF USE_PTHREAD} | |
{$MODE Delphi} | |
{$ENDIF} | |
unit Main; | |
{$IFDEF FPC} | |
{$MODE Delphi} | |
{$ENDIF} | |
interface | |
uses | |
{$IFDEF USE_POSIX} | |
cthreads, pthreads, unixtype, | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
Windows, | |
{$ENDIF} | |
SysUtils, tb_client; | |
const | |
MAX_MESSAGE_SIZE = (1024 * 1024) - 128; | |
type | |
completion_context_t = record | |
reply: array [0..MAX_MESSAGE_SIZE - 1] of Byte; | |
size: Integer; | |
completed: Boolean; | |
{$IFDEF USE_POSIX} | |
lock: pthread_mutex_t; | |
cv: pthread_cond_t; | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
lock: TRTLCriticalSection; | |
cv: TConditionVariable; | |
{$ENDIF} | |
end; | |
Pcompletion_context_t = ^completion_context_t; | |
procedure completion_context_init(var ctx: completion_context_t); | |
procedure completion_context_destroy(var ctx: completion_context_t); | |
procedure send_request(client: tb_client_t; packet: Ptb_packet_t; ctx: Pcompletion_context_t); | |
function get_time_ms: Int64; | |
{$IFDEF USE_POSIX} | |
procedure on_completion(context: uintptr_t; client: tb_client_t; packet: Ptb_packet_t; data: PByte; size: uint32_t); cdecl; | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
procedure on_completion(context: uintptr_t; client: tb_client_t; packet: Ptb_packet_t; data: PByte; size: uint32_t); stdcall; | |
{$ENDIF} | |
implementation | |
procedure completion_context_init(var ctx: completion_context_t); | |
{$IFDEF USE_POSIX} | |
var | |
attr: pthread_mutexattr_t; | |
{$ENDIF} | |
begin | |
ctx.completed := False; | |
{$IFDEF USE_POSIX} | |
pthread_mutexattr_init(@attr); | |
pthread_mutex_init(@ctx.lock, @attr); | |
pthread_cond_init(@ctx.cv, nil); | |
pthread_mutexattr_destroy(@attr); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
InitializeCriticalSection(ctx.lock); | |
InitializeConditionVariable(ctx.cv); | |
{$ENDIF} | |
end; | |
procedure completion_context_destroy(var ctx: completion_context_t); | |
begin | |
{$IFDEF USE_POSIX} | |
pthread_cond_destroy(@ctx.cv); | |
pthread_mutex_destroy(@ctx.lock); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
DeleteCriticalSection(ctx.lock); | |
{$ENDIF} | |
end; | |
procedure send_request(client: tb_client_t; packet: Ptb_packet_t; ctx: Pcompletion_context_t); | |
begin | |
{$IFDEF USE_POSIX} | |
pthread_mutex_lock(@ctx.lock); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
EnterCriticalSection(ctx.lock); | |
{$ENDIF} | |
ctx.completed := False; | |
tb_client_submit(client, packet); | |
while not ctx.completed do | |
begin | |
{$IFDEF USE_POSIX} | |
pthread_cond_wait(@ctx.cv, @ctx.lock); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
SleepConditionVariableCS(@ctx.cv, @ctx.lock, INFINITE); | |
{$ENDIF} | |
end; | |
{$IFDEF USE_POSIX} | |
pthread_mutex_unlock(@ctx.lock); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
LeaveCriticalSection(ctx.lock); | |
{$ENDIF} | |
end; | |
{$IFDEF USE_POSIX} | |
function get_time_ms: Int64; | |
{$IFDEF USE_POSIX} | |
var | |
tv: timeval; | |
{$ENDIF} | |
begin | |
{$IFDEF USE_POSIX} | |
gettimeofday(@tv, nil); | |
Result := Int64(tv.tv_sec) * 1000 + Int64(tv.tv_usec) div 1000; | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
Result := GetTickCount64; | |
{$ENDIF} | |
end; | |
{$IFDEF USE_POSIX} | |
procedure on_completion(context: uintptr_t; client: tb_client_t; packet: Ptb_packet_t; data: PByte; size: uint32_t); cdecl; | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
procedure on_completion(context: uintptr_t; client: tb_client_t; packet: Ptb_packet_t; data: PByte; size: uint32_t); stdcall; | |
{$ENDIF} | |
var | |
ctx: Pcompletion_context_t; | |
begin | |
ctx := Pcompletion_context_t(context); | |
if size <= MAX_MESSAGE_SIZE then | |
begin | |
Move(data^, ctx.reply[0], size); | |
ctx.size := size; | |
end; | |
{$IFDEF USE_POSIX} | |
pthread_mutex_lock(@ctx.lock); | |
ctx.completed := True; | |
pthread_cond_signal(@ctx.cv); | |
pthread_mutex_unlock(@ctx.lock); | |
{$ENDIF} | |
{$IFDEF USE_WINDOWS} | |
EnterCriticalSection(ctx.lock); | |
ctx.completed := True; | |
LeaveCriticalSection(ctx.lock); | |
WakeConditionVariable(ctx.cv); | |
{$ENDIF} | |
end; | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment