⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arraylist.h

📁 MONA是为数不多的C++语言编写的一个很小的操作系统
💻 H
字号:
// This software is in the public domain.// There are no restrictions on any sort of usage of this software.#ifndef __SYSTEM_COLLECTIONS_ARRAYLIST_H__#define __SYSTEM_COLLECTIONS_ARRAYLIST_H__#ifdef DEBUG#ifdef MONA#include <monapi.h>#else#include <stdio.h>#include <stdlib.h>#endif#endif#include <gui/System/Object.h>#define FOREACH_AL(type, iterator, arrayList) \	if ((arrayList)->get_Count() > 0) {type iterator;\		for (int __##iterator = 0; \			__##iterator < (arrayList)->get_Count() && (&(iterator = (arrayList)->get_Item(__##iterator)) || true); __##iterator++)#ifndef END_FOREACH_AL#define END_FOREACH_AL }#endifnamespace System { namespace Collections{	template <class T> class ArrayList : public System::Object	{	protected:		static const int DefaultCapacity = 16;		T* pointer;		int count, capacity;		private:		inline void Initialize()		{			this->pointer  = new T[ArrayList::DefaultCapacity];			this->count    = 0;			this->capacity = ArrayList::DefaultCapacity;		}		public:		virtual String get_TypeName() { return "System.Collections.ArrayList"; }				ArrayList()		{			this->Initialize();		}			virtual ~ArrayList()		{			delete [] this->pointer;		}			void Clear()		{			delete [] this->pointer;			this->Initialize();		}				virtual void Add(T item)		{			if (this->count == this->capacity)			{				this->capacity <<= 1;				T* ptr = new T[this->capacity];				for (int i = 0; i < this->count; i++) ptr[i] = this->pointer[i];				delete [] this->pointer;				this->pointer = ptr;			}			this->pointer[this->count] = item;			this->count++;		}				virtual void RemoveAt(int index)		{			this->count--;			for (int i = index; i < this->count; i++)			{				this->pointer[i] = this->pointer[i + 1];			}			this->pointer[this->count] = *(new T());		}				virtual void Remove(T item)		{			int idx = this->IndexOf(item);			if (idx < 0) return;						this->RemoveAt(idx);		}				virtual int IndexOf(T item)		{			for (int i = 0; i < this->count; i++)			{				if (this->pointer[i] == item) return i;			}			return -1;		}			inline T* get() { return this->pointer; }		inline int get_Count() const { return this->count; }		inline int get_Capacity() const { return this->capacity; }			inline T& get_Item(int index)		{	#ifdef DEBUG			if (index < 0 || this->count - 1 < index)			{				printf("ERROR: [ArrayList] out of range (%d/%d)\n", index, this->count);				exit(1);			}	#endif			return this->pointer[index];		}	};}}#endif  // __SYSTEM_COLLECTIONS_ARRAYLIST_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -