Win32 API 日本語リファレンス
ホームGlobalization › UCharIterator

UCharIterator

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

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

フィールド

フィールドサイズx64x86説明
contextvoid*8/4+0+0イテレータが操作する対象データへのポインタ。
lengthINT4+8+4テキスト全体の長さ。
startINT4+12+8イテレーション範囲の開始位置。
indexINT4+16+12現在のイテレータ位置。
limitINT4+20+16イテレーション範囲の終端位置。
reservedFieldINT4+24+20ICU内部用の予約フィールド。
getIndexUCharIteratorGetIndex8/4+32+24現在インデックスを取得する関数ポインタ。
moveUCharIteratorMove8/4+40+28位置を移動する関数ポインタ。
hasNextUCharIteratorHasNext8/4+48+32次の要素があるか判定する関数ポインタ。
hasPreviousUCharIteratorHasPrevious8/4+56+36前の要素があるか判定する関数ポインタ。
currentUCharIteratorCurrent8/4+64+40現在のコード単位を取得する関数ポインタ。
nextUCharIteratorNext8/4+72+44次のコード単位を取得し進める関数ポインタ。
previousUCharIteratorPrevious8/4+80+48前のコード単位を取得し戻る関数ポインタ。
reservedFnUCharIteratorReserved8/4+88+52ICU内部用の予約関数ポインタ。
getStateUCharIteratorGetState8/4+96+56イテレータ状態を取得する関数ポインタ。
setStateUCharIteratorSetState8/4+104+60イテレータ状態を設定する関数ポインタ。

各言語での定義

#include <windows.h>

