Win32 API 日本語リファレンス
ホームNetworking.Clustering › PaxosTagCStruct

PaxosTagCStruct

構造体
サイズx64: 80 バイト / x86: 80 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
__padding__PaxosTagVtableULONGLONG8+0+0マネージドオブジェクトのvtableに対応するパディング(64ビット)である。実体は使用しない。
__padding__NextEpochVtableULONGLONG8+8+8NextEpochオブジェクトのvtableに対応するパディング(64ビット)である。
__padding__NextEpoch_DateTimeVtableULONGLONG8+16+16NextEpochの日時オブジェクトのvtableに対応するパディング(64ビット)である。
NextEpoch_DateTime_ticksULONGLONG8+24+24次エポックの日時を.NETのticks(100ナノ秒単位)で示す64ビット値である。
NextEpoch_ValueINT4+32+32次エポックの値を示す整数である。
__padding__BoundryNextEpochDWORD4+36+36NextEpoch境界の整列用パディング(DWORD)である。
__padding__EpochVtableULONGLONG8+40+40Epochオブジェクトのvtableに対応するパディング(64ビット)である。
__padding__Epoch_DateTimeVtableULONGLONG8+48+48Epochの日時オブジェクトのvtableに対応するパディング(64ビット)である。
Epoch_DateTime_ticksULONGLONG8+56+56現エポックの日時を.NETのticks(100ナノ秒単位)で示す64ビット値である。
Epoch_ValueINT4+64+64現エポックの値を示す整数である。
__padding__BoundryEpochDWORD4+68+68Epoch境界の整列用パディング(DWORD)である。
SequenceINT4+72+72Paxosシーケンス番号である。タグの順序を示す。
__padding__BoundrySequenceDWORD4+76+76Sequence境界の整列用パディング(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 Structure
import 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: uint32
struct 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