議論/MonAPI2(仮) クラス・ファイル体系


Top / 議論 / MonAPI2(仮) クラス・ファイル体系

monapiとmonalibcにあった全ての関数を集めてまとめなおした物です。
(2005/08/04)junjunn

ライブラリを再編する目的

  1. ライブラリの統合
    • 何人かの人がバラバラに何種類ものライブラリセットを作っていたため重複しているコードやどこに何があるのかわかりづらかった状況をmonapi一つにまとめ収束することで解決し利便性を増す。
  2. ライブラリの必要性
    • Monaが使えるOSになるためにはプログラマーの労力を減らしできるだけソフトを作りやすくする環境作りのためのライブラリ一式を提供する必要がある。(ライブラリの提供元はMona本家からである必要はなく第三者が別のセット(サブセットでも)を作っても全く構わないが本家から最低限一つのセットは提供する形にしておいた方が迷わず便利かと。)
  3. 依存関係の整理
    • monapiの一部の関数はlibc系に依存し、libc系の一部の関数はmonapiに依存していたのは依存関係として健康ではない。必要なlibcの処理をmonapiの中に吸収しmonapiをlibcから独立させる。
  4. ライブラリの整理
    • libcは現在の視点から見ると使われなくなった関数や古いスタイルやC(非++の方)の制限に縛られている点など理不尽な点も多々あり現代的とは少し言いにくい。monapiは負の遺産を受け継がない観点からlibcにはとらわれず現代的で便利なライブラリを0から作り直す。(過去互換のためlibcコードは受け付けるようにはする)
  5. 使いやすさのアップ・ドキュメントの完備
    • 説明が載っていなく使われている用途や使い方がわからない物に説明や使用例をつけて使いやすいようにする。
  6. スタイルの一貫性
    • バラバラだった名前規則などを統一する。


大分類(仮)

  1. Basic
    • StringやMathなど単純なメモリに対するやりくり。MonaOSの外でも単純にライブラリ呼び出しとして使用できるぐらい独立してるかが基準。
  2. OS
    • ハンドルなどOSの構造そのものが関わってくる。MonaOSの構造であり普通はMonaOSの中でしか意味がない。
      OSの構造と(アプリ製作には必要ない)、OSの提供する機能(アプリ製作に必要)を分けるべきかもしれないが実際問題としては両者は切り離しにくいのでOSの提供するAPIはドキュメントを提供する事で識別する。
  3. Multimedia(BMP・色・サウンド・・・)
    • グラフィックやサウンド。将来的には分野が大きくなりそうなので別に分ける。

小分類(仮)

Basic - メモリ操作だけで完結できる基本的な関数

Types.h
typedef記述
typedef unsigned int uint;
など・・・
String.h
文字列関連
class StringFn - 文字列関数をまとめたstaticクラスint copy(char *s1, const char *s2,int CopyLength=-1); //strcpy,strncpy
char* join(char *s,const char *t); //strcat
char* find(const char* str1, const char* str2); //strstr
uint getLength(const char*); //strlen
int compare(const char*, const char*,int nLength); //strcmp,strncmp
int format(char *s, const char *format, ...); //sprintf
int formatV(char *s, const char *format,va_list arg); //vsprintf
int toInt(const char *s, int base=10,char **endptr=NULL); //ltoa
uint findAnyOf(const char* str1, const char* str2); //strcspn
uint findNoneOf(const char* str1, const char* str2); //strspn
class CharFn
isDigitなどのis〜系とtoUpperなどのto〜系をまとめたstaticクラス
int isAlphaNumber(int c);
int isAlpha(int c);
int isASCII(int c);
int isDigit(int c);
int isLower(int c);
int isSpace(int c);
int isUpper(int c);
int toUpper(int c);
int toLower(int c);
class String
汎用動的拡張文字列クラス。
Manapiに元からあったclass CStringと(作者不明)、私が作ったCStringクラスの二つがありますがどうしましょうか。
Math.h
数学関連
class MathFn - sin,cos,tan,floor,logなど数学関連をまとめたstaticクラスint absolute(int i);
void divide(long int numer,long int denom,long* plQuotient,long* plRemainder);
double sin(double angle);
double cos(double angle);
double tan(double angle);
double squareroot(double num);
double atan(double x, double y);
double atan(double x);
double acos(double x);
double modf(double x, double *buf);
double floor(double x);
double log(double x);
double log10(double x);
double exp(double x);
double power(double x, double y);
uint power(uint x, uint y);
double ceil(double x);
class Random
ランダムジェネレータ
Memory.h
メモリ関連
class MemoryFn
memmov,memcpyなどのメモリ関数をまとめたstaticクラス
void swap(char *a, char *b, uint size); //いわゆるmemswap
void *move(void* s1, const void* s2, uint size);
int compare(const void* s1, const void* s2, uint size);
void* set(void*, int, uint);
void* copy(void* s1, const void* s2, uint size);
File.h
ファイル関係
class FileFn ファイルの読み出し・書き出し予定(未実装)
Search.h
探索・ソート関連
void QuickSort(void *base, uint n, uint size, int (*fnc)(const void*, const void*));
void BinarySearch(const void *key, const void *base, uint n, uint size, int (*fnc)(const void *, const void *));
Limits.h
INT_MAXなどのdefine値たち
VA.h
可変引数
#define VA_SET_START(ap,last) //va_start
#define VA_ADVANCE(ap,type) //va_arg
#define VA_SET_END(ap) //va_end
Collection.h
コレクション
class template<class TYPE>Array;
class template<class TYPE>List;
class template<class TYPE>Stack;

