JP2011203958A - データ処理装置、データ処理方法およびプログラム - Google Patents
データ処理装置、データ処理方法およびプログラム Download PDFInfo
- Publication number
- JP2011203958A JP2011203958A JP2010069950A JP2010069950A JP2011203958A JP 2011203958 A JP2011203958 A JP 2011203958A JP 2010069950 A JP2010069950 A JP 2010069950A JP 2010069950 A JP2010069950 A JP 2010069950A JP 2011203958 A JP2011203958 A JP 2011203958A
- Authority
- JP
- Japan
- Prior art keywords
- area
- character string
- registration
- data
- hash value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【課題】連想配列を扱えないプログラミング言語でのプログラミングで、連想配列に相当するデータ構造をメモリに容易に実装可能なデータ処理装置を提供する。
【解決手段】 データ処理装置は、連想配列の宣言を受け付けると第1領域にポインタ配列を生成し、ポインタ配列の存在時に登録指示を受け付けると、第1文字列のハッシュ値を求め、第1文字列を第2領域に格納し登録データを第3領域に格納し、第1文字列のハッシュ値で指定されるポインタ配列の第1要素に第2および3領域を特定するための特定情報を格納し、第1要素に特定情報が格納されている状況で参照指示を受け付けると、第2文字列のハッシュ値を求め、第2文字列のハッシュ値が第1文字列のハッシュ値と同一である場合、第1要素内の特定情報を用いて第1文字列を読み出し、第1文字列が第2文字列と同一である場合、特定情報を用いて登録データを読み出し実行部に送信する
【選択図】図1
【解決手段】 データ処理装置は、連想配列の宣言を受け付けると第1領域にポインタ配列を生成し、ポインタ配列の存在時に登録指示を受け付けると、第1文字列のハッシュ値を求め、第1文字列を第2領域に格納し登録データを第3領域に格納し、第1文字列のハッシュ値で指定されるポインタ配列の第1要素に第2および3領域を特定するための特定情報を格納し、第1要素に特定情報が格納されている状況で参照指示を受け付けると、第2文字列のハッシュ値を求め、第2文字列のハッシュ値が第1文字列のハッシュ値と同一である場合、第1要素内の特定情報を用いて第1文字列を読み出し、第1文字列が第2文字列と同一である場合、特定情報を用いて登録データを読み出し実行部に送信する
【選択図】図1
Description
本発明は、データ処理装置、データ処理方法およびプログラムに関する。
特許文献1には、連想配列を利用して情報処理を行うデータ処理システムが記載されている。連想配列は、オブジェクト指向型言語(例えば、Perl)でのプログラミングで使用可能なデータ構造である。連想配列では、添字として“文字列”を使用することができる。
一方、非オブジェクト指向型言語(例えば、C言語)では、抽象的なデータ構造を扱う概念はなく、非オブジェクト指向型言語でのプログラミングでは、配列の添字として“数値”しか使用できず、“文字列”を配列の添字として使用することはできない。
非オブジェクト指向型言語でのプログラミングでは、配列の添字として“文字列”を使用することができない。
このため、非オブジェクト指向型言語でのプログラミングで、つまり、「連想配列」を扱うことができないプログラミング言語でのプログラミングで、「連想配列」に相当するデータ構造を、メモリに容易に実装することができないという課題があった。
例えば、インタプリタ言語であるPerlでプログラミングされているプロトタイプのグループウェアを、レスポンス向上を狙い、コンパイル言語であるC言語でプログラミングし直す状況で、Perlで記載されたプログラムに連想配列が使用されていると、非オブジェクト指向型言語であるC言語での再プログラミングが非常に困難となる。
本発明の目的は、上述した課題を解決するデータ処理装置、データ処理方法およびプログラムを提供することにある。
本発明のデータ処理装置は、プログラムを実行する実行部と、メモリと、に接続されるデータ処理装置であって、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手段と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手段と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手段と、を含む。
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手段と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手段と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手段と、を含む。
本発明のデータ処理方法は、プログラムを実行する実行部と、メモリと、に接続されるデータ処理装置でのデータ処理方法であって、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成ステップと、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録ステップと、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照ステップと、を含む。
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成ステップと、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録ステップと、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照ステップと、を含む。
本発明のプログラムは、プログラムを実行する実行部と、メモリと、に接続されるコンピュータに、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手順と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手順と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手順と、を実行させる。
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手順と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手順と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手順と、を実行させる。
本発明によれば、連想配列を扱えないプログラミング言語でのプログラミングで、連想配列に相当するデータ構造をメモリに容易に実装することが可能になる。
以下、本発明の実施形態について図面を参照して説明する。
(第1実施形態)
図1は、本発明の第1実施形態のデータ処理装置であるAPI(Application Program Interface)部1を示したブロック図である。API部1は、例えば、共通APIライブラリである。
図1は、本発明の第1実施形態のデータ処理装置であるAPI(Application Program Interface)部1を示したブロック図である。API部1は、例えば、共通APIライブラリである。
図1において、API部1は、プログラムを実行するプログラム実行部2と、メモリ3と、に接続される。API部1とプログラム実行部2は、コンピュータ4に含まれる。
コンピュータ4は、コンピュータにて読み取り可能な記録媒体5からAPI部1の動作を規定するプログラムを読み取り、そのプログラムを実行することによってAPI部1として機能する。記録媒体5は、例えば、CD−ROM(Compact Disk Read Only Memory)である。なお、記録媒体5は、CD−ROMに限らず適宜変更可能である。
また、コンピュータ4は、プログラム実行部2の動作を規定するプログラム6を読み取り、プログラム6を実行することによってプログラム実行部2としても機能する。
プログラム6は、連想配列を扱うことができないプログラミング言語(例えば、C言語)で記述されたプログラムである。本実施形態では、API部1の動作を規定するプログラムも、プログラム6の記述に用いられたプログラミング言語で記述されている。
プログラム6には、連想配列の宣言6aと、登録指示6bと、参照指示6cと、解放指示6dとが、少なくとも記述されている。なお、連想配列の宣言6aと登録指示6bと参照指示6cと解放指示6dとを表す記述としては、例えば、連想配列を扱うことができるプログラミング言語(例えば、Perl)で使われる記述が使用されてもよいし、新たに規定された記述が使用されてもよい。
図2は、連想配列の宣言6aと登録指示6bと参照指示6cと解放指示6dとが表す情報を示した図である。
図2において、連想配列の宣言6aには、連想配列の識別子(名称)(以下「識別子」と称する)6a1と、連想配列の要素数6a2と、が表される。
連想配列の要素数6a2は、連想配列で扱うデータ最大数であり、引数を用いて指定される。以下、連想配列の要素数6a2を「データ最大数」とも称する。
登録指示6bには、識別子6b1と、登録キー6b2と、登録データ6b3と、登録キーのデータサイズ6b4と、登録データのデータサイズ6b5と、が表される。識別子6b1と登録キー6b2と登録データ6b3と登録キーのデータサイズ6b4と登録データのデータサイズ6b5とは、それぞれ、引数を用いて指定される。
登録キー6b2は、一般的に第1文字列と呼ぶことができる。登録キー6b2は、文字列であり、識別子6b1で識別される連想配列内の特定要素を指定する添字である。
登録データ6b3は、識別子6b1で識別される連想配列に格納されるデータのうち、登録キー6b2で指定される特定要素に格納されるデータである。
参照指示6cには、識別子6c1と登録キー6c2が表される。識別子6c1と登録キー6c2とは、それぞれ、引数を用いて指定される。
登録キー6c2は、一般的に第2文字列と呼ぶことができる。登録キー6c2は、文字列であり、識別子6c1で識別される連想配列の添字のいずれかである。
解放指示6dには、識別子6d1が表される。
図1に示したプログラム実行部2は、連想配列の宣言6aをAPI部1に渡し、API部1に連想配列の宣言6aを実行させる。また、プログラム実行部2は、登録指示6bをAPI部1に渡し、API部1に登録指示6bを実行させる。また、プログラム実行部2は、参照指示6cをAPI部1に渡し、API部1に参照指示6cを実行させる。また、プログラム実行部2は、解放指示6dをAPI部1に渡し、API部1に解放指示6dを実行させる。
API部1は、連想配列に相当するデータ構造をメモリ3に実装する。
図3は、API部1の機能を機能ブロックで示した機能ブロック図である。
図3において、API部1は、配列初期化部11と、データ登録部12と、データ参照部13と、配列解放部14と、を含む。
図4は、API部1が疑似的に「連想配列」をメモリ3に実装するために使用する4種類のデータ(メモリ)構造およびその格納領域(登録キー格納領域3aと、登録データ格納領域3bと、データ指標格納領域3cと、ポインタ配列格納領域3d)を示した図である。
以下、登録キー格納領域3aと、登録データ格納領域3bと、データ指標格納領域3cと、ポインタ配列格納領域3dについて説明する。
(1)登録キー格納領域3a
登録キー格納領域3aは、登録キー6b2(図2参照)を格納する領域である。
登録キー格納領域3aは、登録キー6b2(図2参照)を格納する領域である。
API部1(具体的には、データ登録部12)は、登録キーのデータサイズ6b4(図2参照)に示されたサイズの領域を、登録キー格納領域3aとしてメモリ3に動的に確保する。API部1(具体的には、データ登録部12)は、動的に確保された登録キー格納領域3aに、登録キー6b2を格納する。登録キー6b2が格納された登録キー格納領域3aの先頭アドレスは、データ指標格納領域3c内のデータ指標3c1または3c1aで管理される。
(2)登録データ格納領域3b
登録データ格納領域3bは、登録データ6b3(図2参照)を格納する領域である。
登録データ格納領域3bは、登録データ6b3(図2参照)を格納する領域である。
API部1(具体的には、データ登録部12)は、登録データのデータサイズ6b5に示されたサイズの領域を、登録データ格納領域3bとしてメモリ3に動的に確保する。API部1(具体的には、データ登録部12)は、動的に確保された登録データ格納領域3bに、登録データ6b3を格納する。登録データ6b3が格納された登録データ格納領域3bの先頭アドレスは、データ指標格納領域3c内のデータ指標3c1または3c1aで管理される。
(3)データ指標格納領域3c
データ指標格納領域3cは、データ指標3c1または3c1aを格納する領域である。データ指標3c1または3c1aは、登録キー6b2が格納された登録キー格納領域3aの先頭アドレスと、登録データ6b3が格納された登録データ格納領域3bの先頭アドレスと、を保持するポインタ配列である。
データ指標格納領域3cは、データ指標3c1または3c1aを格納する領域である。データ指標3c1または3c1aは、登録キー6b2が格納された登録キー格納領域3aの先頭アドレスと、登録データ6b3が格納された登録データ格納領域3bの先頭アドレスと、を保持するポインタ配列である。
API部1(具体的には、データ登録部12)は、登録指示6bを受け付けると、3つの要素を有するデータ指標3c1または3c1aを格納するためのデータ指標格納領域3cを、メモリ3に確保する。API部1(具体的には、データ登録部12)は、確保されたデータ指標格納領域3cに、3つの要素を有するデータ指標3c1または3c1aを格納する。
データ指標3c1および3c1aが有する3つの要素のうちの1つ目の要素(図4では、3つの要素のうちの一番上の要素)は、登録キー格納領域3aの先頭アドレスを格納するために使用される。
データ指標3c1および3c1aが有する3つの要素のうちの2つ目の要素(図4では、3つの要素のうちの中間の要素)は、登録データ格納領域3bの先頭アドレスを格納するために使用される。
データ指標3c1が有する3つの要素のうちの3つ目の要素(図4では、3つの要素のうちの一番下の要素)は、後述するように、登録キー6b2のハッシュ値が衝突した場合に新たに生成されるデータ指標3c1aを格納したデータ指標格納領域3cの先頭アドレスを保持するために使用される。
(4)ポインタ配列格納領域3d
ポインタ配列格納領域3dは、データ指標格納領域3cの先頭アドレスを保持するポインタ配列3d1を格納する領域である。
ポインタ配列格納領域3dは、データ指標格納領域3cの先頭アドレスを保持するポインタ配列3d1を格納する領域である。
API部1(具体的には、配列初期化部11)は、連想配列の宣言6aを受け付けると、連想配列の宣言6aに表されたデータ最大数6a2以上(例えば、データ最大数の約30%増)の要素数を有するポインタ配列3d1を格納するためのポインタ配列格納領域3dを、メモリ3に確保する。API部1(具体的には、配列初期化部11)は、確保されたポインタ配列格納領域3dに、ポインタ配列3d1を格納する。
ポインタ配列3d1では、ポインタ配列3d1の要素を指定する添字として、数値が用いられる。ポインタ配列3d1の添字としては、「0」から「ポインタ配列3d1の要素数−1」までの整数(数値)が用いられる。また、ポインタ配列3d1は、識別子6a1を有する。
図3に示した配列初期化部11は、一般的に生成手段と呼ぶことができる。
配列初期化部11は、プログラム実行部2から連想配列の宣言6aを受け付ける。配列初期化部11は、連想配列の宣言6aを受け付けると、データ最大数6a2以上の要素数を有するポインタ配列3d1を格納するためのポインタ配列格納領域3dをメモリ3に確保する。ポインタ配列格納領域3dは、一般的に第1領域と呼ぶことができる。
配列初期化部11は、ポインタ配列格納領域3dを確保すると、データ最大数6a2以上の要素数を有するポインタ配列3d1を生成し、ポインタ配列格納領域3dにポインタ配列3d1を格納する。
データ登録部12は、一般的に登録手段と呼ぶことができる。
データ登録部12は、ポインタ配列3d1が存在する状況で、プログラム実行部2から、登録指示6bを受け付けると、ハッシュ関数を用いて、登録キー6b2のハッシュ値(以下「第1ハッシュ値」と称する)を求める。以下、第1ハッシュ値を生成するために使用したハッシュ関数を「特定ハッシュ関数」と称する。特定ハッシュ関数は、ポインタ配列3d1の添字が示す範囲内の整数を出力する。換言すると、特定ハッシュ関数の出力となるハッシュ値は、ポインタ配列3d1の添字のいずれかとなる。第1ハッシュ値は、一般的に第1添字と呼ぶことができる。
また、データ登録部12は、登録キーのデータサイズ6b4に示されたサイズの領域を、登録キー格納領域3aとしてメモリ3に動的に確保する。登録キー格納領域3aは、ポインタ配列格納領域3dと異なる領域であり、一般的に第2領域と呼ぶことができる。
データ登録部12は、動的に確保された登録キー格納領域3aに、登録キー6b2を格納する。
また、データ登録部12は、登録データのデータサイズ6b5に示されたサイズの領域を、登録データ格納領域3bとしてメモリ3に動的に確保する。登録データ格納領域3bは、ポインタ配列格納領域3dとも登録キー格納領域3aとも異なる領域であり、一般的に第3領域と呼ぶことができる。
データ登録部12は、動的に確保された登録データ格納領域3bに、登録データ6b3を格納する。
また、データ登録部12は、ポインタ配列3d1内の要素のうち、第1ハッシュ値で指定される要素(以下「第1要素」と称する)に、登録キー格納領域3aと登録データ格納領域3bとを特定するために必要な特定情報を格納する。
本実施形態では、データ登録部12は、データ指標3c1を格納するためのデータ指標格納領域3cをメモリ3に確保し、確保されたデータ指標格納領域3cに、データ指標3c1を格納する。データ指標格納領域3cは、ポインタ配列格納領域3dとも登録キー格納領域3aとも登録データ格納領域3bとも異なる領域であり、一般的に第4領域と呼ぶことができる。
データ登録部12は、登録キー格納領域3aの先頭アドレスをデータ指標3c1の1つ目の要素に格納し、登録データ格納領域3bの先頭アドレスをデータ指標3c1の2つ目の要素に格納する。
データ登録部12は、データ指標格納領域3cの先頭アドレスを、第1ハッシュ値で指定される要素(第1要素)に、特定情報として格納する。
データ参照部13は、一般的に参照手段と呼ぶことができる。
データ参照部13は、ポインタ配列3d1が存在する状況で、プログラム実行部2から、参照指示6cを受け付けると、特定ハッシュ関数を用いて、登録キー6c2のハッシュ値(以下「第2ハッシュ値」と称する)を求める。
データ参照部13は、第2ハッシュ値が第1ハッシュ値と同一である場合、第1要素内の特定情報を用いて特定される登録キー格納領域3aから登録キー6b2を読み出す。
データ参照部13は、登録キー6b2が登録キー6c2と同一である場合、第1要素内の特定情報を用いて特定される登録データ格納領域3bから登録データ6b3を読み出し、登録データ6b3をプログラム実行部2に送信する。
本実施形態では、データ参照部13は、第2ハッシュ値が第1ハッシュ値と同一である場合、第1要素内のデータ指標格納領域3cの先頭アドレスを用いて、データ指標格納領域3c内のデータ指標3c1から、登録キー格納領域3aの先頭アドレスを読み出す。
データ参照部13は、登録キー格納領域3aの先頭アドレスを用いて、登録キー格納領域3aから登録キー6b2を読み出す。
データ参照部13は、登録キー6b2が登録キー6c2と同一である場合、第1要素内のデータ指標格納領域3cの先頭アドレスを用いて、データ指標格納領域3c内のデータ指標3c1から、登録データ格納領域3bの先頭アドレスを読み出す。
データ参照部13は、登録データ格納領域3bの先頭アドレスを用いて、登録データ格納領域3bから登録データ6b3を読み出す。データ参照部13は、登録データ6b3をプログラム実行部2に送信する。
配列解放部14は、一般的に解放手段と呼ぶことができる。
配列解放部14は、ポインタ配列格納領域3dと、登録キー格納領域3aと、登録データ格納領域3bと、データ指標格納領域3cとが確保されている状況で、プログラム実行部2から、解放指示6dを受け付けると、ポインタ配列格納領域3dと、データ指標格納領域3cと、登録キー格納領域3aと、登録データ格納領域3bと、を解放する。
次に、API部1の動作を説明する。
プログラム実行部2が、API部1に連想配列の宣言6aを出力すると、配列初期化部11が、連想配列の宣言6aを受け付ける。配列初期化部11は、連想配列の宣言6aを受け付けると、ポインタ配列格納領域3dをメモリ3に確保する。
配列初期化部11は、ポインタ配列格納領域3dを確保すると、ポインタ配列3d1を生成し、ポインタ配列格納領域3dにポインタ配列3d1を格納する。
その後、プログラム実行部2が、API部1に登録指示6bを出力すると、データ登録部12が、登録指示6bを受け付ける。
データ登録部12は、登録指示6bを受け付けると、登録キー6b2をコピーし、コピーの登録キー6b2を特定ハッシュ関数で第1ハッシュ値に変換する。
続いて、データ登録部12は、ポインタ配列3d1の要素のうち、第1ハッシュ値を示す添字で指定される第1要素が、未使用であるかを判断する。
データ登録部12は、第1要素が未使用である場合(第1要素にデータ指標格納領域3cの先頭アドレスが格納されていない場合)、データ指標3c1を宣言して、メモリ3上にデータ指標格納領域3cを確保し、データ指標格納領域3cにデータ指標3c1を格納する。
続いて、データ登録部12は、データ指標格納領域3cの先頭アドレスを、ポインタ配列3d1内の第1要素に格納する。
続いて、データ登録部12は、登録キーのデータサイズ6b4に示されたサイズの領域を、登録キー格納領域3aとしてメモリ3に動的に確保する。
続いて、データ登録部12は、動的に確保された登録キー格納領域3aに、登録キー6b2を格納する。
続いて、データ登録部12は、登録データのデータサイズ6b5に示されたサイズの領域を、登録データ格納領域3bとしてメモリ3に動的に確保する。
続いて、データ登録部12は、動的に確保された登録データ格納領域3bに、登録データ6b3を格納する。
続いて、データ登録部12は、登録キー格納領域3aの先頭アドレスをデータ指標3c1の1つ目の要素に格納し、登録データ格納領域3bの先頭アドレスをデータ指標3c1の2つ目の要素に格納する(図4参照)。
一方、第1要素が既に使用されている場合(第1要素にデータ指標格納領域3cの先頭アドレスが格納されている場合)、データ登録部12は、第1要素に格納されているデータ指標格納領域3cの先頭アドレスを用いて、データ指標3c1を特定する。
続いて、データ登録部12は、特定されたデータ指標3c1(以下「データ指標3c11」と称する)に格納されている登録キー格納領域3aの先頭アドレスを用いて、登録キー格納領域3a内の登録キー6b2を読み出す。
続いて、データ登録部12は、登録キー格納領域3aから読み出された登録キー6b2(以下「登録キー6b2a」と称する)が、登録指示6bに表された登録キー6b2(以下「登録キー6b2b」と称する)と一致するかを判断する。
登録キー6b2aが登録キー6b2bと一致(同値)である場合、データ登録部12は、データ指標3c11に格納されている登録データ格納領域3bの先頭アドレスを先頭とし、先頭から、登録データのデータサイズ6b5で示されたサイズの領域を、登録データ格納領域3bとして再確保する。
続いて、データ登録部12は、再確保された登録データ格納領域3bに、登録データ6b3を格納する。
続いて、データ登録部12は、再確保された登録データ格納領域3bの先頭アドレスを、データ指標3c11に格納する(図4参照)。
一方、登録キー6b2aが登録キー6b2bと一致(同値)でない場合、データ登録部12は、データ指標3c1aを宣言して、メモリ3上に新たにデータ指標格納領域3cを確保し、新たに確保されたデータ指標格納領域3cにデータ指標3c1aを格納する。
続いて、データ登録部12は、新たに確保されたデータ指標格納領域3cの先頭アドレスを、データ指標3c11の3つ目の要素に格納する(図4参照)。
続いて、データ登録部12は、登録キーのデータサイズ6b4に示されたサイズの領域を、新たな登録キー格納領域3aとしてメモリ3に動的に確保する。
続いて、データ登録部12は、新たな登録キー格納領域3aに、登録キー6b2を格納する。
続いて、データ登録部12は、登録データのデータサイズ6b5に示されたサイズの領域を、新たな登録データ格納領域3bとしてメモリ3に動的に確保する。
続いて、データ登録部12は、新たな登録データ格納領域3bに、登録データ6b3を格納する。
続いて、データ登録部12は、新たな登録キー格納領域3aの先頭アドレスを、データ指標3c1aの1つ目の要素に格納し、新たな登録データ格納領域3bの先頭アドレスを、データ指標3c1aの2つ目の要素に格納する(図4参照)。
その後、プログラム実行部2が、API部1に参照指示6cを出力すると、データ参照部13が、参照指示6cを受け付ける。
データ参照部13は、参照指示6cを受け付けると、登録キー6c2をコピーし、コピーの登録キー6c2を特定ハッシュ関数で第2ハッシュ値に変換する。
続いて、データ参照部13は、第2ハッシュ値を示す添字で指定される所定要素が、未使用であるかを判断する。
データ参照部13は、所定要素が未使用である場合(所定要素にデータ指標格納領域3cの先頭アドレスが格納されていない場合)、データ未登録を示す戻値をプログラム実行部2に返却する。
一方、所定要素が既に使用されている場合(所定要素にデータ指標格納領域3cの先頭アドレスが格納されている場合)、つまり、第2ハッシュ値が第1ハッシュ値と同一である場合、データ参照部13は、所定要素に格納されているデータ指標格納領域3cの先頭アドレスを用いて、データ指標3c1を特定する。
続いて、データ参照部13は、特定されたデータ指標3c1(以下「データ指標3c12」と称する)に格納されている登録キー格納領域3aの先頭アドレスを用いて、登録キー格納領域3a内の登録キー6b2を読み出す。
続いて、データ参照部13は、登録キー格納領域3aから読み出された登録キー6b2が、参照指示6cに表された登録キー6c2と一致するかを判断する。
登録キー6b2が登録キー6c2と一致(同値)である場合、データ参照部13は、データ指標3c12に格納されている登録データ格納領域3bの先頭アドレスを用いて、登録データ格納領域3bから登録データ6b3を読み出し、読み出された登録データ6b3をプログラム実行部2に返却する。
一方、登録キー6b2が登録キー6c2と一致(同値)でない場合、データ参照部13は、データ指標3c12の3つ目の要素が未使用であるかを判断する。
データ指標3c12の3つ目の要素が未使用である場合(データ指標3c12の3つ目の要素に、データ指標3c1aを格納しているデータ指標格納領域3cの先頭アドレスが格納されていない場合)、データ参照部13は、データ未登録を示す戻値をプログラム実行部2に返却する。
一方、データ指標3c12の3つ目の要素が使用されている場合(データ指標3c12の3つ目の要素に、データ指標3c1aを格納しているデータ指標格納領域3cの先頭アドレスが格納されている場合)、データ参照部13は、データ指標3c12の3つ目の要素内のデータ指標格納領域3cの先頭アドレスを用いて、データ指標3c1aを特定する。
続いて、データ参照部13は、特定されたデータ指標3c1a(以下「データ指標3c1a2」と称する)に格納されている登録キー格納領域3aの先頭アドレスを用いて、登録キー格納領域3a内の登録キー6b2を読み出す。
続いて、データ参照部13は、登録キー格納領域3aから読み出された登録キー6b2が、参照指示6cに表された登録キー6c2と一致するかを判断する。
登録キー6b2が登録キー6c2と一致(同値)である場合、データ参照部13は、データ指標3c1a2に格納されている登録データ格納領域3bの先頭アドレスを用いて、登録データ格納領域3bから登録データ6b3を読み出し、読み出された登録データ6b3をプログラム実行部2に返却する。
一方、登録キー6b2が登録キー6c2と一致(同値)でない場合、データ指標3c1a2の3つ目の要素が未使用であるかを判断する。
データ指標3c1a2の3つ目の要素が未使用である場合、データ参照部13は、データ未登録を示す戻値をプログラム実行部2に返却する。
データ指標3c1a2の3つ目の要素が使用されている場合、データ参照部13は、データ指標3c1a2の3つ目の要素内の情報を用いて上記と同様の動作を行う。
その後、プログラム実行部2が、API部1に解放指示6dを出力すると、配列解放部14が、解放指示6dを受け付ける。配列解放部14は、解放指示6dを受け付けると、ポインタ配列格納領域3dと、データ指標格納領域3cと、登録キー格納領域3aと、登録データ格納領域3bと、を解放する。
本実施形態によれば、配列初期化部11は、プログラム実行部2から連想配列の宣言6aを受け付ける。配列初期化部11は、連想配列の宣言6aを受け付けると、ポインタ配列格納領域3dをメモリ3に確保する。配列初期化部11は、ポインタ配列格納領域3dを確保すると、ポインタ配列3d1を生成し、ポインタ配列格納領域3dにポインタ配列3d1を格納する。
データ登録部12は、ポインタ配列3d1が存在する状況で、プログラム実行部2から、登録指示6bを受け付けると、特定ハッシュ関数を用いて登録キー6b2のハッシュ値(第1ハッシュ値)を求め、かつ、登録キー6b2を登録キー格納領域3aに格納し、かつ、登録データ6b3を登録データ格納領域3bに格納する。
データ登録部12は、ポインタ配列3d1の要素のうち、第1ハッシュ値で指定される第1要素に、登録キー格納領域3aと登録データ格納領域3bとを特定するために必要な特定情報を格納する。
データ参照部13は、第1要素に特定情報が格納されている状況で、プログラム実行部2から参照指示6cを受け付けると、特定ハッシュ関数を用いて登録キー6c2のハッシュ値(第2ハッシュ値)を求める。
データ参照部13は、第2ハッシュ値が第1ハッシュ値と同一である場合、第1要素内の特定情報を用いて特定される登録キー格納領域3aから登録キー6b2を読み出し、登録キー6b2が登録キー6c2と同一である場合、特定情報を用いて特定される登録データ格納領域3bから登録データ6b3を読み出し、登録データ6b3をプログラム実行部2に送信する。
このため、メモリ3に、疑似的に「連想配列」が実装される。よって、非オブジェクト指向型言語でのプログラミングで「連想配列」を容易に扱えるようになる。
例えば、社員データを格納する配列を宣言したとする。
従来は、社員[0]、社員[1]、社員[2] 。。。というように線形リストで扱うしかないが、本実施形態によれば、社員["山内"] というようにダイレクトにデータを参照、更新することができるようになる。
また抽象的なデータ構造を扱うシステムを非オブジェクト指向型言語でプログラミングする際には、API部1を汎用できるため生産性の向上が見込める。
また、特定ハッシュ関数によってハッシュ値の衝突が起こっても、正しい登録データを参照することが可能になる。
本実施形態では、データ登録部12は、登録キー格納領域3aのアドレスと登録データ格納領域3bのアドレスとを、データ指標3c1に格納し、データ指標3c1の格納領域のアドレスを、特定情報として、第1要素に格納する。
また、データ参照部13は、第2ハッシュ値が第1ハッシュ値と同一である場合、第1要素内のデータ指標3c1の格納領域のアドレスを用いて、データ指標3c1から登録キー格納領域3aのアドレスを読み出し、登録キー格納領域3aのアドレスを用いて、登録キー格納領域3aから登録キー6b2を読み出す。
データ参照部13は、登録キー6b2が登録キー6c2と同一である場合、第1要素内のデータ指標3c1の格納領域のアドレスを用いて、データ指標3c1から登録データ格納領域3bのアドレスを読み出し、登録データ格納領域3bのアドレスを用いて、登録データ格納領域3bから登録データ6b3を読み出す。
この場合、データ指標を用いて、登録キーおよび登録データを管理することが可能になる。
また、本実施形態では、配列解放部14は、プログラム実行部2から、解放指示6dを受け付けると、ポインタ配列格納領域3dと、データ指標格納領域3cと、登録キー格納領域3aと、登録データ格納領域3bと、を解放する。
この場合、メモリの解放を容易に行うことが可能になる。
(第2実施形態)
次に、第2実施形態を説明する。
次に、第2実施形態を説明する。
図5は、本発明の第2実施形態のデータ処理装置であるAPI部1Aを示したブロック図である。API部1Aは、例えば、共通APIライブラリである。図5において、図1に示したものと同一構成のものには同一符号を付してある。
コンピュータ4は、記録媒体5からAPI部1Aの動作を規定するプログラムを読み取り、そのプログラムを実行することによってAPI部1Aとして機能する。
第2実施形態では、メモリ確保およびメモリアドレスを参照できない非オブジェクト指向型言語で記載されたプログラムを実行する際に、API部1Aが、リレーショナルデータベースを管理するソフトウェア(RDBMS:Relational DataBase Management System)と連携することで、擬似的に連想配列をメモリ3に実装する。
図6は、API部1Aの機能を機能ブロックで示した機能ブロック図である。図6において、API部1Aは、配列初期化部11と、データ登録部12Aと、データ参照部13Aと、配列解放部14Aと、を含む。図6において、図3に示したものと同一機能のものには同一符号を付してある。
図7は、RDBMSと連携したデータ(メモリ)構造の概念を示す図である。図7において、図4に示したものと同一のものには同一符号を付してある。
次に、API部1Aの動作を説明する。
プログラム実行部2が、API部1Aに連想配列の宣言6aを出力すると、配列初期化部11が、連想配列の宣言6aを受け付ける。配列初期化部11は、連想配列の宣言6aを受け付けると、ポインタ配列格納領域3dをメモリ3に確保する
配列初期化部11は、ポインタ配列格納領域3dを確保すると、ポインタ配列3d1を生成し、ポインタ配列格納領域3dにポインタ配列3d1を格納する。
配列初期化部11は、ポインタ配列格納領域3dを確保すると、ポインタ配列3d1を生成し、ポインタ配列格納領域3dにポインタ配列3d1を格納する。
その後、プログラム実行部2が、API部1Aに登録指示6bAを出力すると、データ登録部12Aが、登録指示6bAを受け付ける。なお、登録指示6bAは、図2に示した登録指示6bから、登録キーのデータサイズ6b4と登録データのデータサイズ6b5を除いたものである。
データ登録部12Aは、登録指示6bAを受け付けると、登録キー6b2をコピーし、コピーの登録キー6b2を特定ハッシュ関数で第1ハッシュ値に変換する。
続いて、データ登録部12Aは、ポインタ配列3d1の要素のうち、第1ハッシュ値を示す添字で指定される第1要素が、未使用であるかを判断する。
データ登録部12Aは、第1要素が未使用である場合、登録キー6b2と登録データ6b3とレコード識別子とを有する登録レコードを生成し、登録レコードを、メモリ3内のデータ登録テーブル3eに格納する。なお、レコード識別子は、キー項目および枝番である。第1要素が未使用である場合、枝番として「1」が用いられる。
データ登録部12Aは、登録レコードのキー項目の値を、特定情報として、第1要素に格納する。
一方、第1要素が既に使用されている場合(第1要素にキー項目の値が格納されている場合)、データ登録部12Aは、データ登録テーブル3eを検索して、第1要素に格納されているキー項目の値を有する登録レコードのうち、登録キー6b2を有する該当レコードがあるかを判断する。
該当レコードがある場合、データ登録部12Aは、該当レコード内の登録データを、登録指示6bA内の登録データ6b3に更新する。
該当レコードがない場合、データ登録部12Aは、登録キー6b2と登録データ6b3とレコード識別子とを有する新たな登録レコードを生成し、新たな登録レコードを、メモリ3内のデータ登録テーブル3eに格納する。
なお、新たな登録レコードのキー項目は、第1要素に格納されているキー項目の値を示す。
また、新たな登録レコードの枝番は、第1要素に格納されているキー項目の値を示す既存の登録レコード内の枝番よりも大きい数値に設定される。
その後、プログラム実行部2が、API部1Aに参照指示6cを出力すると、データ参照部13Aが、参照指示6cを受け付ける。
データ参照部13Aは、参照指示6cを受け付けると、登録キー6c2をコピーし、コピーの登録キー6c2を特定ハッシュ関数で第2ハッシュ値に変換する。
続いて、データ参照部13Aは、第2ハッシュ値を示す添字で指定される所定要素が、未使用であるかを判断する。
データ参照部13Aは、所定要素が未使用である場合(所定要素にキー項目の値が格納されていない場合)、データ未登録を示す戻値をプログラム実行部2に返却する。
一方、所定要素が既に使用されている場合(所定要素にキー項目の値が格納されている場合)、つまり、第2ハッシュ値が第1ハッシュ値と同一である場合、データ参照部13Aは、データ登録テーブル3eを検索して、所定要素に格納されているキー項目の値を有する登録レコードのうち、登録キー6c2を有する参照レコードがあるかを判断する。
参照レコードがある場合、データ参照部13Aは、参照レコード内の登録データ6b3を読み出し、読み出された登録データ6b3をプログラム実行部2に返却する。
一方、参照レコードがない場合、データ参照部13Aは、データ未登録を示す戻値をプログラム実行部2に返却する。
その後、プログラム実行部2は、プログラム6Aの終了を検出すると、プログラムが終了した旨の終了情報を、API部1Aに出力する。配列解放部14Aは、終了情報を受け付ける。
配列解放部14Aは、終了情報を受け付けると、データ登録テーブル3e内の登録レコードを消去する。
本実施形態によれば、データ登録部12Aは、レコード識別子(キー項目の値)を、登録キー6b2と登録データ6b3とに関連づけて、データ登録テーブル3e内のキー項目の欄に格納し、レコード識別子(キー項目の値)を、特定情報として、第1要素に格納する。
データ参照部13Aは、第1ハッシュ値と第2ハッシュ値とが同一である場合、第1要素内のレコード識別子に関連づけられた登録キー6b2をデータ登録テーブル3e内の登録キーの欄から読み出し、その登録キー6b2が登録キー6c2と同一である場合、レコード識別子に関連づけられた登録データ6b3をデータ登録テーブル3e内の登録データの欄から読み出す。
このため、メモリ確保およびメモリアドレスを参照できない非オブジェクト指向型言語で記載されたプログラムを実行する際にも、擬似的に連想配列をメモリ3に実装することが可能になる。
上記各実施形態によれば、非オブジェクト指向型言語でのプログラミングで「連想配列」というデータ構造をメモリに実装する場合、メモリの無駄使いをせず、かつ、連想配列用に割り当てられたメモリの範囲外にアクセスしないよう、次の点を一貫して制御することは非常に困難であったという課題を解決できる。
・可変サイズのメモリを動的に割り当てる。
・割り当てられメモリの先頭アドレスを管理(保持)する。
・不要となった割り当て済みのメモリを漏れなく解放する。
・可変サイズのメモリを動的に割り当てる。
・割り当てられメモリの先頭アドレスを管理(保持)する。
・不要となった割り当て済みのメモリを漏れなく解放する。
以上説明した各実施形態において、図示した構成や、補正プログラム内の計算は単なる一例であって、本発明はそれに限定されるものではない。
1、1A API部
11 配列初期化部
12、12A データ登録部
13、13A データ参照部
14、14A 配列解放部
2 プログラム実行部
3 メモリ
4 コンピュータ
5 記録媒体
6、6A プログラム
11 配列初期化部
12、12A データ登録部
13、13A データ参照部
14、14A 配列解放部
2 プログラム実行部
3 メモリ
4 コンピュータ
5 記録媒体
6、6A プログラム
Claims (10)
- プログラムを実行する実行部と、メモリと、に接続されるデータ処理装置であって、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手段と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手段と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手段と、を含むデータ処理装置。 - 請求項1に記載のデータ処理装置において、
前記登録手段は、前記第2領域のアドレスと前記第3領域のアドレスとを、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、前記第4領域のアドレスを、前記特定情報として、前記第1要素に格納し、
前記参照手段は、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の第4領域のアドレスを用いて、前記第4領域から前記第2領域のアドレスを読み出し、当該第2領域のアドレスを用いて、前記第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記第4領域のアドレスを用いて、前記第4領域から前記第3領域のアドレスを読み出し、当該第3領域のアドレスを用いて、前記第3領域から前記登録データを読み出す、データ処理装置。 - 請求項1に記載のデータ処理装置において、
前記登録手段は、レコード識別子を、前記第1文字列と前記登録データとに関連づけて、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、かつ、前記レコード識別子を、前記特定情報として、前記第1要素に格納し、
前記参照手段は、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内のレコード識別子に関連づけられた第1文字列を前記第2領域から読み出し、当該第1文字列が前記第2文字列と同一である場合、前記レコード識別子に関連づけられた登録データを前記第3領域から読み出す、データ処理装置。 - 請求項2に記載のデータ処理装置において、
前記生成手段は、前記連想配列の宣言を受け付けると、前記第1領域を確保し、確保された第1領域に前記ポインタ配列を生成し、
前記登録手段は、前記登録指示を受け付けると、前記第2領域と前記第3領域と前記第4領域とを確保し、確保された第2領域に前記第1文字列を格納し、確保された第3領域に前記登録データを格納し、確保された第4領域に第2領域のアドレスと前記第3領域のアドレスとを格納し、
前記第1領域と前記第2領域と前記第3領域と前記第4領域とが確保されている状況で、前記実行部から、解放指示を受け付けると、前記第1領域と前記第2領域と前記第3領域と前記第4領域とを解放する解放手段を、さらに含むデータ処理装置。 - プログラムを実行する実行部と、メモリと、に接続されるデータ処理装置でのデータ処理方法であって、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成ステップと、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録ステップと、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照ステップと、を含むデータ処理方法。 - 請求項5に記載のデータ処理方法において、
前記登録ステップでは、前記第2領域のアドレスと前記第3領域のアドレスとを、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、前記第4領域のアドレスを、前記特定情報として、前記第1要素に格納し、
前記参照ステップでは、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の第4領域のアドレスを用いて、前記第4領域から前記第2領域のアドレスを読み出し、当該第2領域のアドレスを用いて、前記第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記第4領域のアドレスを用いて、前記第4領域から前記第3領域のアドレスを読み出し、当該第3領域のアドレスを用いて、前記第3領域から前記登録データを読み出す、データ処理方法。 - 請求項5に記載のデータ処理方法において、
前記登録ステップでは、レコード識別子を、前記第1文字列と前記登録データとに関連づけて、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、かつ、前記レコード識別子を、前記特定情報として、前記第1要素に格納し、
前記参照ステップでは、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内のレコード識別子に関連づけられた第1文字列を前記第2領域から読み出し、当該第1文字列が前記第2文字列と同一である場合、前記レコード識別子に関連づけられた登録データを前記第3領域から読み出す、データ処理方法。 - プログラムを実行する実行部と、メモリと、に接続されるコンピュータに、
前記実行部から、連想配列の要素数を表した連想配列の宣言を受け付けると、前記メモリ内の第1領域に、前記要素数以上の要素を有し前記要素を指定する添字が数値であるポインタ配列を生成する生成手順と、
前記ポインタ配列が存在する状況で、前記実行部から、前記連想配列内の特定要素を指定する添字である第1文字列と、前記特定要素に格納される登録データと、を表した登録指示を受け付けると、出力であるハッシュ値が前記ポインタ配列の添字のいずれかとなるハッシュ関数を用いて、前記第1文字列のハッシュ値を求め、かつ、前記第1文字列を前記メモリのうち前記第1領域と異なる第2領域に格納し、かつ、前記登録データを前記メモリのうち前記第1領域とも前記第2領域とも異なる第3領域に格納し、前記第1文字列のハッシュ値で指定される第1要素に、前記第2領域と前記第3領域とを特定するために必要な特定情報を格納する登録手順と、
前記第1要素に前記特定情報が格納されている状況で、前記実行部から、前記連想配列の添字のいずれかである第2文字列を表した参照指示を受け付けると、前記ハッシュ関数を用いて前記第2文字列のハッシュ値を求め、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の特定情報を用いて特定される第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記特定情報を用いて特定される第3領域から前記登録データを読み出し、当該登録データを前記実行部に送信する参照手順と、を実行させるためのプログラム。 - 請求項8に記載のプログラムにおいて、
前記登録手順では、前記第2領域のアドレスと前記第3領域のアドレスとを、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、前記第4領域のアドレスを、前記特定情報として、前記第1要素に格納し、
前記参照手順では、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内の第4領域のアドレスを用いて、前記第4領域から前記第2領域のアドレスを読み出し、当該第2領域のアドレスを用いて、前記第2領域から前記第1文字列を読み出し、当該第1文字列が前記第2文字列と同一である場合、前記第4領域のアドレスを用いて、前記第4領域から前記第3領域のアドレスを読み出し、当該第3領域のアドレスを用いて、前記第3領域から前記登録データを読み出す、データ処理方法。 - 請求項8に記載のプログラムにおいて、
前記登録手順では、レコード識別子を、前記第1文字列と前記登録データとに関連づけて、前記メモリのうち前記第1領域とも前記第2領域とも前記第3領域とも異なる第4領域に格納し、かつ、前記レコード識別子を、前記特定情報として、前記第1要素に格納し、
前記参照手順では、前記第2文字列のハッシュ値が前記第1文字列のハッシュ値と同一である場合、前記第1要素内のレコード識別子に関連づけられた第1文字列を前記第2領域から読み出し、当該第1文字列が前記第2文字列と同一である場合、前記レコード識別子に関連づけられた登録データを前記第3領域から読み出す、プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010069950A JP2011203958A (ja) | 2010-03-25 | 2010-03-25 | データ処理装置、データ処理方法およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010069950A JP2011203958A (ja) | 2010-03-25 | 2010-03-25 | データ処理装置、データ処理方法およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011203958A true JP2011203958A (ja) | 2011-10-13 |
Family
ID=44880543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010069950A Pending JP2011203958A (ja) | 2010-03-25 | 2010-03-25 | データ処理装置、データ処理方法およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011203958A (ja) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0991303A (ja) * | 1995-09-22 | 1997-04-04 | Fujitsu Ltd | データ管理装置 |
JPH1166095A (ja) * | 1997-08-25 | 1999-03-09 | Mitsubishi Electric Corp | データ管理装置 |
JP2008543233A (ja) * | 2005-06-01 | 2008-11-27 | フェア・アイザック・コーポレイション | ネットワーク保全用解析システム |
-
2010
- 2010-03-25 JP JP2010069950A patent/JP2011203958A/ja active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0991303A (ja) * | 1995-09-22 | 1997-04-04 | Fujitsu Ltd | データ管理装置 |
JPH1166095A (ja) * | 1997-08-25 | 1999-03-09 | Mitsubishi Electric Corp | データ管理装置 |
JP2008543233A (ja) * | 2005-06-01 | 2008-11-27 | フェア・アイザック・コーポレイション | ネットワーク保全用解析システム |
Non-Patent Citations (8)
Title |
---|
CSNB199700055001; A.V.エイホ、R.セシィ、J.D.ウルマン: コンパイラII-原理・技法・ツール- 初版, 19901010, p.527, 株式会社サイエンス社 * |
CSNB200900765001; 國友義久、小田圭二: 情報システムライブラリ データベース 初版, 20080628, p.186,188, 株式会社日科技連出版社 * |
CSND199800223001; 浪平博人: '特集 C言語で学ぶデータ構造&アルゴリズム:第1章 データ構造 9 ハッシュ(hash)' インターフェース 第16巻,第4号(通巻155号), 19900401, pp.178〜179, CQ出版株式会社 * |
CSND200300868014; 吉井一友: 'Linux Programming Tips:第10回 Glibプログラミング(後編)' C MAGAZINE 第13巻,第7号(通巻142号), 20010701, pp.123〜128, ソフトバンクパブリッシング株式会社 * |
JPN6012056428; 吉井一友: 'Linux Programming Tips:第10回 Glibプログラミング(後編)' C MAGAZINE 第13巻,第7号(通巻142号), 20010701, pp.123〜128, ソフトバンクパブリッシング株式会社 * |
JPN6012056429; A.V.エイホ、R.セシィ、J.D.ウルマン: コンパイラII-原理・技法・ツール- 初版, 19901010, p.527, 株式会社サイエンス社 * |
JPN6012056432; 浪平博人: '特集 C言語で学ぶデータ構造&アルゴリズム:第1章 データ構造 9 ハッシュ(hash)' インターフェース 第16巻,第4号(通巻155号), 19900401, pp.178〜179, CQ出版株式会社 * |
JPN6012056433; 國友義久、小田圭二: 情報システムライブラリ データベース 初版, 20080628, p.186,188, 株式会社日科技連出版社 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107273522B (zh) | 面向多应用的数据存储系统和数据调用方法 | |
US20130325915A1 (en) | Computer System And Data Management Method | |
US8095570B2 (en) | Decorated model architecture for efficient model-driven application development | |
CN109952564A (zh) | 数据库系统中测试数据的形成与操纵 | |
KR20070036374A (ko) | 데이터베이스로의 쿼리 전송 방법 및 쿼리 전송 시스템 | |
US8832022B2 (en) | Transaction processing device, transaction processing method and transaction processing program | |
JPH0415839A (ja) | 分散データベース管理装置 | |
CN102576354A (zh) | 支持不同部署架构的可扩展框架 | |
JP2010186476A (ja) | データ構造に対し並列に実行される複数の動作を含む、実行履歴の正しさを検証するためのコンピュータ実装方法、システム及びコンピュータ・プログラム | |
JPH076115A (ja) | データ処理システムのソフトウェアユーザによるハードウェアデータ移動機能の制御方法、プロセッサ間の操作の同期化方法、及び複数の装置制御ブロックの付与方法 | |
JP5799812B2 (ja) | データ配置・計算システム、データ配置・計算方法、マスタ装置、及びデータ配置方法 | |
JP5652480B2 (ja) | データベース更新通知方法 | |
US20220237041A1 (en) | Parallel processing system performing in-memory processing | |
US6317876B1 (en) | Method and apparatus for determining a maximum number of live registers | |
WO2005076128A1 (en) | Generating device specific requests | |
JP4432087B2 (ja) | データベース更新管理システム、プログラムおよび方法 | |
US5062039A (en) | Sharing of workspaces in interactive processing using workspace name tables for linking of workspaces | |
JPH09212369A (ja) | 記憶域割り付け装置 | |
JP2574985B2 (ja) | ディジタルデータ処理システムとエラー処理方法 | |
CN100527131C (zh) | 一种ims数据库互动式访问方法和工具 | |
JP2011203958A (ja) | データ処理装置、データ処理方法およびプログラム | |
US6556994B1 (en) | Method and system for improving concurrency through early release of unnecessary locks | |
JP2005032171A (ja) | データ共有のための機能モジュール間通信制御システム,機能モジュール間通信制御方法,機能モジュール間通信制御プログラムおよびその記録媒体 | |
US7996401B2 (en) | Inserting new transactions into a transaction stream | |
WO2007072567A1 (ja) | 並列処理支援装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20121002 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121030 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20130305 |