// UCharIterator  (x64 112 / x86 64 バイト)
typedef struct UCharIterator {
    void* context;
    INT length;
    INT start;
    INT index;
    INT limit;
    INT reservedField;
    UCharIteratorGetIndex getIndex;
    UCharIteratorMove move;
    UCharIteratorHasNext hasNext;
    UCharIteratorHasPrevious hasPrevious;
    UCharIteratorCurrent current;
    UCharIteratorNext next;
    UCharIteratorPrevious previous;
    UCharIteratorReserved reservedFn;
    UCharIteratorGetState getState;
    UCharIteratorSetState setState;
} UCharIterator;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UCharIterator
{
    public IntPtr context;
    public int length;
    public int start;
    public int index;
    public int limit;
    public int reservedField;
    public IntPtr getIndex;
    public IntPtr move;
    public IntPtr hasNext;
    public IntPtr hasPrevious;
    public IntPtr current;
    public IntPtr next;
    public IntPtr previous;
    public IntPtr reservedFn;
    public IntPtr getState;
    public IntPtr setState;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure UCharIterator
    Public context As IntPtr
    Public length As Integer
    Public start As Integer
    Public index As Integer
    Public limit As Integer
    Public reservedField As Integer
    Public getIndex As IntPtr
    Public move As IntPtr
    Public hasNext As IntPtr
    Public hasPrevious As IntPtr
    Public current As IntPtr
    Public next As IntPtr
    Public previous As IntPtr
    Public reservedFn As IntPtr
    Public getState As IntPtr
    Public setState As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class UCharIterator(ctypes.Structure):
    _fields_ = [
        ("context", ctypes.c_void_p),
        ("length", ctypes.c_int),
        ("start", ctypes.c_int),
        ("index", ctypes.c_int),
        ("limit", ctypes.c_int),
        ("reservedField", ctypes.c_int),
        ("getIndex", ctypes.c_void_p),
        ("move", ctypes.c_void_p),
        ("hasNext", ctypes.c_void_p),
        ("hasPrevious", ctypes.c_void_p),
        ("current", ctypes.c_void_p),
        ("next", ctypes.c_void_p),
        ("previous", ctypes.c_void_p),
        ("reservedFn", ctypes.c_void_p),
        ("getState", ctypes.c_void_p),
        ("setState", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct UCharIterator {
    pub context: *mut core::ffi::c_void,
    pub length: i32,
    pub start: i32,
    pub index: i32,
    pub limit: i32,
    pub reservedField: i32,
    pub getIndex: *mut core::ffi::c_void,
    pub move: *mut core::ffi::c_void,
    pub hasNext: *mut core::ffi::c_void,
    pub hasPrevious: *mut core::ffi::c_void,
    pub current: *mut core::ffi::c_void,
    pub next: *mut core::ffi::c_void,
    pub previous: *mut core::ffi::c_void,
    pub reservedFn: *mut core::ffi::c_void,
    pub getState: *mut core::ffi::c_void,
    pub setState: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type UCharIterator struct {
	context uintptr
	length int32
	start int32
	index int32
	limit int32
	reservedField int32
	getIndex uintptr
	move uintptr
	hasNext uintptr
	hasPrevious uintptr
	current uintptr
	next uintptr
	previous uintptr
	reservedFn uintptr
	getState uintptr
	setState uintptr
}
type
  UCharIterator = record
    context: Pointer;
    length: Integer;
    start: Integer;
    index: Integer;
    limit: Integer;
    reservedField: Integer;
    getIndex: Pointer;
    move: Pointer;
    hasNext: Pointer;
    hasPrevious: Pointer;
    current: Pointer;
    next: Pointer;
    previous: Pointer;
    reservedFn: Pointer;
    getState: Pointer;
    setState: Pointer;
  end;
const UCharIterator = extern struct {
    context: ?*anyopaque,
    length: i32,
    start: i32,
    index: i32,
    limit: i32,
    reservedField: i32,
    getIndex: ?*anyopaque,
    move: ?*anyopaque,
    hasNext: ?*anyopaque,
    hasPrevious: ?*anyopaque,
    current: ?*anyopaque,
    next: ?*anyopaque,
    previous: ?*anyopaque,
    reservedFn: ?*anyopaque,
    getState: ?*anyopaque,
    setState: ?*anyopaque,
};
type
  UCharIterator {.bycopy.} = object
    context: pointer
    length: int32
    start: int32
    index: int32
    limit: int32
    reservedField: int32
    getIndex: pointer
    move: pointer
    hasNext: pointer
    hasPrevious: pointer
    current: pointer
    next: pointer
    previous: pointer
    reservedFn: pointer
    getState: pointer
    setState: pointer
struct UCharIterator
{
    void* context;
    int length;
    int start;
    int index;
    int limit;
    int reservedField;
    void* getIndex;
    void* move;
    void* hasNext;
    void* hasPrevious;
    void* current;
    void* next;
    void* previous;
    void* reservedFn;
    void* getState;
    void* setState;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; UCharIterator サイズ: 64 バイト(x86)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; context : void* (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; length : INT (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; start : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; index : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; limit : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; reservedField : INT (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; getIndex : UCharIteratorGetIndex (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; move : UCharIteratorMove (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; hasNext : UCharIteratorHasNext (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; hasPrevious : UCharIteratorHasPrevious (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; current : UCharIteratorCurrent (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; next : UCharIteratorNext (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; previous : UCharIteratorPrevious (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; reservedFn : UCharIteratorReserved (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; getState : UCharIteratorGetState (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; setState : UCharIteratorSetState (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; UCharIterator サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; context : void* (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; length : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; start : INT (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; index : INT (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; limit : INT (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; reservedField : INT (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; getIndex : UCharIteratorGetIndex (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; move : UCharIteratorMove (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; hasNext : UCharIteratorHasNext (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; hasPrevious : UCharIteratorHasPrevious (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; current : UCharIteratorCurrent (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; next : UCharIteratorNext (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; previous : UCharIteratorPrevious (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; reservedFn : UCharIteratorReserved (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; getState : UCharIteratorGetState (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; setState : UCharIteratorSetState (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global UCharIterator
    #field intptr context
    #field int length
    #field int start
    #field int index
    #field int limit
    #field int reservedField
    #field intptr getIndex
    #field intptr move
    #field intptr hasNext
    #field intptr hasPrevious
    #field intptr current
    #field intptr next
    #field intptr previous
    #field intptr reservedFn
    #field intptr getState
    #field intptr setState
#endstruct

stdim st, UCharIterator        ; NSTRUCT 変数を確保
st->length = 100
mes "length=" + st->length