class StringMap; //同一キーが生成された時の衝突を自動的にマネージしてくれる。
class StringMapCollidable; //同一キーが生成された時の衝突は後のが上書き。
class StringList;
class StringArray;

class template<class TYPE>ArrayHeap;
class template<class TYPE>ListHeap;

OS - OS構造

Types.h
typedefなど
typedef void (FuncVoid)();
typedef int (FuncMain)(int argc, char* argv[]);
typedef int (FuncMonaMain)(List<char*>*);
#define MONAPI_BOOL int
#define MONAPI_TRUE 1
#define MONAPI_FALSE 0
System.h
システムコール(getProcessID()など)
class System;
MonaApplication.h
Monaアプリケーションフレームワーク
interface Receiver;
class MonaApplication;
Message.h
メッセージング
enum{ID_MOUSE_SERVER,〜};
struct monapi_directoryinfo;
struct CommonParameters;
MONAPI_BOOL monapi_wait_interrupt(ms, irq);
#define MONAPI_WAIT_INTERRUPT(ms, irq) monapi_wait_interrupt(ms, irq, __FILE__, __LINE__)
Memory.h
メモリ
class MemoryMap メモリマップ
struct monapi_cmemoryinfo; メモリ割り当ての領域と情報
Screen.h
スクリーン
class Screen;class VirtualScreen;
Keyboard.h
キーボード・キー
class Keys;
など
MultiThread.h
マルチスレッド
class Mutex;
Time.h
時刻
class Date;
Debug.h
デバッグ
#define Log logprintf("%s#%s:%d:", __FILE__, __func__, __LINE__), logprintf
#define onAssertError();
#define ASSERT(condition)

Multimedia
グラフィックやサウンド

Color.h
class Color;

その他私から追加キボンヌな物

String.hclass StrDivide //文字列をトークンで区切って取り出すクラス
class StringFnconst char* duplicate(const char* szIn); ///<strdup。
void empty (char* szOut); ///<空にする。
int replace (char* szOut,char cFrom,char cTo); ///<文字置き換えchr版。szSrcには置き換え後の文字列の長さを格納できるだけのバッファがなければならない。
int replace (char* szOut,const char* cszFrom,const char* cszTo); ///<文字列置き換えstr版。szSrcには置き換え後の文字列の長さを格納できるだけのバッファがなければならない。
int remove (char* szOut,const char* cszRemove); ///<cszRemoveをszSrcから取り除く。
void toLower(char* szOut); ///<szSrc全部を小文字に変換。
void toUpper(char* szOut); ///<szSrc全部を大文字に変換。
const char* toString(char* szBuffer,int i); ///<iを%d文字列にしszBufferに入れる。
bool isEqual (const char* cszP,const char* cszQ,int iLen=-1); ///<文字列比較。iLen==-1の場合は全文比較、それ以外の場合は指定した長さまで。
bool isEqualI(const char* cszP,const char* cszQ,int iLen=-1); ///IsEqualの大文字小文字関係なしバージョン。
bool isEmpty (const char* cszSource); ///<空かどうか。
int compareI(const char* cszP,const char* cszQ,int iLen=-1); ///<文字列比較。大文字小文字無視。
int getCountAppear(const char* cszSource,char cFind,int iMaxSearch=0); ///<cszSourceにcFindが何回出てきたか。
char* findI (const char* cszSource,const char* cszFind,const char* cszFindI=NULL); ///<cszSourceのなかからcszFindを大文字小文字問わず見つける。cszFindIはcszFindの大小文字反転版。NULLの時は自動で生成されるが何回も検索するようなときには自前でセットしておける。
char* findR(const char* cszSource,char c);
Language.h
言語・文字コードなど
class SCLanguage
///ワイド⇔マルチ文字の変換
static int convertSJisToUnicode(wchar* wszOut ,const char* cszIn ,int iMaxInLen=-1); ///<char → wchar
static int convertUnicodeToSJis(char* szOut ,const wchar* cwszIn ,int iMaxInLen=-1); ///<wchap → char
static int convertSJisToUnicode(class CBuffer* pbufOut,const char* cszIn); ///<char → wchar
static int convertUnicodeToSJis(CBuffer* pbufOut,const wchar* cwszIn); ///<wchar → char
static int convertSJISToUnicode2(int iSJISCode); ///SJIS文字コードからUnicode(2バイト幅形式)文字コードに変換
static int convertUnicode2ToSJIS(int iSJISCode); ///Unicode(2バイト幅形式)文字コードからSJIS文字コードに変換
File.hclass SplitPath; //パスをディレクトリとファイル名に分解するクラス
class SplitFilename; ファイル名を名前と拡張子にわけるクラス
Buffer.h
汎用バッファ
class CBuffer;
Bit.h
ビット操作
class SCBitstatic bool Get(int iTarget,int iBitIndex);///<iTargetのiBit番目のビットのboolを返す。
static bool Set(int *piTarget,int iBitIndex,bool bOn); ///<*piTargetのiBit番目のビットにbOnをセットする。

廃止する関数・クラス

呼び出しがない・今はもう使われていない

代換関数があるので置き換える

OS関連

移動

コメント

このリストはMonapiの一部を表した物です。
全体を書くには大きすぎるため、おおまかな構造を理解するのに必要な部分だけを抜粋しました。
テーブルの空白部分なども全部中身はあります。

分類がおかしい物、名前がおかしい物、追加したい物、欲しい物、廃止したい物を議論してゆきましょう。

コメントはありません。 コメント/議論/MonAPI2(仮) クラス・ファイル体系?

お名前:

MENU

now: 6

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 3486, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3885d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.111 sec.