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

📄 god.h

📁 NS2网络仿真软件是目前最为流行的网络仿真模拟软件
💻 H
字号:
/* -*-	Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- *//* * Copyright (c) 1997 Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the Computer Systems *	Engineering Group at Lawrence Berkeley Laboratory. * 4. Neither the name of the University nor of the Laboratory may be used *    to endorse or promote products derived from this software without *    specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* Ported from CMU/Monarch's code, nov'98 -Padma.*//* -*- c++ -*-   god.h   General Operations Director   perform operations requiring omnipotence in the simulation   */#ifndef __god_h#define __god_h#include <stdarg.h>#include "bi-connector.h"#include "object.h"#include "packet.h"#include "trace.h"#include "node.h"#include "diffusion/hash_table.h"// Added by Chalermek  12/1/99#define MIN_HOPS(i,j)    min_hops[i*num_nodes+j]#define NEXT_HOP(i,j)    next_hop[i*num_nodes+j]#define SRC_TAB(i,j)     source_table[i*num_nodes+j]#define SK_TAB(i,j)      sink_table[i*num_nodes+j]#define	UNREACHABLE	 0x00ffffff#define RANGE            250.0                 // trasmitter range in metersclass NodeStatus {public:  bool is_source_;  bool is_sink_;  bool is_on_trees_;  NodeStatus() { is_source_ = is_sink_ = is_on_trees_ = false; }};// Cut and Paste from setdest.h   -- Chalermek 12/1/99class vector_ns {public:	vector_ns(double x = 0.0, double y = 0.0, double z = 0.0) {		X = x; Y = y; Z = z;	}	double length() {		return sqrt(X*X + Y*Y + Z*Z);	}	inline void operator=(const vector_ns a) {		X = a.X;		Y = a.Y;		Z = a.Z;	}	inline void operator+=(const vector_ns a) {		X += a.X;		Y += a.Y;		Z += a.Z;	}	inline int operator==(const vector_ns a) {		return (X == a.X && Y == a.Y && Z == a.Z);	}	inline int operator!=(const vector_ns a) {		return (X != a.X || Y != a.Y || Z != a.Z);	}	inline vector_ns operator-(const vector_ns a) {		return vector_ns(X-a.X, Y-a.Y, Z-a.Z);	}	friend inline vector_ns operator*(const double a, const vector_ns b) {		return vector_ns(a*b.X, a*b.Y, a*b.Z);	}	friend inline vector_ns operator/(const vector_ns a, const double b) {		return vector_ns(a.X/b, a.Y/b, a.Z/b);	}	double X;	double Y;	double Z;};// ------------------------class God : public BiConnector {public:        God();        int             command(int argc, const char* const* argv);        void            recv(Packet *p, Handler *h);        void            stampPacket(Packet *p);        int initialized() {                return num_nodes && min_hops && uptarget_;        }        int             hops(int i, int j);        static God*     instance() { assert(instance_); return instance_; }	int nodes() { return num_nodes; }        inline void getGrid(double *x, double *y, double *z) {		*x = maxX; *y = maxY; *z = gridsize_;	}  // Added by Chalermek 12/1/99        int  data_pkt_size;        // in bytes.         int  num_alive_node;        int  num_connect;        int  num_recv;        int  num_compute;          // number of route-computation times        double prev_time;          // the previous time it computes the route        int  num_data_types;              int  **source_table;        int  *sink_table;        int  *num_send;            // for each data type        Data_Hash_Table dtab;        void DumpNodeStatus();        void DumpNumSend();        void CountNewData(int *attr);        void IncrRecv();        bool ExistSource();        bool ExistSink();        bool IsPartition();        void StopSimulation();        void CountConnect();        void CountAliveNode();        void ComputeRoute();              int  NextHop(int from, int to);        void ComputeNextHop();     // Look at min_hops to fill in next_hop        void Dump();               // Dump all internal data        bool IsReachable(int i, int j);  // Is node i reachable to node j ?        bool IsNeighbor(int i, int j);   // Is node i a neighbor of node j ?        void ComputeW();           // Initialize the connectivity metrix        void floyd_warshall();     // Calculate the shortest path        void AddSink(int dt, int skid);        void AddSource(int dt, int srcid);        void Fill_for_Sink(int dt, int srcid);        void Fill_for_Source(int dt, int skid);        void Rewrite_OIF_Map();        void UpdateNodeStatus();                // Return number of next oifs in ret_num_oif.        // Return array of next oifs as return value of the function.        int *NextOIFs(int dt, int srcid, int curid, int *ret_num_oif);          // serve for GAF algorithm          int load_grid(int,int,int);        int getMyGrid(double x, double y);        int getMyLeftGrid(double x, double y);        int getMyRightGrid(double x, double y);        int getMyTopGrid(double x, double y);        int getMyBottomGrid(double x, double y);                inline int getMyGridSize() {		return gridsize_;	}  // -----------------------private:        int num_nodes;        int* min_hops;   // square array of num_nodesXnum_nodes                         // min_hops[i * num_nodes + j] giving 			 // minhops between i and j        static God*     instance_;        // Added by Chalermek    12/1/99        bool active;        bool allowTostop;        MobileNode **mb_node; // mb_node[i] giving pointer to object                               // mobile node i        NodeStatus *node_status;        int *next_hop;        // next_hop[i * num_nodes + j] giving                              //   the next hop of i where i wants to send                              //	 a packet to j.        int maxX;          // keeping grid demension info: max X, max Y and         int maxY;          // grid size        int gridsize_;        int gridX;        int gridY;};#endif

⌨️ 快捷键说明

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