ホーム › Networking.Clustering › PaxosTagCStruct
PaxosTagCStruct
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| __padding__PaxosTagVtable | ULONGLONG | 8 | +0 | +0 | マネージドオブジェクトのvtableに対応するパディング(64ビット)である。実体は使用しない。 |
| __padding__NextEpochVtable | ULONGLONG | 8 | +8 | +8 | NextEpochオブジェクトのvtableに対応するパディング(64ビット)である。 |
| __padding__NextEpoch_DateTimeVtable | ULONGLONG | 8 | +16 | +16 | NextEpochの日時オブジェクトのvtableに対応するパディング(64ビット)である。 |
| NextEpoch_DateTime_ticks | ULONGLONG | 8 | +24 | +24 | 次エポックの日時を.NETのticks(100ナノ秒単位)で示す64ビット値である。 |
| NextEpoch_Value | INT | 4 | +32 | +32 | 次エポックの値を示す整数である。 |
| __padding__BoundryNextEpoch | DWORD | 4 | +36 | +36 | NextEpoch境界の整列用パディング(DWORD)である。 |
| __padding__EpochVtable | ULONGLONG | 8 | +40 | +40 | Epochオブジェクトのvtableに対応するパディング(64ビット)である。 |
| __padding__Epoch_DateTimeVtable | ULONGLONG | 8 | +48 | +48 | Epochの日時オブジェクトのvtableに対応するパディング(64ビット)である。 |
| Epoch_DateTime_ticks | ULONGLONG | 8 | +56 | +56 | 現エポックの日時を.NETのticks(100ナノ秒単位)で示す64ビット値である。 |
| Epoch_Value | INT | 4 | +64 | +64 | 現エポックの値を示す整数である。 |
| __padding__BoundryEpoch | DWORD | 4 | +68 | +68 | Epoch境界の整列用パディング(DWORD)である。 |
| Sequence | INT | 4 | +72 | +72 | Paxosシーケンス番号である。タグの順序を示す。 |
| __padding__BoundrySequence | DWORD | 4 | +76 | +76 | Sequence境界の整列用パディング(DWORD)である。 |
各言語での定義
#include <windows.h>
// PaxosTagCStruct (x64 80 / x86 80 バイト)
typedef struct PaxosTagCStruct {
ULONGLONG __padding__PaxosTagVtable;
ULONGLONG __padding__NextEpochVtable;
ULONGLONG __padding__NextEpoch_DateTimeVtable;
ULONGLONG NextEpoch_DateTime_ticks;
INT NextEpoch_Value;
DWORD __padding__BoundryNextEpoch;
ULONGLONG __padding__EpochVtable;
ULONGLONG __padding__Epoch_DateTimeVtable;
ULONGLONG Epoch_DateTime_ticks;
INT Epoch_Value;
DWORD __padding__BoundryEpoch;
INT Sequence;
DWORD __padding__BoundrySequence;
} PaxosTagCStruct;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PaxosTagCStruct
{
public ulong __padding__PaxosTagVtable;
public ulong __padding__NextEpochVtable;
public ulong __padding__NextEpoch_DateTimeVtable;
public ulong NextEpoch_DateTime_ticks;
public int NextEpoch_Value;
public uint __padding__BoundryNextEpoch;
public ulong __padding__EpochVtable;
public ulong __padding__Epoch_DateTimeVtable;
public ulong Epoch_DateTime_ticks;
public int Epoch_Value;
public uint __padding__BoundryEpoch;
public int Sequence;
public uint __padding__BoundrySequence;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PaxosTagCStruct
Public __padding__PaxosTagVtable As ULong
Public __padding__NextEpochVtable As ULong
Public __padding__NextEpoch_DateTimeVtable As ULong
Public NextEpoch_DateTime_ticks As ULong
Public NextEpoch_Value As Integer
Public __padding__BoundryNextEpoch As UInteger
Public __padding__EpochVtable As ULong
Public __padding__Epoch_DateTimeVtable As ULong
Public Epoch_DateTime_ticks As ULong
Public Epoch_Value As Integer
Public __padding__BoundryEpoch As UInteger
Public Sequence As Integer
Public __padding__BoundrySequence As UInteger
End Structureimport ctypes
from ctypes import wintypes
class PaxosTagCStruct(ctypes.Structure):
_fields_ = [
("__padding__PaxosTagVtable", ctypes.c_ulonglong),
("__padding__NextEpochVtable", ctypes.c_ulonglong),
("__padding__NextEpoch_DateTimeVtable", ctypes.c_ulonglong),
("NextEpoch_DateTime_ticks", ctypes.c_ulonglong),
("NextEpoch_Value", ctypes.c_int),
("__padding__BoundryNextEpoch", wintypes.DWORD),
("__padding__EpochVtable", ctypes.c_ulonglong),
("__padding__Epoch_DateTimeVtable", ctypes.c_ulonglong),
("Epoch_DateTime_ticks", ctypes.c_ulonglong),
("Epoch_Value", ctypes.c_int),
("__padding__BoundryEpoch", wintypes.DWORD),
("Sequence", ctypes.c_int),
("__padding__BoundrySequence", wintypes.DWORD),
]#[repr(C)]
pub struct PaxosTagCStruct {
pub __padding__PaxosTagVtable: u64,
pub __padding__NextEpochVtable: u64,
pub __padding__NextEpoch_DateTimeVtable: u64,
pub NextEpoch_DateTime_ticks: u64,
pub NextEpoch_Value: i32,
pub __padding__BoundryNextEpoch: u32,
pub __padding__EpochVtable: u64,
pub __padding__Epoch_DateTimeVtable: u64,
pub Epoch_DateTime_ticks: u64,
pub Epoch_Value: i32,
pub __padding__BoundryEpoch: u32,
pub Sequence: i32,
pub __padding__BoundrySequence: u32,
}import "golang.org/x/sys/windows"
type PaxosTagCStruct struct {
__padding__PaxosTagVtable uint64
__padding__NextEpochVtable uint64
__padding__NextEpoch_DateTimeVtable uint64
NextEpoch_DateTime_ticks uint64
NextEpoch_Value int32
__padding__BoundryNextEpoch uint32
__padding__EpochVtable uint64
__padding__Epoch_DateTimeVtable uint64
Epoch_DateTime_ticks uint64
Epoch_Value int32
__padding__BoundryEpoch uint32
Sequence int32
__padding__BoundrySequence uint32
}type
PaxosTagCStruct = record
__padding__PaxosTagVtable: UInt64;
__padding__NextEpochVtable: UInt64;
__padding__NextEpoch_DateTimeVtable: UInt64;
NextEpoch_DateTime_ticks: UInt64;
NextEpoch_Value: Integer;
__padding__BoundryNextEpoch: DWORD;
__padding__EpochVtable: UInt64;
__padding__Epoch_DateTimeVtable: UInt64;
Epoch_DateTime_ticks: UInt64;
Epoch_Value: Integer;
__padding__BoundryEpoch: DWORD;
Sequence: Integer;
__padding__BoundrySequence: DWORD;
end;const PaxosTagCStruct = extern struct {
__padding__PaxosTagVtable: u64,
__padding__NextEpochVtable: u64,
__padding__NextEpoch_DateTimeVtable: u64,
NextEpoch_DateTime_ticks: u64,
NextEpoch_Value: i32,
__padding__BoundryNextEpoch: u32,
__padding__EpochVtable: u64,
__padding__Epoch_DateTimeVtable: u64,
Epoch_DateTime_ticks: u64,
Epoch_Value: i32,
__padding__BoundryEpoch: u32,
Sequence: i32,
__padding__BoundrySequence: u32,
};type
PaxosTagCStruct {.bycopy.} = object
__padding__PaxosTagVtable: uint64
__padding__NextEpochVtable: uint64
__padding__NextEpoch_DateTimeVtable: uint64
NextEpoch_DateTime_ticks: uint64
NextEpoch_Value: int32
__padding__BoundryNextEpoch: uint32
__padding__EpochVtable: uint64
__padding__Epoch_DateTimeVtable: uint64
Epoch_DateTime_ticks: uint64
Epoch_Value: int32
__padding__BoundryEpoch: uint32
Sequence: int32
__padding__BoundrySequence: uint32struct PaxosTagCStruct
{
ulong __padding__PaxosTagVtable;
ulong __padding__NextEpochVtable;
ulong __padding__NextEpoch_DateTimeVtable;
ulong NextEpoch_DateTime_ticks;
int NextEpoch_Value;
uint __padding__BoundryNextEpoch;
ulong __padding__EpochVtable;
ulong __padding__Epoch_DateTimeVtable;
ulong Epoch_DateTime_ticks;
int Epoch_Value;
uint __padding__BoundryEpoch;
int Sequence;
uint __padding__BoundrySequence;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PaxosTagCStruct サイズ: 80 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; __padding__PaxosTagVtable : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; __padding__NextEpochVtable : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; __padding__NextEpoch_DateTimeVtable : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NextEpoch_DateTime_ticks : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; NextEpoch_Value : INT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; __padding__BoundryNextEpoch : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; __padding__EpochVtable : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; __padding__Epoch_DateTimeVtable : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; Epoch_DateTime_ticks : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; Epoch_Value : INT (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; __padding__BoundryEpoch : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; Sequence : INT (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; __padding__BoundrySequence : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PaxosTagCStruct
#field int64 __padding__PaxosTagVtable
#field int64 __padding__NextEpochVtable
#field int64 __padding__NextEpoch_DateTimeVtable
#field int64 NextEpoch_DateTime_ticks
#field int NextEpoch_Value
#field int __padding__BoundryNextEpoch
#field int64 __padding__EpochVtable
#field int64 __padding__Epoch_DateTimeVtable
#field int64 Epoch_DateTime_ticks
#field int Epoch_Value
#field int __padding__BoundryEpoch
#field int Sequence
#field int __padding__BoundrySequence
#endstruct
stdim st, PaxosTagCStruct ; NSTRUCT 変数を確保
st->__padding__PaxosTagVtable = 100
mes "__padding__PaxosTagVtable=" + st->__padding__PaxosTagVtable