////////////////////////////////////////////////////////////////////// // llist(orig) // copy constructor // as class makes use of dynamic memory allocation, explicit copy // constructor is required. creates an exact copy of orig. // // parameter: llist &orig - reference to original linked list ////////////////////////////////////////////////////////////////////// llist::llist(llist &orig) { data dummy={-1,noitem,noitemtype,0,0,0,0,0}; // data dummy={-1,"",""}; // safe old current node llnode *oldcurrent = orig.current; // allocate nodes for new list head = new llnode(dummy, NULL); if (head == NULL) exit(-1); tail = new llnode(dummy, NULL); if (tail == NULL) exit(-1); // adjust links head->setSuccessor(tail); tail->setSuccessor(NULL); current = head; // copy contents of linked list orig.gotoHead(); while (orig.gotoSuccessor() == ok) { if (orig.current == orig.tail) break; insertAfter(orig.accessData()); gotoSuccessor(); } // find current node in original and copied list orig.gotoHead(); gotoHead(); while (orig.current != oldcurrent) { orig.gotoSuccessor(); gotoSuccessor(); } }
int socket::accept() { SOCK *sock; int new_desc; #ifndef WIN32 if((new_desc = ::accept(descriptor, NULL, 0)) < 0) #else if((new_desc = ::accept(descriptor, NULL, 0)) == INVALID_SOCKET) #endif { #ifndef WIN32 Log("socket: Accept failed accept()"); #else Log("socket: Accept failed accept() Error [%d]", WSAGetLastError()); #endif return 0; } sock = new SOCK(new_desc); sock->get_address(); Log("socket: New connection from %s", sock->ip); sockets.insert(sock); return 1; }
//////////////////////////////////////////////////// // inventory() // // Uses LINKED LIST [Head]-[Current]-[End] //////////////////////////////////////////////////// void llist::inventory(llist itemlist){ cout<<"OPERATION: Print List\n"; // print out linked list printList() itemlist.printList(); // printout my stats }
void checkIsEmpty(const llist& list) { if (list.isEmpty()) { cout << "List is empty" << endl; } else { cout << "List is not empty" << endl; } }
virtual bool in_msg_push(msg_t _msg) override { return in_llist_.push(_msg); }
virtual msg_t out_msg_get() { return out_llist_.get(); }
virtual msg_t in_msg_get() { return in_llist_.get(); }
virtual bool out_msg_push(msg_t _msg) override { return out_llist_.push(_msg); }
int socket::check_connections() { SOCK *sock, *sock_next; struct timeval tv; int max_desc = descriptor; int desc; FD_ZERO(&fd_read); FD_ZERO(&fd_write); FD_ZERO(&fd_exc); FD_SET(descriptor, &fd_read); tv.tv_sec = 0; tv.tv_usec = 0; for(sock = sockets.begin(); sock; sock = sockets.next()) { desc = sock->descriptor; if(desc > max_desc) max_desc = desc; FD_SET(desc, &fd_read); FD_SET(desc, &fd_write); FD_SET(desc, &fd_exc); } if(::select(max_desc+1, &fd_read, &fd_write, &fd_exc, &tv) < 0) Log("socket: select()"); if(FD_ISSET(descriptor, &fd_read)) accept(); for(sock = sockets.begin(); sock; sock = sock_next) { sock_next = sockets.next(); desc = sock->descriptor; if(FD_ISSET(desc, &fd_exc)) { sockets.remove(); delete sock; continue; } if(FD_ISSET(desc, &fd_write) && sock->output.length() > 0) { Log("socket: check connections: found data...."); sock->send(); } if(FD_ISSET(desc, &fd_read)) { if(sock->recv() <= 0) { sockets.remove(); delete sock; continue; } } } return 0; }
void addfun(obj *o) { if(!o->codegen_done) nocg_funs.insert(o); };