📄 mpstrstream.cpp
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: mpstrstream.cpp,v 1.2 2002/04/05 08:48:31 takayuki Exp $ */// $Header: /home/CVS/configurator/mpstrstream.cpp,v 1.2 2002/04/05 08:48:31 takayuki Exp $#include "mpstrstream.h"#include <stdarg.h>using namespace std;typedef std::list<struct mpstrstream::tagStreamPartInfo *> List;list<struct mpstrstream::tagStreamPartInfo *>::iterator mpstrstream::_find(const char * partname) const{ List::const_iterator scope; scope = container.begin(); while(scope != container.end()) { if((*scope)->name.compare(partname) == 0) break; scope++; } return *reinterpret_cast<List::iterator *>(&scope);}mpstrstream::~mpstrstream(void){ if(!filename.empty()) serialize(); while(!container.empty()) { delete *(container.begin()); container.pop_front(); }}strstream & mpstrstream::moveto(const char * partname){ List::iterator scope; scope = container.begin(); while(scope != container.end()) { if((*scope)->name.compare(partname) == 0) break; scope ++; } current = scope; return (*current)->stream;}strstream & mpstrstream::moveto(unsigned int pos){ List::iterator scope; scope = container.begin(); while(pos -- > 0) scope ++; current = scope; return (*current)->stream;}strstream & mpstrstream::moveto(enum tagPosition pos){ switch(pos) { case BEGIN: current = container.begin(); break; case END: current = container.end(); break; } return (*current)->stream;}strstream & mpstrstream::createpart(const char * partname, const char * second, ... ){ struct tagStreamPartInfo * info; va_list vl; va_start(vl, second); vl = (char *)vl - sizeof(const char *); while(partname != 0) { info = new struct tagStreamPartInfo; info->name.assign(partname); info->flags = DEFAULT; container.insert(current, info); partname = va_arg(vl, const char *); } return (*current)->stream;}strstream & mpstrstream::insertpart(const char * partname, const char * successor){ struct tagStreamPartInfo * info; List::iterator scope; scope = container.end(); if(successor != 0) if((scope = _find(successor)) == container.end()) Exception("Stream does not have the part (%s).","ストリ〖ムは惰茶(%s)を积ちません").format(successor); info = new struct tagStreamPartInfo; info->name.assign(partname); info->flags = DEFAULT; current = container.insert(scope, info); return (*current)->stream;}void mpstrstream::erasepart(const char * partname){ List::iterator scope; if((scope = _find(partname)) == container.end()) return; if(scope == container.begin()) { current = container.begin(); current ++; }else { current = scope; current --; } delete (*scope); container.erase(scope);}void mpstrstream::movepart(const char * partname, const char * successor){ List::iterator src; List::iterator dest; if((src = _find(partname)) == container.end()) Exception("Stream dones not have the part (%s).","ストリ〖ムは惰茶(%s)を积ちません").format(partname); if(successor != 0) { if((dest = _find(successor)) == container.end()) Exception("Stream dones not have the part (%s).","ストリ〖ムは惰茶(%s)を积ちません").format(successor); }else dest = container.end(); current = container.insert(dest, (*src)); container.erase(src);}void mpstrstream::serialize(void){ fstream file(filename.c_str(), ios::out); if(!file.is_open()) Exception("File creation failure of %s","ファイル(%s)が侯れません").format(filename.c_str()); serialize(file); file.close();}ostream & mpstrstream::serialize(ostream & out){ List::iterator scope; scope = container.begin(); while(scope != container.end()) { if(((*scope)->flags & NO_SERIALIZE) == 0) out.write((*scope)->stream.str(), (*scope)->stream.pcount()); scope ++; } return out;}int mpstrstream::setf(int flag){ int old_flag; if(current == container.end()) return -1; old_flag = (*current)->flags; (*current)->flags = flag; return old_flag;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -