📄 mpstrstream.h
字号:
/* * 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.h,v 1.2 2002/04/05 08:48:31 takayuki Exp $ */// $Header: /home/CVS/configurator/mpstrstream.h,v 1.2 2002/04/05 08:48:31 takayuki Exp $#ifndef __MPFSTREAM#define __MPFSTREAM#ifdef _MSC_VER #pragma warning(disable:4786)#endif#include "except.h"#include "garbage.h"#include <fstream>#include <strstream>#include <list>#include <string>class mpstrstream : public Garbage{public: enum { DEFAULT = 0, NO_SERIALIZE = 1 };protected: struct tagStreamPartInfo { std::string name; std::strstream stream; int flags; }; std::string filename; std::list<struct tagStreamPartInfo *> container; std::list<struct tagStreamPartInfo *>::iterator current; std::list<struct tagStreamPartInfo *>::iterator _find(const char * partname) const;public: enum tagPosition { BEGIN, END }; mpstrstream(void); mpstrstream(const std::string &); mpstrstream(const char * filename); ~mpstrstream(void); bool operator ! (void) const; std::strstream & operator * (void) const; std::strstream & operator [] (const char *); std::strstream & operator [] (unsigned int); std::strstream & operator [] (enum tagPosition); std::strstream & operator ++ (void); std::strstream & operator -- (void); bool is_valid(void) const; const std::string & getStreamName(void) const; const std::string & getPartName(void) const; std::strstream & getStream(void) const; std::strstream & moveto(const std::string & partname); std::strstream & moveto(const char * partname); std::strstream & moveto(unsigned int offset); std::strstream & moveto(enum tagPosition pos); std::strstream & movenext(void); std::strstream & moveprev(void); std::strstream & createpart(const char * partname, const char * second = 0, ... ); std::strstream & insertpart(const char * partname, const char * successor = 0); void erasepart(const char * partname); void movepart(const char * partname, const char * successor = 0); void assignFilename(const std::string &); void assignFilename(const char *); void serialize(void); std::ostream & serialize(std::ostream &); int setf(const char * partname, int); int setf(int); template<class T> std::strstream & operator << (const T & src) { (*current)->stream << src; return (*current)->stream; };};inline mpstrstream::mpstrstream(void){ current = container.end(); }inline mpstrstream::mpstrstream(const std::string & src){ current = container.end(); filename.assign(src); }inline mpstrstream::mpstrstream(const char * file){ current = container.end(); filename.assign(file); }inline const std::string & mpstrstream::getStreamName(void) const{ return filename; }inline const std::string & mpstrstream::getPartName(void) const{ return (*current)->name; }inline std::strstream & mpstrstream::getStream (void) const{ return (*current)->stream; }inline std::strstream & mpstrstream::operator * (void) const{ return getStream(); }inline bool mpstrstream::is_valid(void) const{ return !(container.end() == current); }inline bool mpstrstream::operator ! (void) const{ return is_valid(); }inline std::strstream & mpstrstream::operator [](const char * partname){ return moveto(partname); }inline std::strstream & mpstrstream::operator [](unsigned int offset){ return moveto(offset); }inline std::strstream & mpstrstream::operator [](enum tagPosition pos){ return moveto(pos); }inline std::strstream & mpstrstream::operator ++ (void){ return movenext(); }inline std::strstream & mpstrstream::operator -- (void){ return moveprev(); }inline std::strstream & mpstrstream::moveto(const std::string & partname){ return moveto(partname.c_str()); }inline std::strstream & mpstrstream::movenext(void){ current++; return (*current)->stream; }inline std::strstream & mpstrstream::moveprev(void){ current--; return (*current)->stream; }inline void mpstrstream::assignFilename(const std::string & src){ filename.assign(src); }inline void mpstrstream::assignFilename(const char * src){ filename.assign(src); }inline int mpstrstream::setf(const char * partname, int flag){ this->movepart(partname); return setf(flag);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -